SDカードのアクセスができるようになったので、USBでR/Wを作ることにします。
RX62NでUSBのデバドラ作ってました。USBはポピュラーだけど、初めてだとなかなか難しい。。
USBのデバイス側(ファンクション、ターゲット)で、ようやくPCで認識され始めました。
まだ、MassStorageClassのコマンドが飛び始めたところ。
サポートが必要なSCSIコマンドは、、
- Inquiry
- Request Sense
- Test Unit Ready
- Read(10)
- Read Capacity
- Write(10)
あとは、この6つのSCSIコマンドを、SDコマンドに変換してやればいいかな。
もし非対応のSCSIコマンドがとんできたら、そのコマンドのCSWでbCSWStatus=0x01(command failed)を返し、
直後のRequest SenseでILLEGAL_REQUEST(0x05) - ASC_INVALLID_COMMAND_OPERATION_CODE(0x20)のsense dataを返せばいいらしい。
HEWのリモートデバッガとして通常USBを使っていたのですが、今回RX62NのUSBポートを自分で使うために、シリアル(SCI)を使ったリモートデバッガに切り替えました。コマンドやログ出し用にシリアルを使っていたので、計2つのシリアルを使うことに。
USB-シリアル変換(FT232RL)を2つ使って、さらに通常のUSBポートで計3つのUSBを使用してます。
USBハブがいっぱいになりました。。
-----------------------------------------------------------------------
2012/02/18
進捗悪い。。
ひとまず、デバッグ用のツールをメモ。
USBDeview.exe:
- Windowsに保存されてるUSBデバイスを全て表示してくれる
- 各デバイスの詳細な情報(VenderID、ProductID、クラスID、サブクラスIDなど
- 過去に接続されたUSBデバイスもWindowsは記憶していて、同じシリアルナンバーだとうまく認識してくれないが、その履歴を削除できる
Windows Driver Kit 7.1.0(USB device viewer)
- Windowsのデバイスドライバ開発ツール
- その中のToolsにUSB device viewer(UVCview.exe)で、Windowsがどう認識してるかを表示するツール
- Full Development Environmentの中のToolsにチェックを入れてインストール
現状、LowSpeedと認識してるらしい。。。ことが分かりました。← 間違いでした。認識できないデバイスの場合、最後はWindowsがあきらめて、LowSpeed(デフォルト?)として記憶しているだけでした。認識中に更新かけるとFullSpeedと認識してました。
現状分かったことについてメモ
- iSerialNumberが必要
- LUNは0で返せばよい(Windowsは複数LUN未サポート)
- Windows標準のドライバ(インボックス・ドライバ)で認識させるには、bInterfaceClass:0x08(Mass Storage Class)、bInterfaceSubClass:0x06(SCSI)、bInterfaceProtocol:0x50(BOT)とすればよい
- USBデバイスを接続してからWindows標準ドライバ(C:\Windows\system32\usbstor.sys)がインストールされる過程が、C:\Windows\setupapi.logに記録される
-----------------------------------------------------------------------
2012/03/03
相変わらず、進捗悪いです。
なんとかWindowsに認識してもらえるようになりましたが、まだ正しく認識されません。。
-----------------------------------------------------------------------
2012/03/11
ようやく、WindowsXPに正しく認識されるようになりました!
このバルーンに「RX62N R/W」と出てますが、これはDescriptorのiProductに設定している文字列です。
いやぁ、SDカード制御に比べて、めちゃ長かったです。。
容量も正しく認識してる、と思います。
ちょっと容量の大きなファイル(PDF)をSDカードに書き込んで、
表示させてみました。正しくファイルが読めてます。
やはり、WindowsXPは最大128セクタ(64KB)を単位に読みにきます。
一部のログを公開。
あと、ハードウェアのプロパティを見てみると、「Micro RX62N SD R/W」と表示されてます。
これは、SCSIコマンドのInquiryで設定した文字列が使われるようです。
さて、連続Readは問題なくできたぽいので、次は連続ライト、フォーマットに挑戦です。
-----------------------------------------------------------------------
2012/05/1
しばらく更新を怠ってましたが、↑の後、ちょこっとバグ直したらあっさりライト、フォーマットも動きました。CristalDiskMarkも動かしてみましたが、一応動くのは動いたのですが、あまりに遅く。。。
速度改善でDMAを使ってみたりしましたが、RX62NはRAMが少なく、SH-2Aに乗り換えました。
USB R/Wは完成ということで。
0 件のコメント:
コメントを投稿