RL78/G13にSDカードを繋いでみる

液晶表示で、少し手間取ったけど、ようやく本命のSDカードアクセス。
でも、これは、ChaN さんのソフトウェアーに、おんぶにだっこで、自分の実装する
部分は少ない上に、非常に良く出来たソフトウェアーなので、移植も楽だし、トラブ
ルも少ない。
FatFs 汎用FATファイルシステム モジュール
※今回は、「ff12a」を使った。
RL78/G13は、リソースもそこそこ沢山あるので、最小構成版を使う必要は無
い(pfatfs)ものの、RO領域が限られるので、UTF-8を使う事が出来ない。
この対応は、少し考えたい。
※外部 EEPROM などに、コードページの変換テーブルなどを置く事が考えられる。
※又は、通常のコード領域に配置して、32ビットポインターでアクセスするなど。

以前R8Cで実験した時は、基板にSDカードソケットを直付けしたのだけど、それ
だと、他に流用出来なくなるので、今回は、モジュールにしてみた。
IMG_0809s
IMG_0810s
ヒロセ製のSDソケットは、品質が高く(創りが良い)、これ以外は使いたくないく
らいの出来の良さ。
一応、全ての端子を出してある、又、埃等が入らないように、テープを張ってある。
電源オン、オフのP-ChanelFET、電源LEDなども含めておいた。
電源をオンにした時、かなり大きな電流が流れる、その時の急激な電圧降下を和らげる
目的でフェライトビーズ(470オーム、1000mA)を入れてある。

また、カードのチップセレクト端子や、データアウト端子は、電源OFF時に、「H」
にしていると、そこから、電流が内部に還流するので、電源OFF時は、「0」にする
必要がある。

ChaN さんのプロジェクトを自分のシステムに移植する方法は、簡単で、サンプルにある
「generic」サンプルの「sdmm.c」を参考にする事だと思う、このソースは、クロック信
号、シリアル/パラレル変換を全てソフトで行っているもので、わかり易く、必要最低限
のコードを追加すればよい。
また、全体の機能設定を「ffconf.h」で行ない、「ff.c」をプロジェクトに加える。

IMG_0811s

SDカード・サンプル
このサンプルでは、起動すると、SDカードのルートディレクトリーをリストする。
このサンプルでは、カードをソケットに入れると、マウントを行い、抜くとアンマウント
を行なう。
又、コンソールから、「dir」コマンドを入力する事で、ディレクトリーのリストが行える。

シリアル通信では、SAU0(SO00、SI00、SCK00)を使っている。
それ以外の制御と、カード検出などは以下のポートを利用している。

    typedef device::PORT<device::port_no::P0,  device::bitpos::B0> card_select;	///< カード選択信号
    typedef device::PORT<device::port_no::P0,  device::bitpos::B1> card_power;	///< カード電源制御
    typedef device::PORT<device::port_no::P14, device::bitpos::B6> card_detect;	///< カード検出

※「main.cpp」参照

参考回路と KiCAD のプロジェクトなど:
KiCAD プロジェクト

SDC_sample