PageSDカード制御についてこんにちは、NAKAといいます。SDカードの制御にお詳しい方、アドバイスねがえませんでしょうか?RL78/I1EのCSIをSDカードコネクタに接続してデータのログを行っています2GBの昔のMicroSDカードの扱いは何とかなりました。⇒思ったようになりました。初期化はうまくいきました。~512byte※DATA_1⇒DATA_2⇒DATA_3が2ブロックづつ書かれるとなります。【質問】ブロックもセクタも同じ512Byteの理解ですが、間違っていますでしょうか?書込みを2セクタ送り、読込みを1セクタ毎に余分に空読込み(【2】の246を無視)することで、それらしく動きますがスッキリしません。表現して良いのかわからず、非常にわかりにくい表現になっていますが、よろしくお願いします。17:07SDには全然詳しくないですが、ArduinoのSDライブラリはSDHCまで対応してまして、KURUMI(RL78G13)用にポーティングしたソースはこちらにあります。GPL3ですのでそのままの転用は考慮が必要ですが、一応ご参考として紹介いたします。Yuukiさま、ありがとうございます。ソースほとんど理解出来てませんが、ちょちょっと拝見いたしました。NAKA:おはようございます。昨日、web上の情報を探していたら、ある人のブログに『SDカードのブロックサイズは512Bが標準だとインターネット上の情報から得ていました。HDDとセクタサイズを合わせておけばコマンド変換のみで行けるだろうとたかをくくっていました。メーカのSD/MMCカードのデータシート等を見ると、読み書きのブロックサイズをCMD16で変更できるものと、出来ないものが有るようです。書き込みブロックサイズは固定な物も多いようです。WRITE_BLK_PARTIALが'0'であり、書き込みブロックサイズは変更が出来ないようです。bit79のREAD_BLK_PARTIALは'1'でしたので読み出しブロックサイズは自由に変えられるようです。同時に、bit80-83のREAD_BLK_LENとbit22-25のWRITE_BLK_LENが10(x"a")になっていることも確認しました。ブロックサイズは512Bではなく1024Bということです。』って内容がありました。ブロックサイズがデフォルトで1024BでCMD16でブロックサイズ変更禁止のSDカードもあるの????RL78/I1EのRAMは3Kしかないので、そんなにバッファ持てないよぉ~~~!SDカードメーカによって様々な仕様があるような気もします。本当かどうかもよくわかりませんが。初期設定でしっかりCSDレジスタを確認して、それに合わせた制御をしないといけないのかな?1000円くらいのお安いカードリーダでもそんな複雑に制御してるのかな?そこらへんの作り込みが甘い機器でごくまれに読めないカードがあったりするのかな?もっと勉強が必要かもしれません。NAKA:今晩はNAKAです。疑問解消しました!!2ブロック分書かれてしまうと思い込んでいたのは、書込み側でなく、読込みに問題がありました。読み込ブロックアドレスを進め、ブロック読込みコマンド(CMD17)を発行し、SDカードはまだ読込めない状態のレスポンスコードを返していたのに、レスポンスコードを1bit勘違いしていたため、ブロック読込み関数の中で受信バッファにデータを書き込まずに関数を抜けていたのが原因でした。新しいデータが入ったと思い込んだデータは実は前のデータだったため、もう一度同じデータを読み出したことになり、2ブロック同じデータを書かれていると思い込んでました。読み込ブロックアドレスを進め今度は読み込める状態になっているため、一つ飛ばした次のブロックのデータが読み込まれ、一つ前のブロックデータは消失してしまうという動作になっていました。読込めたことをレスポンスで確認して、読み込めてない場合は再度ブロック読込みコマンド(CMD17)を発行するように変更して、思い通りの動作となりました。デフォルトの書き込みブロックが1024Bでブロック長が変更できないSDカードが実在するというweb情報を鵜呑みにしてしまったのが今回の反省です。