SSブログ
English Version

超小型Z80マイコン(その8)メモリカードエラーの調査 [Z80]

 20 ピンの USB 対応の PIC を使った 3 チップ構成の小型 Z80 基板を引き続き検討中です。前回の記事で書いた TF(SD) カードの読み書きでのエラーの原因について調査したのでメモを残しておきます。今まではロジアナで SPI 信号を確認していましたが、今回は信号の波形をオシロで確認してみました。

 下図は初期化処理で最初に発行する CMD0 の波形例で、クロック周波数は 400KHz で 8GB の TF カードで試験しています。
 各信号は、1(黄色):SDCS/、2(水色):SDCK、3(紫):SDO、4(緑):SDI です。

CMD0 コマンドとその応答


 次に発行するコマンドの CMD8 も含めた波形が下図になります。

CMD0 と CMD8 コマンドの波形


 TF の出力である SDI(緑)のレベルが段々低くなっているので USB から給電されている 5V からレギュレータで作っている 3.3V 電源の電圧が低下するようです。

 今回は 20 ピンの PIC(PIC18F14K50)を使用し、I/O 数が少ないため I/O を兼用して制御していることもあり、TF エラーの原因を切り分けるために PIC と TF のみの構成で安定化電源からの 3.3V 給電で動く環境をブレッドボードで作成し確認して見ました。

 その結果、TF のリードもライトも問題無く実行できたので SPI 関連の設定等は問題無さそうです。
 SPI の信号自体は問題無いことが判ったので元々のブレッドボードの環境で USB からの 5V 給電はやめて、安定化電源から 5V を給電するようにしました。更に TF カードの電源直下に 10uF のセラコンを追加しました(これが結構効果があったようです)

 結果として TF カードの読み書きができるようになりました。
 CMD0 と CMD8 の波形が下図で TF カードの出力である SDI の信号の電圧低下も発生していません。CMD0 の先頭からレスポンス直前までの SDI のハイレベルが若干低くなっていますが、TF 側がレスポンス出力直前までは SDI が High 出力状態(この時点では SPI モードになっていない)でレスポンス出力時にオープンコレクタの状態になるのではないかと推測しています。SDI はプルアップが必須なので今回は 4.7K でプルアップしています。尚、安定化電源の出力電流は 119mA 程度でした。

安定化電源からの給電時の CMD0 と CMD8 コマンドの波形

CMD0 と CMD8 コマンドのロジアナ波形(サンプリング:32MHz)


 ロジアナで確認したライト時とリード時の波形も貼っておきます。初期化後にクロックを 400KHz から 2MHz に変更しています。

 下図はブロックライト後にブロックリードした際のロジアナ波形です。

ブロックライト&リード時のロジアナ波形例(サンプリング:32MHz)


 下図はライト時のコマンド(CMD24)の最初の部分の拡大波形です。

CMD24 の先頭部分のロジアナ波形例(サンプリング:32MHz)


 下図はブロックライト時のデータ送信部分のロジアナ波形です。

CMD24 でブロックライト時のデータ送信部分の拡大波形(サンプリング:32MHz)


 CMD17 でブロックリード時のデータ受信部分の拡大波形が下図になります。

CMD17 でブロックリード時のデータ受信部分の拡大波形(サンプリング:32MHz)


 最後に上記の PIC と TF カードだけの環境で 512MB と 128MB カードで実験を行った結果をメモしておきます。
 初期化処理に関しては意外なことに従来通りの CMD0、CMD8、CMD55、CMD41、CMD58 を使った初期化も通りました。
 試しに CMD0 と CMD1 での初期化もやってみましたがこれも通りました。CMD1 ではレスポンスが 0x00 になるまでリトライするようにしています。
 ソフト的には CMD8 で無応答の場合は CMD1 で初期化するように追加しておきました。

 CMD8 の応答は 128MB/256MB 共に 80 ff 80 00 で(8GB カードでは最初が 0xC0 )、ネット情報によれば、最初のデータの 0x40 のビットは SDHC の時に立つ bit です。

 ブロックリード/ライトに関して、128MB のカードではレスポンスが 0x20 (アドレスエラー)になり、CMD16 でブロックサイズを 512 に指定しても変化はありませんでした。

 256MB のカードに関しては ブロックライトは OK でしたが ブロックリードは最初のみ OK で、ライト後のリードやリード後のリードではトークン応答が無い現象が発生し、今回は原因究明までは行っていません。

 512MB カードでのロジアナ波形も貼っておきます。

512MB カードでの CMD1 波形(サンプリング:32MHz)


512MB カードでの CMD24(ライト)波形(サンプリング:32MHz)


512MB カードでの CMD17(リード)の OK 時の波形(サンプリング:32MHz)


512MB カードでの CMD17(リード)の 無トークン時の波形(サンプリング:32MHz)



★追記 2022/12/15
 Hex ローダーで IPL をロードすることで CP/M の起動に成功しました。
 使い回しのブレッドボードやジャンパーワイヤを使用していることもあり、配線に触ったりすると状態が変化してしまいます。
 最近はプリント基板を安く作れるので、評価用のプリント基板を作るか悩み中です。
 twitter に投稿した動画付きのコメントで CP/M 起動時の様子を動画で見れます。

CP/M 起動画面





[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。