液晶表示で、少し手間取ったけど、ようやく本命のSDカードアクセス。
でも、これは、ChaN さんのソフトウェアーに、おんぶにだっこで、自分の実装する
部分は少ない上に、非常に良く出来たソフトウェアーなので、移植も楽だし、トラブ
ルも少ない。
FatFs 汎用FATファイルシステム モジュール
※今回は、「ff12a」を使った。
RL78/G13は、リソースもそこそこ沢山あるので、最小構成版を使う必要は無
い(pfatfs)ものの、RO領域が限られるので、UTF-8を使う事が出来ない。
この対応は、少し考えたい。
※外部 EEPROM などに、コードページの変換テーブルなどを置く事が考えられる。
※又は、通常のコード領域に配置して、32ビットポインターでアクセスするなど。
以前R8Cで実験した時は、基板にSDカードソケットを直付けしたのだけど、それ
だと、他に流用出来なくなるので、今回は、モジュールにしてみた。
ヒロセ製のSDソケットは、品質が高く(創りが良い)、これ以外は使いたくないく
らいの出来の良さ。
一応、全ての端子を出してある、又、埃等が入らないように、テープを張ってある。
電源オン、オフのP-ChanelFET、電源LEDなども含めておいた。
電源をオンにした時、かなり大きな電流が流れる、その時の急激な電圧降下を和らげる
目的でフェライトビーズ(470オーム、1000mA)を入れてある。
また、カードのチップセレクト端子や、データアウト端子は、電源OFF時に、「H」
にしていると、そこから、電流が内部に還流するので、電源OFF時は、「0」にする
必要がある。
ChaN さんのプロジェクトを自分のシステムに移植する方法は、簡単で、サンプルにある
「generic」サンプルの「sdmm.c」を参考にする事だと思う、このソースは、クロック信
号、シリアル/パラレル変換を全てソフトで行っているもので、わかり易く、必要最低限
のコードを追加すればよい。
また、全体の機能設定を「ffconf.h」で行ない、「ff.c」をプロジェクトに加える。
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 プロジェクト