2022年6月12日日曜日

SDカードを6809のアセンブラで読み書きしてみる

SDカードを6809のアセンブラを用いてSPIモードで読み書きしてみました


 以前からSDカードに興味がありましたが、難しそうで手を出せずにいました。昨年ですがSPIモードでセンサを読み書きしてみたところ、I2Cよりもかなり簡単だという印象を持ちました。

「6821PIAからアセンブラによるSPI通信でセンサーを制御する(2021年11月3日)」

その経験からSPIモードでのSDカードの読み書きなら割と簡単にできるのではないかと試してみることにしました。

参考にしたのは、いつもお世話になっている中日電工の菱田さんのブログの「[新連載]マイコン独立大作戦「SDカードインターフェースの製作」第1回~第32回」です。いつも貴重な情報をありがとうございます。

ということで、回路はブログ第8回の5V-3.3V変換部をそのまま使わせてもらい、元記事は82C55でコントロールしているのですが、私は6809/6802Dualマイコンに搭載している68B21を使用しました。


実験回路の画像と接続図を示します

画像左に立ててあるのが6809/6802Dualボードで68B21からフラットケーブルで実験回路に接続しています。


実験回路


ブロック図


68B21のポートAは出力モードのままで入力もできる便利な機能を持っているので、ポートAのみで入出力を行なっています。クロックSCKは1ビット出力のCA2を利用しています。このCA2によるクロックの周波数は私のプログラムではおよそ30.7KHzでした。

5V-3.3Vインターフェースはインバータひとつで構成しているために信号が反転してしまいますのでプログラムの方で考慮します。

秋月電子のSDカードモジュールは5V電源から3.3Vを生成するようになっていますので、インターフェース回路にその3.3Vも供給しています。


プログラム作成

プログラム作成ですが、Windows上で行いました。

Windows上のエディタ(私はEmEditorを使っています)でソースを作成し、それをWindows上で動作する自作の6809クロスアセンブラでアセンブルして、できたmotファイルを6809/6802DualボードのモニタのLコマンドで読み込んで実行します。

その手順を画像で紹介します。

エディタでプログラムリストを作成します。


エディタで作成中

できたプログラムをアセンブラに放り込んでアセンブルします。


アセンブル中

実行画面でLコマンドを用いてロードします。通常、このロードプログラムの画面は最初に起動するだけで操作する必要はありませんので閉じておきます。

ロードプログラム動作中

実行画面です。Lコマンドで読み込み、Gコマンドで実行します。

ロードして実行中

プログラムに修正の必要があれば、上記の手順を繰り返します。

実際にSDカードを読み書きできるようになるまでには結構はまってしまう個所もあり、中日電工さんのブログの他に、「えるむ by ChaN」さん、「SDカード」さんや「SDカードの操作」さんのブログなども参考にさせていただきました。ありがとうございます。

とりあえず完成したプログラムですが、SDカードとSDHCカードの両方が読み書きできるものとSDカードのみを読み書きするものの2本立てとしました。

目的としている6809/6802DualボードのFlex9に組み込むためには少しでも短いほうが良いので、SD専用とする予定ですが、折角ですのでSDHCカードも読み書きできることを確かめたという事です。

ここではSD、SDHCカード両用のプログラムのリストを紹介します。SDカード専用版との違いは初期化ルーチンとRead/Writeルーチンのセクタ番号の指定方法の違いのみで、特に初期化ルーチンはSD専用版に比べてかなり複雑です。


 


プログラムのメニュー部です。

1:Read Sct, 2:Write Sct, 3:Get SD data, 4:SD Init, 9:End:
メニューの1や2を選択するとセクタ番号を聞いてくるので、入力するとそのセクタの内容が読み込まれたり、そのセクタにバッファの内容が書き込まれます。
3でSDの情報を表示したりすることもできます。

モニタ中のサブルーチンとして INCHA, OUTCHA, PSTRNG を使用していますが、それ以外は特別なものはないので、6809機で6821さえあればSDカードが読み書きできることになります。

0 件のコメント:

コメントを投稿