FPGAでSDカードと通信してみる。(2)
前回SPIの回路が出来たので今回は初期化の動作をしてみる。
といってももうSPIの送受信が完成してしまっているので後は決められたコマンドをひたすら送っていくだけなので何も難しいことはなかった。(SPIの回路のバグになかなか気づけずそこに少し時間を取られた)
流れとしてはまずCSをHighにしてからクロックを74クロック以上入れる。
これはSPIのモジュールで0xFFを10回送信している。
次にCSをLowにしてCMD0(SPIモードに移行させるためのコマンド)を送信する。コマンドは6バイト(48bit)で転送される。
下位8bitはCRCチェックの値が入るがSPIモードでは必要ない。しかし、CMD0を送信するときだけはSPIモードではないのでCRCの値もちゃんと入れる必要がある。
CMD0のCRCは0x95なので0x400000000095を上位バイトから順に送る。
これで0x01が返信されれば移行準備が出来たので次にCMD1を送信して初期化を開始させる。ちなみにCMD1は0x4100000000FF。CMD1は0x00が返信されるまで繰り返す。
0x00が来たら初期化完了。
このへんの話はここのサイトを熟読したほうが良い。
FPGAで動作をさせたが7セグなどに返信された値を表示しても画像では伝わりにくいのでとりあえずロジアナで波形を観測してみた。
まずこれが80クロック入れている部分の信号
そしてこっちがCMD0を送信している部分。
ちゃんと0x400000000095を送った後に0x00が返信されているのが分かる。
シミュレーションを通しているので動くだろうというのは分かってはいたが実際に動くとなんか嬉しい。ダラダラと作業していたのもあるが初期化までの動作に2日かかってしまったので早くデータの読み出しをしてアウトプットするというところまで持っていきたい。
ちなみに開発ボードはDE0CVを使って開発している。
本当はSDコネクタの接続状態スイッチなどで初期化動作などをさせたいのだが回路図を見てもつながってそうなところがない。実はつながっているピンがあるなどの情報があれば欲しいところだ。
次はデータの読み出しや情報が読めたら記事にしておきたい。