超小型Z80マイコン(その8)メモリカードエラーの調査 [Z80]
20 ピンの USB 対応の PIC を使った 3 チップ構成の小型 Z80 基板を引き続き検討中です。前回の記事で書いた TF(SD) カードの読み書きでのエラーの原因について調査したのでメモを残しておきます。今まではロジアナで SPI 信号を確認していましたが、今回は信号の波形をオシロで確認してみました。
下図は初期化処理で最初に発行する CMD0 の波形例で、クロック周波数は 400KHz で 8GB の TF カードで試験しています。
各信号は、1(黄色):SDCS/、2(水色):SDCK、3(紫):SDO、4(緑):SDI です。
次に発行するコマンドの 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 程度でした。
ロジアナで確認したライト時とリード時の波形も貼っておきます。初期化後にクロックを 400KHz から 2MHz に変更しています。
下図はブロックライト後にブロックリードした際のロジアナ波形です。
下図はライト時のコマンド(CMD24)の最初の部分の拡大波形です。
下図はブロックライト時のデータ送信部分のロジアナ波形です。
CMD17 でブロックリード時のデータ受信部分の拡大波形が下図になります。
最後に上記の 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 カードでのロジアナ波形も貼っておきます。
★追記 2022/12/15
Hex ローダーで IPL をロードすることで CP/M の起動に成功しました。
使い回しのブレッドボードやジャンパーワイヤを使用していることもあり、配線に触ったりすると状態が変化してしまいます。
最近はプリント基板を安く作れるので、評価用のプリント基板を作るか悩み中です。
twitter に投稿した動画付きのコメントで CP/M 起動時の様子を動画で見れます。
[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]
下図は初期化処理で最初に発行する 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] [ 前へ ] 連載記事一覧 [ 次へ ]
コメント 0