いつもお世話になっております。Mきちです。
RX64Mでコード生成機能の初期化とユーザ関数を使用してSCI通信×3を行っているCS+のプロジェクトがあります。OSは使用していません。ここにT4ライブラリで、UDP/TCPで2chのEther通信機能を加えるには、どうしたらいいのでしょうか?FITモジュールの追加にはBSPが必須のようですし、BSPをいれるにはコード生成で作成した既存機能が使えなくなってしまうし。。。なにかアドバイスなどありましたらお願いします。
わわいです
RXでのTCPの通信のサンプルソースがあると思うんで、それを動かしておいて、そこにSCI 通信を追加していく、というのが現実的かと思います。
コード生成やらなんやらのソースを参考にして組みこんでいけばそんなに難しくはないと思いますが。。
Mきちさん
こんにちは、シェルティです。
私もわわいさんと同じ意見です。Etherが動作する環境に以下SCIモジュールを追加してみてはどうでしょうか。https://www.renesas.com/ja-jp/software/D6000370.html
私はRX231のSDHIで無線LAN+TCP/IP制御させつつ、上記SCIモジュールでUARTモードを複数チャネルで動かすのを1システムで試してみましたが、素直に全チャネル動いてくれました。
コード生成の出力コードを使う場合は、Etherが動作する環境にコード生成の出力コードを登録していき、コンパイルエラーを取り除く、としていけばOKと思います。
以上です
Mきちです。 わわいさん、シェルティさん、回答ありがとうございます。
RSKのボード上で、BSP+FITを使って動作させるのは、容易に感じますが
ユーザーボード上で、BSPを動かすことに難しさを感じています。
コード生成機能を使用した場合、GUIでポートI/Oや割込みレベルを設定して
ユーザ用の空関数に処理を追加していけば済みますが
BSPを使用する場合、platform.h から躓いている感じです。
SCI×3の6ポート以外にも、モータやセンサの入出力があるので
BSPのどこを修正すれば済むのか、コード生成で出力されたコードのマージ方法もあわせて
もう少し、BSPを調べてみます。
BSPはいろいろ組み込まれていて少し複雑ですね。私はあまりコード生成を使ったことがない(RL78で音声再生するときに少し使いました)ので、BSPとコード生成の共存方法の情報をまとめてみたいと思います。また、ユーザボードでBSPを使用するための改造方法もまとめてみます。少々お待ちください。
BSPは少しとっつきづらいですが、色々なRXマイコンを使いまわすときにやはり共通の定義や関数、スタートアップが用意されているのは楽と思っています。
Mきちです。
コード生成を使うと、ユーザマニュアルを見なくても
マイコンの初期化ができるところが気に入って使っています。
今は、おふたりのアドバイスにしたがい、ユーザーボード+BSP+T4を試みていますが
phyチップの初期化で躓いています。
久しぶりに、RX64Mのユーザマニュアルを見ながらMPCの設定をして
phyチップがLAN8720Aなので、r_ether_rx_config.hの先頭でRMIIに変更したものの
phy_init()関数でリセットに失敗しています。
先日使用したAlphaのボードは、LAN8710でMII/RMIIなので、そのままでいけましたが
今回はRMIIのみなので、phy_read/phy_writeの関数から改造しなくてはならないのかな?
と考えています。
ネットで検索したところ、RX62Nの事例があり、LAN8720Aのマニュアルを検索しましたが。。。英語。
このあたり、phyチップの違いによる修正点などは、どこかに記載されていないでしょうか?
CGとFITの同時利用についてはもう少し時間をください。(週末は別のソフトを書いてました)
LAN8720Aですが、RX63N搭載のGR-SAKURAボードに搭載されていますね。標準のEtherドライバ(https://www.renesas.com/ja-jp/software/D6000354.html)で動作確認できています。
PHYチップ変更時のドキュメントですが、上記Etherドライバの資料によると、コンフィグレーション(r_ether_rx_config.h)で設定ができるようになっています。
まずは、ETHER_CFG_MODE_SELを(1)、RMII設定に変更します。次にETHER_CFG_CH0_PHY_ADDRESSを回路図とPHYチップのデータシートを見ながら、0~31の間で設定します。PHYアドレスはIICアドレスのように、PHYチップ外部端子設定+PHYチップ内部で決まります。(PHYアドレスの外部端子設定がないPHYチップの場合、PHYチップで固定です)
次にETHER_CFG_USE_LINKSTAを(0)にします。(ET_LINKSTA端子とPHYチップのリンク状態出力端子をつないでいる場合は(1)でOKです)
あとは、ハードウェアマニュアルを見ながら、PHYチップとつながっているRX64Mの端子をMPCのPFSレジスタを使って全部Etherモードに変更してくソフトウェアを書いてシステム起動時、Etherドライバ初期化前に動作させればOKです。
(最近のe2 studioだと、FITモジュール組み込み時にMPCの設定コードも コード生成できるようになってきているようです)
シェルティさん、たびたびの回答ありがとうございます。
ETHER_CFG_MODE_SEL は1にしましたが、PHYアドレスは意識していませんでした。
お恥ずかしいことに、2つあるので単純に0と1を設定していました。
PHYチップで固定なんですか? 調べてみます。
Mきちです。やっと、ユーザーボード上でのT4が動作しました。
PHYアドレスは、ch0,1ともに0でした。つまづいた原因は、PHYチップのリセットのL/Hを間違えていて、リセットかかりっぱなしでした。
あわせて、動作確認用のLED出力のポートIOをFITで追加してみましたが、個人的には、ポート入出力のような簡単な機能はCGのほうが理解しやすいかもしれません。
BSP+T4の環境も出来ましたので、SCIに関しては、CGのコードを加える方法と、FITで機能を追加する方法を両方とも試してみます。
ひとまず、ありがとうございました。
シェルティです、こんにちは。
うまく動作して良かったです。
CGとFITの組み合わせについては今後まとめてみます。時間かかってしまいすみません。
私も自前ボードのときに一度PHYチップのリセットでつまづいたことがありますね。
_phy_read()実行でPHYチップのステータスレジスタが読めたらPHYチップ生きてる、というのが、
ボード作成直後のEther動作確認のチェックポイントになりますね。
遅くなりましたが、CG+BSP+T4のプロジェクトが出来ましたので、報告しておきます。
作業手順は以下の通りです。
1) CGプロジェクトでCMT0を使用していたのを、CMT3に移動。
2) CGプロジェクトフォルダに、BSPプロジェクトから以下のフォルダをコピー。
r_config/r_bsp/r_cmt_rx/r_gpio_rx/
r_ether_rx/r_t4_driver_rx/r_t4_rx/(r_pincfg)
3) CGプロジェクトのプロジェクトツリーにドラッグ&ドロップで追加。
4) ビルドプロパティで、T4ライブラリの指定とセクションを追加。
5) CGプロジェクトの以下のファイルをビルド対象外に設定。
r_cg_resetprg.c/r_cg_vecttbl.c/r_cg_dbsct.c/r_cg_sbrk.c
6) r_cg_vect.h から競合する未使用の#pragma interrupt をコメント化。
7) BSPのresetprg.c の hardware_setup() 直後にCGのHardwareSetup() を追加。
8) vector110 はCG側を使用したいので、mcu_mapped_interrupts.h の該当行をコメント化。
以上です。 こうすれば、もっと良いなどアドバイスをいただけると助かります。
ユーザーボードの場合で入出力ポートの変更や追加が発生した場合に、CGプロジェクトのほうが、直感的に見つけやすく手早く対応できると感じていますので、当分はこの方法でプロジェクトを作成していこうと考えています。
もう少し大きなプロジェクトになったら、次はこれにRTOS追加かもしれません。CMTで苦労しそうですね。