2012年3月13日火曜日

RX62N USB SDカード R/W

2012/02/12

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 件のコメント:

    コメントを投稿