Articles

RX64Mでスマートコンフィグレータを使用したアプリの作成

1.新しいプロジェクトを作成する
2.プロジェクトの作成
・マイクロコントローラ:RX
・使用するコントローラ:R5F564M (使用するマイコンに合わせる)
・プロジェクトの種類:空のアプリケーション(CC-RX)
・プロジェクト名:任意
・作成場所:任意
・プロジェクト名のフォルダを作成する:チェック推奨
以上を設定して「作成」ボタンをクリック

3.スマートコンフィグレータを起動
プロジェクトツリーから、スマートコンフィグレータ(設計ツール)をダブルクリック
初期状態では、コンポーネントにr_bspのみ登録されている。
・ボードの設定はそのまま
・クロックの設定を実際のボードの構成に合わせる

3.コードの生成
コードの生成ボタンをクリックする。
セクション設定画面が表示されるので、「はい」を選択して変更を行う。
プロジェクトツリーのファイルを見ると、Smart Configuratorにソースが追加されている。

4.ビルド
この状態でビルドすると、main関数が無いと言って、エラーが出る。
これは、初めに空のアプリケーションを作った為。
(普通のアプリケーションを作ると、余分なファイルが出来て、スマートコンフィグレータを使用すると消される)
なので、メインのソースファイルを追加する。
・まずは、新しいカテゴリ(フォルダ)「src」を追加する。
・「src」を選択して、新しいファイルを追加する。
(ファイル名は任意、作成場所に、「src\」を追加)
・void main(void){} を追加すれば、ソースファイルの完成。
これで、ビルドが正常に完了する。

5.最低限のソース

なぜか、「R_Pins_Create」は初期化時に実行されないらしい。

今回のバージョンでは、これだけですんなりと動くようになっており、かなり進歩した感じ。

RX64MにSDRAMを追加する

今回使用するSDRAMはISSIのIS42S16160。256Mbitです。
接続については、データシート通り。

1.スマートコンフィグレータでバスを追加
名前はそのままで、終了をクリック。
2.バスの一般設定
 外部バス領域のSDCSをチェックする。
3.SDCS設定
アドレスマルチプレクスと、バスタイミングを設定する。
4.ソースに初期化処理を追加する
R_Config_BSC_InitializeSDRAM();
を追加することで、SDRAMが使用出来るようになります。

RX64MのEthernet1のみ使用する

RX64MにはEthernetコントローラが2ch搭載されています。ルネサスのTCP/IPライブラリであるT4を使う場合、1chまたは、2chを選択することが可能です。しかし、1chで使用する場合はEthernet0が使用されるため何とかしたいと思います。

使用したバージョン
M3S-T4-Tiny(Ethernet) version 2.09 for RXV1 LITTLE endian.(Jun 18 2019, 18:43:35)

1.コンポーネントから「r_t4_rx」を追加する。
r_ether_rx
r_cmd_rx
r_sys_timer_rx
r_t4_driver
が追加される。

2.r_ether_rxの設定を行う
今回は、ETHERC1を使用する為、下記の通り設定。
3.r_t4_rxの設定を行う
今回は、1chのみ使用する為、下記の通り設定。
4.コード生成を行う。

5.ソースの改造
T4ライブラリでは、1CHで使用する場合は、ETHERC0を使用するのが前提らしい。
なので、まともに動かない。
(ちなみに、1chしか使用しない場合でも、T4を2ch設定にしてしまえば、そのままでも使える。ただし、メモリが多くいる)
改造するためには、スマートコンフィグレータで作成したファイルを編集する必要があるが、
コード生成を行うたびに戻ってしまう恐れがある為、コピーを追加する。
・既存のソースをビルドから除外する。
・コピーしたソースをプロジェクトに追加し、編集する。
単純に、アクセスするチャンネルを0と1をすべて入れ替えました。
修正したファイルはこちらです。(動作未保障)

6.動作確認
以下のコードにて、PCからPINGが通ることを確認。

以前と比べ、T4はかなり進歩してますね。DHCPも標準で対応してる。

RX64MでSD(TF)カードにアクセスする

RX64MにはSDホストインタフェースが搭載されています。
以前は、ライセンスの関係で一般には使用出来なかった様ですが、最近FITモジュールが公開されていますので、さっそく使用してみたいと思います。

使用したバージョンは以下の通りで、それぞれのFITモジュールを設定していきます。
r_sdc_sdmem_rx 3.00
r_sdhi_rx 2.06
WP端子を使用しない場合はチェックを外します。
アクティブの変更は出来ないようなので、使用する場合は注意します。

r_tfat_driver_rx 1.08
r_tfat_rx 4.00
[設定項目なし]

ソフトウエアについては、システムタイマを使っているので、以下のファイルをインクルードします。

 

SDカード制御用のソースは、下記の様に作成しました。

初期化処理として、sd_card_init();を一度実行します。
その後はメインループにて、sd_card_task();を常時実行します。
カードの挿入を検出すると、SD_CARD_READY が1となり、アクセスが可能です。

ファイル操作自体は、ChaNさんのFatfsを使用しているので、そちらを参照します。
アプリケーションノートのサンプルをそのまま使用する場合は、こんな感じになります。

あとは、const uint8_t filebuffer[] = {・・・} に書き込むダミーデータを用意し、
エラー表示用のstatic void R_error (uint8_t err_code, FRESULT *rst){} 関数を用意します。

標準のファイルシステムがfatfsになったので、使いやすくなりました。

RX64MでUSBメモリにアクセスする

RX64MにはUSBホストコントローラが内蔵されていますので、USBメモリを使用することができます。
今回は、USBAを使用します。USBは、USB0とUSBAの2種類ありますが、使用方法は同じです。
リソースの設定で、USB0_HOSTかUSBA_HOSTのどちらを選ぶかが異なります。
使用するFITモジュールと設定は下記のとおりです。

r_usb_basic 1.30
r_usb_hmsc 1.30
[設定項目なし]
r_tfat_driver_rx 1.08
r_tfat_rx 4.00
[設定項目なし]

ソフトウエアについては、以下のファイルをインクルードします。

USB制御用コードは、下記の様に作成しました。

初期化処理として、usb_mem_init();を一度実行します。
その後はメインループにて、usb_mem_task();を常時実行します。
カードの挿入を検出すると、USB_MEM_READYが1となり、アクセスが可能です。

ファイル操作自体は、ChaNさんのFatfsを使用しているので、そちらを参照します。
SDカードのサンプルと同様です。

 

FATライブラリとT4ライブラリを同時に使用する

スマートコンフィグレータを使用すると、簡単にFITモジュールを組み込むことができます。
しかし、残念な事にライブラリ同士の相性も存在するらしく、組み合わせるとエラーが出ることがあります。

そこで、ソースファイルを編集して対応します。原因はUINTが複数のモジュールで競合しているため。
それぞれのヘッダファイルに、#ifdef XXXと、#endifを追加し、別のモジュールを読み込んでいたら、typedefしない様に修正。
(すでにtypedef済みかチェックできると、良いのだけれど…)

r_t4_itcpip.h
#ifndef FF_DEFINED
typedef UW UINT;
#endif

ff.h
#ifndef _R_T4_ITCPIP_H
typedef unsigned int UINT; /* int must be 16-bit or 32-bit */
#endif

 

SDカードとUSBメモリが同時に使用できない

SDカードとUSBメモリを同時に使用しようとした際に、エラーで使えなかったので、その対策をメモ。
原因は、fatfsの設定でUSBドライブが使用できない場合、ドライブ数の設定が1になっている。
ffconf.hを編集する
/*—————————————————————————/
/ Drive/Volume Configurations
/—————————————————————————*/

#define FF_VOLUMES 2
/* Number of volumes (logical drives) to be used. (1-10) */

FF_VOLUMES の値を1から2に変更するだけ。
Fatfsの設定については、スマートコンフィグレータに組み込むのは諦めたのかなぁ...