Wakeup時のバグが直ったので、続いてSDカードの再初期化問題を追いかけてしばらくはまっていました。電源投入時はちゃんと初期化できるのですが、リセットをかけると失敗。再度リセットすると初期化成功します。成功と失敗をまるでトグルしているかのように繰り返します。
動作を追いかけてみると、CMD0でカードをリセット後CMD8で動作電圧を読み出すところまではちゃんと動いています。ところが、その後のACMD41がBUSYのままになってしまっていました。SDの資料を読んでみると、CMD8を入れずにACMD41を投入するとHCのカードはBUSYを返すことになっています。しかしながらちゃんとCMD8は投げており、その応答もちゃんと返ってきているのです。カードを替えてみても症状は変わらずです。
ACMD41でBUSYのままの時には、CMD8を入れ直してからACMD41を再試行してみてもやはりダメでした。CMD8の投入前にやっているのは、SDカードへの電源の入れ直しとCMD0の送信だけです。SDカードのVDD供給には、LPC2387のMCIのMCIPWR端子を使って電源制御を行っています。MCIPWRにFETのスイッチをつなげて、SDカードのVDDをオン/オフします。そこでSDカードのVDDを確認してみたところ、MCIのレジスタ操作によりMCIPWRをオフにしても、VDDの電圧が1.3V程度残っていることが判明。ちゃんとオフできていなかったようです。回路を確認してみると、FETのドレイン側にGNDに引っ張る抵抗を入れ忘れていたことが判明。回路図描いた段階から入れ忘れていたようです。パスコンだけは入っていたので、中途半端な電圧になってしまい、その影響でSDカードの状態がちゃんとリセットできていなかったと思われます。
抵抗を追加して、ようやくと問題解決しました。
動作を追いかけてみると、CMD0でカードをリセット後CMD8で動作電圧を読み出すところまではちゃんと動いています。ところが、その後のACMD41がBUSYのままになってしまっていました。SDの資料を読んでみると、CMD8を入れずにACMD41を投入するとHCのカードはBUSYを返すことになっています。しかしながらちゃんとCMD8は投げており、その応答もちゃんと返ってきているのです。カードを替えてみても症状は変わらずです。
ACMD41でBUSYのままの時には、CMD8を入れ直してからACMD41を再試行してみてもやはりダメでした。CMD8の投入前にやっているのは、SDカードへの電源の入れ直しとCMD0の送信だけです。SDカードのVDD供給には、LPC2387のMCIのMCIPWR端子を使って電源制御を行っています。MCIPWRにFETのスイッチをつなげて、SDカードのVDDをオン/オフします。そこでSDカードのVDDを確認してみたところ、MCIのレジスタ操作によりMCIPWRをオフにしても、VDDの電圧が1.3V程度残っていることが判明。ちゃんとオフできていなかったようです。回路を確認してみると、FETのドレイン側にGNDに引っ張る抵抗を入れ忘れていたことが判明。回路図描いた段階から入れ忘れていたようです。パスコンだけは入っていたので、中途半端な電圧になってしまい、その影響でSDカードの状態がちゃんとリセットできていなかったと思われます。
抵抗を追加して、ようやくと問題解決しました。