秋月電子 SH7125F でSDカードにアクセス


はじめに

実用的な電子機器を作る時、ネックになるのがストレージデバイスです。しかし、最近はSDカードが非常に入手しやすく、また、IOポート4本で制御可能であることから、秋月電子SH7125FマイコンボードにSDカードインターフェースを接続し、FATファイルシステム経由でアクセスしてみることにしました。
FAT互換ファイルシステムはいろいろなところでフリーのソースが公開されていますが、その中でも極小メモリで動作可能な、ChaNさんのFATファイルシステムを移植してみました。移植とは言っても、極めて素性の良いソースであることと、各CPUのサンプルプロジェクトが豊富に用意されているので、SDカードアクセスの2つの関数を書き換えるだけで動作させることが出来ました。


ハードウェア

回路図です。下図で新規に作るのは青い点線で囲まれた部分のみです。ロジックICの7414は、実際には東芝TC74LCX14Fを使っています。これはレベル変換の為に挿入しています。SH7125Fは5V動作ですが、SDカードは3.3V動作ですので直結できません。3.3V動作で入力耐圧が5Vあればどんなロジックでも良いのですが、ある程度のスピードを確保するには、トランジスタなどで受けるよりはロジックICを使った方が良いでしょう。
あと、3端子レギュレータのFAN1117は2.5V出力ですが、GNDにSiダイオードをかませて0.6Vほど下駄を履かせています。これは単に手持ちの部品に3.3Vのレギュレータが無かっただけです。新規に作るなら、3.3Vのレギュレータなら何でも良いでしょう。秋月電子であれば、TA48M033Fなどが適当です。出力のコイルも手持ちの部品を入れただけで、必ず入れなければならないようなものではありません。

工作

秋月SH7125Fベースボードのリセットスイッチにあわせてユニバーサル基板をカットします。こんな形状。
ヒロセのSDカードコネクタと、TC74LCX14Fを配置します。ロジックICは1.27mmピッチなので、ユニバーサル基板のランドをカッターで半分に切っておきます。見にくいですが、右上のランドが縦に切ってあります。
かなり基板が小さいので、配線には0.3mmのポリウレタン線を使います。ポリウレタン配線材ははんだで10秒程度暖めると被覆がきれいにはがれるので、高密度実装には最適です。
基板の裏側には28ピンのコネクタが付いていて、ベースボードのCN2Aにダイレクトに差し込めます。ただ、CN2Aには電源が配線されていないので、電源だけはCN1Aから引っ張ってこなくてはなりません。ちょっとみっともない。
SDカードコネクタのすぐ横にあるスイッチは、NMIを入れるためのスイッチです。

ソフトウェア

ChaNさんが公開している、FATファイルシステムを使わせてもらいます。今回使うのはFAT32対応のFF.Cです。使用するファイルは、
FF.C ... FATファイルシステム本体
FF.H ... FATファイルシステムを使う時にインクルードするヘッダファイル
INTEGER.H ... ターゲットの8/16/32ビットCPUにあわせて設定する型など
DISKIO.H ... ターゲットシステム固有の1セクタリードライト関数で使用する定義など
MMC.C ... ターゲットシステム固有の1セクタリードライト関数の実体
の5本です。ファイルシステムをダウンロードすると詳細なドキュメントが添付されていますので、そちらを参照すると良いでしょう。

今回はSDカードのアクセステストということで、高速化対応などはせず、すべてソフト制御で処理しています。カードの挿入検出スイッチやライトプロテクトなどは装備していないので、電源ONですぐにSDカードにアクセスします。

ファイルの書き込みやディレクトリ作成などをすると、タイムスタンプを書き込む必要があるのですが、SH7125は時計モードのクロックを持っていないので、ソフトで暫定版タイマーを作っています。初期値を与える必要があることから、起動直後に日付を入力するようになっています。タイマー割り込みも正確に1秒を計測できないような設定なので、あくまで暫定版です。本格的に使用する場合は、リアルタイムクロックを装備すべきですね。

アーカイブファイルを解凍すると、こんなファイルが出てきます。但し、ライブラリ『all.lib』は別途HEWで作る必要があります。
この状態でmake をたたくと、こんな感じでビルドが進みます。(make は、Borland C++に付属のものを使っていますが、どれでも同じです。)

TEST.MOTが出来上がったら、ダウンロード&実行です。SH7125用デバッガ・ADEBUGSH.EXEを起動してダウンロードします。ユーザープログラムは0x2000から開始するように設定されています。




Gコマンドで実行すると、起動メッセージのあと、カレンダタイマの初期設定をするために、年月日、時分の入力を促されます。それぞれ数字を入力していくと、初期化を行い、日時を表示してコマンド入力待ちになります。
このテストプログラムでは、

dir [path]
dump [path]
copy [source] [destination]
fat
type [path]
del [path]

でいろいろなファイル操作が出来ます。動作は・・・コマンド名の通りです。まだあまりテストしていません。下の例はディレクトリリストを取ったものです。


次の例は、ファイルのコピーと削除の例です。
なんとなく動いてるっぽい。


ダウンロード

今回作成したテストプログラムを公開します。一応、お約束の免責事項です。このソフトウェアは無保証です。このソフトウェアを利用したことによって生じたいかなる損害に対しても、私は責任を負いません。各自の責任において自由にご利用ください。
MOTファイル、ソースファイル

top