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の設定については、スマートコンフィグレータに組み込むのは諦めたのかなぁ...

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

 

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カードのサンプルと同様です。

 

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になったので、使いやすくなりました。