ひき続き、USB Mass Storageをやっています。Read Capacity, Mode Sense(6), Read(10), Request Sense, Test Unit ReadyとSCSIコマンドを追加実装してやることで、めでたくWindows XPがMBR, FATそしてルートディレクトリを読みにくるようになりました。
XP上の
確認のために、Let's NoteにSDカードを挿してみると、やはり使用領域サイズが間違っています。ディスクの容量は一致していますから、Read Format CapacitiesやRead Capacityコマンドは正しく機能していると判断していいでしょう。使用領域サイズが正しくないということはFATが正しく読みこめていないということでしょうね、きっと。ディレクトリは一応読めているからこそ、ディスク内容アイコンも表示されているハズなのですが。。
READ(10)コマンドの処理自体は、SDカードから読みだしたブロックデータをUSBのBULKエンドポイントを使って送信しているだけで比較的簡単な処理です。そうすると、SDのデータがちゃんと読めていないのか、それともUSBにちゃんと送信できていないのかのどちらか(あるいは両方?)ということになりそうです。
XP上の
マイコンピュータからもディスクを見ることができます。ディスクを開けば、ファイルのアイコンも表示できます。ところが、プロパティの表示がおかしい。こんなにディスク使っていないはず。
確認のために、Let's NoteにSDカードを挿してみると、やはり使用領域サイズが間違っています。ディスクの容量は一致していますから、Read Format CapacitiesやRead Capacityコマンドは正しく機能していると判断していいでしょう。使用領域サイズが正しくないということはFATが正しく読みこめていないということでしょうね、きっと。ディレクトリは一応読めているからこそ、ディスク内容アイコンも表示されているハズなのですが。。
READ(10)コマンドの処理自体は、SDカードから読みだしたブロックデータをUSBのBULKエンドポイントを使って送信しているだけで比較的簡単な処理です。そうすると、SDのデータがちゃんと読めていないのか、それともUSBにちゃんと送信できていないのかのどちらか(あるいは両方?)ということになりそうです。
>確認のために、Let's NoteにSDカードを挿してみると、やはり使用領域サイズが間違っています。
Let's NoteはSDカードを直に挿せるカードリーダを内蔵している、ということですね。では、SD カード上のFATフォーマット自体に問題があるんじゃないでしょうか。一度そのSDカードをPCからフォーマットしてみては。
通常、MSCが例の6つSCSIコマンドをサポートしていればPCからフォーマットできますが、MBRとかboot sectorがread-onlyになっていると、フォーマットは失敗します。
Tsuneo
しかし、カードの問題では無いようです。USBカードリーダを使っても、ちゃんと正しい容量を表示できますので。
ああ、やっと理解しました。字面だけを追って、「Let's Noteでも使用領域サイズが間違って表示される」と誤解していました。ちゃんと画面キャプチャを見れば、一目瞭然だったのに。すいません。
MBRのパーティションテーブルは、どうですか?
Tsuneo
MBRやFATがちゃんと読めているかどうかは、週末に調べるつもりでいます。MBRの最後に 0x55, 0xAAが入っているのは確認しているので、FATが正しく読めていない(あるいは送れていない)と考えています。
Disk Investigator
http://www.theabsolute.net/sware/dskinv.html
このユーティリティは、
- Disk information が一覧で表示される
- View メニューからFAT、Root directoryなどにすぐにとべる
など、なかなかMSCのデバッグに都合の良い作りとなっています。
ただセクターダンプをファイルにセーブするのは、ちょっと面倒で、
View cluster ボタン > Add this cluster ボタン > Save to disk
開発中のボードと市販のカードリーダでセクターダンプに差があるか、比較してみてください。WinMergeや、DOS窓で FC あるいは COMP でファイルの比較ができます。
MBR はDisk Investigatorでは読めないので、Windows付属のdskprobe.exeなどを使います。
Disk Probeの使い方
http://itaya.corso-b.net/TIPS/DiskProbe/index.html
Tsuneo