レトロマイコンZ80ボードの構想(その6)SDカード [Z80]
前回の記事「レトロマイコンZ80ボードの構想(その5)ピンアサイン」に追記したようにSDカードとのSPI通信の実験をしています。
picleコンパイラを使ってSDHCタイプのカードの初期化シーケンスが通るようになりました。
SPIはパラ-シリ変換のICが対向して接続されているような単純なインターフェースでマスター側からクロック提供した場合はデータ有無にかかわらずシフトされるので受信データが発生します(データがない場合は0xff)。
データ送信の都度、受信データを読みながらやり取りすれば処理的には簡単なのですが、送信バイト間にクロックが停止する隙間ができるのが嫌なので今回は送信データは連続して送信し、受信データは0xff送信(SDカードが送信できるようにクロックを提供)に対応した受信データを確認する(送信バッファにデータを貯めない)方法で処理しました。
このためには送信データに対する受信データの数(=送信バイト数ー受信バイト数)を管理しておく必要があり、末尾のソース内では SpiCnt でカウントしています。
また、トランザクション終了後にCSをdisable(high)にしてから1バイトのダミー送信する必要があり、そうしないとSDカード側の送信データのLSBがlowの場合、SPIのデータ線をLowに引っ張り続ける(下図のACMD41のように)ことがあるので、SDカード側のパラ-シリ変換にごみを残さないという意味があるものと思います。
SDカードとの実際の通信波形はweb上では見当たらなかったので誰かの参考になればと思いロジアナの波形を載せておきます。小さいですがクリックすると拡大表示されます(モバイル環境ではJavaScriptが動かないので大きくなりません^^;)
使用したSDカードは16MBのものです。
クロック周波数は333KHzです。(初期化部分は100kHz~400kHzの範囲内であることが必要なようです)
★2018/02/04 23:20 追記 ACMD41波形を追加しました。
★2018/02/10 追記
改良版の波形を「レトロマイコンZ80ボードの構想(その7)SDカード2に掲載しました。
実験に使用したpicleソース
[TOP] [ 前へ ] 連載記事 [ 次へ ]
picleコンパイラを使ってSDHCタイプのカードの初期化シーケンスが通るようになりました。
SPIはパラ-シリ変換のICが対向して接続されているような単純なインターフェースでマスター側からクロック提供した場合はデータ有無にかかわらずシフトされるので受信データが発生します(データがない場合は0xff)。
データ送信の都度、受信データを読みながらやり取りすれば処理的には簡単なのですが、送信バイト間にクロックが停止する隙間ができるのが嫌なので今回は送信データは連続して送信し、受信データは0xff送信(SDカードが送信できるようにクロックを提供)に対応した受信データを確認する(送信バッファにデータを貯めない)方法で処理しました。
このためには送信データに対する受信データの数(=送信バイト数ー受信バイト数)を管理しておく必要があり、末尾のソース内では SpiCnt でカウントしています。
また、トランザクション終了後にCSをdisable(high)にしてから1バイトのダミー送信する必要があり、そうしないとSDカード側の送信データのLSBがlowの場合、SPIのデータ線をLowに引っ張り続ける(下図のACMD41のように)ことがあるので、SDカード側のパラ-シリ変換にごみを残さないという意味があるものと思います。
SDカードとの実際の通信波形はweb上では見当たらなかったので誰かの参考になればと思いロジアナの波形を載せておきます。小さいですがクリックすると拡大表示されます(モバイル環境ではJavaScriptが動かないので大きくなりません^^;)
使用したSDカードは16MBのものです。
クロック周波数は333KHzです。(初期化部分は100kHz~400kHzの範囲内であることが必要なようです)
★2018/02/04 23:20 追記 ACMD41波形を追加しました。
★2018/02/10 追記
改良版の波形を「レトロマイコンZ80ボードの構想(その7)SDカード2に掲載しました。
CMD0波形 |
|
CMD8波形 |
|
ACMD41波形 |
|
CMD58波形 |
|
|
[TOP] [ 前へ ] 連載記事 [ 次へ ]
コメント 0