2018年05月03日 SDカードのライトプロテクト解析
FPGAと自作SDIF回路とロジアナを使ってちょっと解析してみました。
結論としては、CSDレジスタのPERM_WRITE_PROTECTが1になっているのが原因のようです。
ロジアナの結果はこんな感じ。
結論としては、CSDレジスタのPERM_WRITE_PROTECTが1になっているのが原因のようです。
ロジアナの結果はこんな感じ。
わかりにくいですが、CMD9(SEND_CSD)のレスポンスbit13で
"PERM_WRITE_PROTECT[13]=1"になっているところです。
ちなみに正常なカードの場合はこんな感じ。
メーカも容量も違うのでいろいろ差分はありますが、
とりあえず"PERM_WRITE_PROTECT[13]=0"なので正常です。
以下、参考情報。
・CSDレジスタは、「Card-Specific Data register」のことらしいです。
"PERM_WRITE_PROTECT[13]=1"になっているところです。
ちなみに正常なカードの場合はこんな感じ。
メーカも容量も違うのでいろいろ差分はありますが、
とりあえず"PERM_WRITE_PROTECT[13]=0"なので正常です。
以下、参考情報。
・CSDレジスタは、「Card-Specific Data register」のことらしいです。
・PERM_WRITE_PROTECTは、「Permanently Write Protect」のことらしく、
一度"1"になったら戻す術はないようです。
一度"1"になったら戻す術はないようです。
・もうひとつ"TEMP_WEITE_PROTECT(Temporarily Write Protect)"もあって、
名前のとおりこちらは一時的なプロテクトのようです。
名前のとおりこちらは一時的なプロテクトのようです。
・WRITE_PROTECT=1の時はWrite/Eraseコマンドが全部無視されるようです。
正規ではない自作コントローラを使って、空気を読まずにCMD24(WITE_BLOCK)とかしてもダメみたいです(笑)
・CSDレジスタのほかにも、OCR(ACMD41で取得)やら、CID(CMD2で取得)やら、RCA(CMD3で取得)やらあって、
家の転がっているメーカも容量もバラバラなカードで比べてみるとちょっと楽しいかも(笑)
PR