2022年4月26日火曜日

【Android USB oscilloscope】(25) storage class動いてるみたい

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

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

STM32CubeIDEが自動生成してくれるMass Storage Classを焼いてみました.

実験環境の写真.コードが4つありまして、上から、
・5V電源
・USB deviceとしてUSBメモリを挿す
・STM32 writer
・COM port
すでに実験基板に致命的な馬脚が露になっています.
 ・USB hostの仕様を失念していたため、、、
 ・micro USBはhostじゃなかった →OTG cableでUSB-Aに変換する
 ・5V電源はACアダプタから供給しなくちゃいけない →つけた
基板を作ってみて気付く、そうゆう事ってよくあるよね.JLCPCBでこの失敗基板を作るのに要した費用は$5.9だからまぁいいや.全然ショックでかくないんだからねっ.

hardwareについては以上.
以下はsoftwareについて.

STM32のUSB host sample programのフレームワークを真似さしてもらいます.

まず意外だったのが、main()のloopで繰り返し呼んでる関数が何をやってるのかというと、USB deviceの脱着処理なのでした.そんなの割り込みでやってるんだろうと想像してたのですが違いました.pollingでやってるの.
  while (1)
  {
    MX_USB_HOST_Process();
  }

ちなみに、STM32のUSB device sample programでは割込み処理でした.こんなイメージ.
USBに挿すとhostから各種要求が来る
 →各種要求とはUSB packetに他ならない
 →USB hardwareがpacketを解析し
 →適するIRQが発生する
 →userは割込みハンドラに処理を記述すればよい

USB hostのdevice脱着処理のstate machineはザックリとこうなっています.そこはかとなく意味が伝わってくるものがあります.
USBH_Process()
{
  switch (phost->gState)
  {
    case HOST_IDLE :
    case HOST_DEV_WAIT_FOR_ATTACHMENT:
    case HOST_DEV_ATTACHED :
    case HOST_ENUMERATION:
    case HOST_INPUT:
    case HOST_SET_CONFIGURATION:
    case HOST_SET_WAKEUP_FEATURE:
    case HOST_CHECK_CLASS:
    case HOST_CLASS_REQUEST:
    case HOST_CLASS:
    case HOST_DEV_DISCONNECTED :
    case HOST_ABORT_STATE:
  }
}

上の各caseにdebuggerのlog messageが仕込まれています.
 USBH_UsrLog("USB Device Connected");
しかしdebuggerの使い方がよくわからんのでCOM portに文字列を出力させました.
マクロ定義ってよく知らないのですがこんな無茶でも通用するんですね.
 #define  USBH_UsrLog(...)   do { \
char x[100]; \
sprintf(x,__VA_ARGS__); \
hira_senduart_str(x); \
hira_senduart_str("\n"); \
 } while (0)

STM32のUSB host sample programが正常動作していればUSBメモリを挿抜したときにstate遷移に伴う表示がCOM portに流れるはずです.それをやってみたのがこれ.connectedから始まりdisconnectedで終わっています.どうやらhard/soft共に正常に動いているようです.これで開発環境が整いました.
KIOXIAのUSBメモリです.
USB Device Connected
USB Device Reset Completed
PID: 6544h
VID: 30deh
Address (#1) assigned.
Manufacturer : KIOXIA
Product : TransMemory
Serial Number : 0022CFF6B8A4C471A01239BE
Enumeration done.
This device has only 1 configuration.
Default configuration set.
Switching to Interface (#0)
Class    : 8h  <--mass storage class
SubClass : 6h
Protocol : 50h
MSC class started.
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
USB Device disconnected

24へ    26へ

かしこ

0 件のコメント:

コメントを投稿