2022年4月27日水曜日

【Android USB oscilloscope】(26) STM32 hostはMass-Storageを挿されて何をするのか

余っているAndroidスマホをオシロにしよう!

STM32をUSB hostにする取り組みの本日は3日目.

STM32CubeIDEが自動生成してくれるUSB Mass Storage Class(MSC) sample prog.を焼いてみました.IDE画面ではMiddleWareの項目で生成します.

MSCのcodeを読んでいるのですがいつもの通りよくわかりません.
Mass Storage Class(MSC)は最終的な目標ではなく、知りたいのはBULK転送関数の運用手順です.
BULK転送手順を知るために、USBメモリにアクセスする関数の中を調べたのですがBULK転送なんか書かれてないんだよこれが.なんでかというと、MSCに「FATにセクタ読み書きするUSBコマンド」が実装されているのでそれを使っているためです.便利すぎて役に立たん.

というわけで、DDCの初期の頃にやってたみたいにcontrol転送をdumpさせて何やってるのかを逐一確認するという地道な作業の始まりとなりました.control転送は、
usbh_ctlreq.c→USBH_CtlReq()で行われています.

下記のdumpは、USBメモリが挿され、STM32 hostがUSB接続完了するまでのlogです.
USBメモリのderscriptorをこちらにupしておきます.
80 06 0100 0000 0008のような8bytesの数字がUSB control転送です.USB規格書と首っ引きで比較すると意味がわかります.

丸数字はcontrol転送と表示結果の対応を示しています.MSC classが開始した後で生じたcontrol転送⑧はMSC classのものです.①~⑦は通常のUSB2.0のものです.まぁ想定内のことしかやってないね.

USB Device Connected
USB Device Reset Completed
80 06 0100 0000 0008 GET DEVICE DESC. 8bytes
80 06 0100 0000 0012 GET DEVICE DESC. 18bytes ①
PID: 6544h ①
VID: 30deh ①
00 05 0001 0000 0000 SET ADDRESS 1 ②
Address (#1) assigned. ②
80 06 0200 0000 0009 GET CONFIG DESC. 9bytes
80 06 0200 0000 0020 GET CONFIG+INTERFACE DESC. 32bytes ③
80 06 0301 0409 00ff GET STRING1 DESC. 256bytes ④
Manufacturer : KIOXIA ④
80 06 0302 0409 00ff GET STRING2 DESC. 256bytes ⑤
Product : TransMemory ⑤
80 06 0303 0409 00ff GET STRING3 DESC. 256bytes ⑥
Serial Number : 0022CFF6B8A4C471A01239BE ⑥
Enumeration done.
This device has only 1 configuration.
00 09 0001 0000 0000 SET CONFIG 1 ⑦
Default configuration set. ⑦
Switching to Interface (#0) ③
Class    : 8h ③ Mass Storage class
SubClass : 6h ③ SCSI command support
Protocol : 50h ③ BULK transfer only
MSC class started.
a1 fe 0000 0000 0001 GET logical unit number
Number of supported LUN: 1 ⑧
LUN #0:
Inquiry Vendor  : KIOXIA
Inquiry Product : TransMemory
Inquiry Version :
MSC Device ready
MSC Device capacity : 2615672320 Bytes
Block number : 30274559
Block Size   : 512

25へ    27へ

かしこ

0 件のコメント:

コメントを投稿