超小型Z80マイコン(その7)メモリカードエラーとBASICの移植 [Z80]
20 ピンの PIC を使った 3 チップ構成の小型 Z80 基板を引き続き検討中です。前回の記事では制御信号を兼用したことに起因する問題と解決方法について書きましたが今回は TF(SD) カードの接続状況等について書いてみたいと思います。
状況としては初期化コマンドは通ったもののブロックの読込みと書込みのコマンドに対してエラーが返ってくる状況です^^;
ロジアナ波形も含めて自分へのメモ書きの意味も込めて書き留めておきます。
初期化コマンドに関しては下図(CMD0)のように TF カード側から想定した応答が返ってきています。
下図は応答部分を拡大したものです。初期化コマンド送出時のクロックは Timer2で作成していて 400kHz にしています。
下図はブロックリードコマンド(CMD17)を送信している波形例ですが、何故か 0x20( address error )が返ってきます。続けて送出しているコマンドはブロックライト(CMD24)ですがこれに対しても同様に 0x20 の応答が返ってきます。アクセス対象のブロックアドレスは下図のように 0x00000004 ですのでエラーになるような値ではないはずです。次のコマンドの送出中に 0x00 の応答が返ってくるのも気になりますね。
下図は応答部分を拡大したものです。初期化コマンド発行後はクロックを 1MHz(動作確認のために低めに設定)に切替えてコマンドを送信しています。
PIC18F14K50 の SPI 送信は PIC24 と違いダブルバッファではないので先頭の bit の前に少し隙間が空いてしまいますが、先頭の部分のクロック幅が設定したクロック値より短くなることがあり、気になります。NG 応答の原因はタイミングなのか信号レベルなのか・・・
現状でもプログラムのロード&実行は可能なので Twitter で見かけた Aki.h さんのミニアセンブラに関するコメントで書かれていた Github で公開されている Grant’s BASIC を移植してみました。
アセンブラに M80 を使用したところ "LD HL,65529/10" の部分で HL に 0000H がロードされてしまい(符号付演算されゼロになった模様)少し嵌りましたが、それ以外の問題は無くすんなり動きました。
今回は USB 機能内蔵の 20 ピン PIC(PIC18F14K50)を使っているので PIC に直に USB ケーブルを接続でき、TeraTerm 側の通信速度設定に関係なく爆速で通信できるので BASIC の Hex ファイルも瞬時にダウンロードできて頗る快適です。
asciiart.bas を実行したところ、実行時間は丁度 100 秒でした。Z80 のクロックは PIC から供給されている 12MHz(USB用のクロック)です。以前開発した Z80Gal の記事「Z80GALの構想(その8)Blocking/Deblockingの実装」で書いた 16MHz 動作の Pic24CPM が 75 秒なのでクロック周波数と反比例した計算値( 100s = 75s x 16 / 14)と合致していますね。
[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]
状況としては初期化コマンドは通ったもののブロックの読込みと書込みのコマンドに対してエラーが返ってくる状況です^^;
ロジアナ波形も含めて自分へのメモ書きの意味も込めて書き留めておきます。
初期化コマンドに関しては下図(CMD0)のように TF カード側から想定した応答が返ってきています。
CMD0 コマンドとその応答(サンプリング:32MHz) |
|
下図は応答部分を拡大したものです。初期化コマンド送出時のクロックは Timer2で作成していて 400kHz にしています。
CMD0 コマンドに対する応答部分の拡大(サンプリング:32MHz) |
|
下図はブロックリードコマンド(CMD17)を送信している波形例ですが、何故か 0x20( address error )が返ってきます。続けて送出しているコマンドはブロックライト(CMD24)ですがこれに対しても同様に 0x20 の応答が返ってきます。アクセス対象のブロックアドレスは下図のように 0x00000004 ですのでエラーになるような値ではないはずです。次のコマンドの送出中に 0x00 の応答が返ってくるのも気になりますね。
CMD17 コマンドとその応答(サンプリング:32MHz) |
|
下図は応答部分を拡大したものです。初期化コマンド発行後はクロックを 1MHz(動作確認のために低めに設定)に切替えてコマンドを送信しています。
PIC18F14K50 の SPI 送信は PIC24 と違いダブルバッファではないので先頭の bit の前に少し隙間が空いてしまいますが、先頭の部分のクロック幅が設定したクロック値より短くなることがあり、気になります。NG 応答の原因はタイミングなのか信号レベルなのか・・・
CMD17 コマンドの応答部分の拡大(サンプリング:32MHz) |
|
現状でもプログラムのロード&実行は可能なので Twitter で見かけた Aki.h さんのミニアセンブラに関するコメントで書かれていた Github で公開されている Grant’s BASIC を移植してみました。
アセンブラに M80 を使用したところ "LD HL,65529/10" の部分で HL に 0000H がロードされてしまい(符号付演算されゼロになった模様)少し嵌りましたが、それ以外の問題は無くすんなり動きました。
今回は USB 機能内蔵の 20 ピン PIC(PIC18F14K50)を使っているので PIC に直に USB ケーブルを接続でき、TeraTerm 側の通信速度設定に関係なく爆速で通信できるので BASIC の Hex ファイルも瞬時にダウンロードできて頗る快適です。
asciiart.bas を実行したところ、実行時間は丁度 100 秒でした。Z80 のクロックは PIC から供給されている 12MHz(USB用のクロック)です。以前開発した Z80Gal の記事「Z80GALの構想(その8)Blocking/Deblockingの実装」で書いた 16MHz 動作の Pic24CPM が 75 秒なのでクロック周波数と反比例した計算値( 100s = 75s x 16 / 14)と合致していますね。
ASCIIART.BAS 実行結果 |
|
[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]
コメント 0