USB 功能簡介
USB 功能模塊包括了USB Host,USB Device 和OTG 功能。
USB Host 目前已經支持上的功能有:Mass Storage,UVC。
USB Device 目前已經支持上的功能有:ADB,UAC。
OTG 主要用作Host 與Device 的切換,如當板子通過 USB 線連接到 USB 主機 (PC) 上時,
此時 OTG 是加載成 USB Device;若當前板子是通過 OTG 線連接一個USB 設備,此時 OTG 則加載
成 USB Host。
USB 外設特性
- Complies with USB 2.0 Specification
- Supports High-Speed (HS, 480-Mbps), Full-Speed (FS, 12-Mbps), and Low-Speed (LS, 1.5-Mbps) in Host mode
- Supports High-Speed (HS, 480 Mbps), Full-Speed (FS, 12 Mbps) in Device mode
- Supports the UTMI+ Level 3 interface. The 8-bit bidirectional data buses are used
- Supports bi-directional endpoint0 for Control transfer
- Supports up to 8 User-Configurable Endpoints for Bulk, Isochronous and Interrupt bi-directional transfers (Endpoint1, Endpoint2, Endpoint3, Endpoint4)
- Supports up to (4KB+64Bytes) FIFO for EPs (Including EP0)
- Supports High-Bandwidth Isochronous & Interrupt transfers
- Automated splitting/combining of packets for Bulk transfers
- Supports point-to-point and point-to-multipoint transfer in both Host and Peripheral mode
- Includes automatic ping capabilities
- Soft connect/disconnect function
- Performs all transaction scheduling in hardware
- Power Optimization and Power Management capabilities
- Includes interface to an external Normal DMA controller for every Eps
USB 配置介紹
SYS_CONFIG.FEX
配置說明
sys_config.fex 中主要是對 OTG 功能進行配置,各個配置的含義可如下所示:
Key
Value
[usbc0]
控制器0的配置。
usb_used:
USB使能標志。置1,表示系統中USB模塊可用,置0,則表示系統USB禁用。
usb_port_type
USB端口的使用情況。 0: device only;1: host only;2: OTG;usb_detect_type: USB
usb_detect_mode
USB端口的檢查方式。0: 線程輪詢;1: id中斷觸發
usb_id_gpio
USB ID pin腳配置。具體請參考gpio配置說明。
usb_det_vbus_gpio
USB DET_VBUS pin腳配置。具體請參考gpio配置說明。
usb_drv_vbus_gpio
USB DRY_VBUS pin腳配置。具體請參考gpio配置說明。
usb_drv_vbus_type
vbus設置方式。0: 無; 1: gpio; 2: axp。
usb_det_vbus_gpio
"axp_ctrl",表示axp 提供。
usbh_driver_level
usb驅動能力等級
usbh_irq_flag
usb中斷標志
示例:
;--------------------------------
;--- USB0控制標志
;--------------------------------
[usbc0]
usb_used = 1
usb_port_type = 2
usb_detect_type = 1
usb_detect_mode = 0
usb_id_gpio = port:PB04< 0 >< 0 >< default >< default >
usb_det_vbus_gpio = port:PA24< 0 >< 0 >< default >< default >
usb_drv_vbus_gpio = port:PA29< 1 >< 0 >< default >< default >
usb_drv_vbus_type = 1
usbh_driver_level = 5
usbh_irq_flag = 0
RTOS MENUCONFIG 配置說明
- 使能USB 驅動
?> Drivers Options? > soc related device drivers ? > USB Drivers [*] USB
- 使能OTG
?> Drivers Options? > soc related device drivers ? > USB Drivers [*] USB_MANAGER
- 使能USB Host
使能完USB Host 之后,還需要選擇:OHCI 與EHCI(一共有0 和1 兩組,對于R128 來說,只需要使能USB0)。另外,還要選擇功能驅動(Mass Storage,UVC),不然只是使能USB Host 則無法正常運行USB Host 的功能。
USB Host 控制器驅動配置如下:
USB Host
? > Drivers Options
? > soc related device drivers
? > USB Drivers
[*] USB_HOST
OHCI
? > Drivers Options
? > soc related device drivers
? > USB Drivers
? > USB HOST
[*] USB_OHCI_0
EHCI
? > Drivers Options
? > soc related device drivers
? > USB Drivers
? > USB HOST
[*] USB_EHCI_0
- 使能USB Device
USB Device 除了UDC 的使能之外,也需要選擇對應的功能驅動Gadget 以及功能驅動對應的上層應用。
USB Device 控制器驅動配置如下:
USB Device
? > Drivers Options
? > soc related device drivers
? > USB Drivers
[*] USB_DEVICE
USB Device使能dma通信
? > Drivers Options
? > soc related device drivers
? > USB Drivers
? > USB DEVICE
[*] UDC_USE_DMA
USB 源碼結構
lichee/rtos?hal/hal/source/usb
├── common/
├── core/
├── gadget/
│ ├── function/
├── hid/
│ ├── Class/
│ ├── Client/
│ │ ├── KeyBoard/
│ │ └── Mouse/
│ ├── Include/
├── host/
├── include/
├── manager/
├── platform/
├── storage/
│ ├── Class/
│ ├── Disk/
│ ├── include/
│ └── Misc/
├── udc/
└── uvc/
├── Class/
├── drv_webcam/
│ ├── dev_cfg/
│ └── webcam_core/
├── Include/
├── Misc/
└── Webcam/
- common: USB 驅動初始化公用文件。
- core: USB Host 驅動框架層文件。
- gadget: USB Deivce 功能驅動gadget 驅動總入口文件,function 則是各個功能驅動的驅動文件。
- hid: USB Host HID 協議及驅動文件。
- host: USB Host 硬件控制器驅動。
- include: USB 公用頭文件。
- manager: USB OTG 驅動。
- platform: 不同平臺的配置文件。
- storage: USB Host Mass Storage 協議及驅動文件。
- udc: USB Deivce 硬件控制器驅動。
- uvc: USB Host UVC 協議及驅動文件。
USB 常用功能說明
配置OTG 功能
OTG 功能下,需要根據USB ID 腳去進行Device/Host 模式的切換;如果需要支持NULL 模式(既不加載Device 也不加載Host 驅動), 那么還需要VBUS 狀態檢測引腳。
涉及到的主要改動點:
在sys_config.fex,修改如下配置:
usb_port_type配置為2,即OTG模式。
usb_id_gpio配置對應的USB ID引腳。
usb_det_vbus_gpio, 需要根據實際情況進行配置:
1.如果需要檢測VBUS狀態,則按下面情況進行配置:
配置成對應的gpio即可。
2.如果不需要檢測VBUS狀態(缺少NULL模式)
那么直接填寫USB ID的gpio配置(也就是VBUS與ID狀態一致)。
USB OTG 驅動,會根據ID 和VBUS 的狀態,自動切換成對應的模式。
Device
- ID 腳一般情況下為高電平,只有接入OTG 線時會拉低;
- VBUS 為1 表示micro USB 口有接入外部電源;
- 一般不會出現ID 為0,VBUS 為1 的情況。這表示接入OTG 線,但是還檢測到VBUS;
- 如果沒有VBUS 檢測,ID 只有0 和1 的兩種情況, 也就是說要么加載device 驅動,要么加載host 驅動; 這會帶來一些影響:usb 相關時鐘一直被打開,導致有一定功耗,以及硬件射頻。
USB GADGET 功能配置
USB Gadget 支持眾多功能,它們的配置方法比較類似,只需要在mrtos_menuconfig 中選上對應的Gadget 功能驅動即可在系統初始化時自動加載。與Linux 不一樣的是,RTOS 的gadget 功能配置全部hardcode 在功能驅動里,無需像Linux 一樣需要在應用層手動進行gadget 配置。
另外,目前RTOS 的USB 驅動還不支持composite gadget,因此只能支持加載單一的gadget 功能驅動,無法同時多個功能。
ADB 功能
adb 的全稱為Android Debug Bridge,就是起到調試橋的作用。通過ADB,可以直接在PC 上通過命令行控制小機端的控制臺;也可以通過ADB 進行文件傳輸。
menuconfig 驅動相關配置:
? > Drivers Options
? > soc related device drivers
? > USB Drivers
? > USB DEVICE
[*] DRIVERS_USB_GADGET_ADB
menuconfig ADBD 應用相關配置:
? > System components
? > aw components
? > USB Components Support
? > USB Gadget Support
[*] adbd service
在RTOS 的USB 框架中,一旦加載了adb gadget,就會自動啟用adbd 服務,直接連上PC 就可以使用了。
adb 正常啟動的相關log:
[usb0] insmod device driver!
adbd version:AW?V1.1.6, compiled on: Apr 11 2023 10:33:24
adbd service init successful
PC 運行效果圖如下圖所示:
UAC 功能
UAC 全稱為USB Audio Class,USB 音頻類。
通過UAC,可以實現實時獲取音頻設備的音頻數據,并且通過UAC 實現操控設備音量,采樣率,等參數。UAC 實現對外接音頻操作,從用戶功能來說,主要包括USB 麥克風、USB 聲卡和其它音頻設備的功能控制和接口標準。
menuconfig 驅動相關配置:
? > Drivers Options
? > soc related device drivers
? > USB Drivers
? > USB DEVICE
[*] DRIVERS_USB_GADGET_UAC
menuconfig UACD 應用相關配置:
? > System components
? > aw components
? > USB Components Support
? > USB Gadget Support
[*] uacd service
? > System components
? > aw components
? > USB Components Support
? > USB Gadget Support
? > uacd audio function
[*] AudioSystem local audio
uacd 正常啟動的相關log:
[usb0] insmod device driver!
uacd version:AW?V0.5, compiled on: Apr 27 2023 10:44:02
[UACD?INFO][u_audio_init] line:167 stream=1, rate=48000, ch=2, bits=16, audio_buf_size=192
[UACD?INFO][u_audio_init] line:167 stream=0, rate=16000, ch=2, bits=16, audio_buf_size=64
[UACD?INFO][u_audio_stop_capture] line:320
[UACD?INFO][u_audio_stop_playback] line:457
[UACD?INFO][u_audio_stop_capture] line:320
[UACD?INFO][u_audio_stop_playback] line:457
啟動成功之后,能夠在PC 端看到新增了一個音頻輸入和輸出的設備,如下圖:
USB HOST 功能配置
接入OTG 線后,成功切換成 USB Host 的log 可參考如下:
[ehci?usb0] insmod host driver!
calibration finish, val:0x19, usbc_no:0
ehci insmod status = 1
[usbh core]: add gen_dev SW USB2.0 'Enhanced' Host Controller (EHCI) Driver
[D(rv.)] devops: register dev(sunxi_timer) ok
USB 0.0 started, EHCI 1.00
[usbh core]: adding sub dev (config #1, interface 0)
usb match id suceessfull
[hub]: usb hub probe
[hub]: 1 port detected
[usbh hub]: local power source is good
[E(rv.)] pm device sunxi_ehci0(00000000082AE1D0) has already registered
[ohci?usb0] insmod host driver!
calibration finish, val:0x19, usbc_no:0
[usbh core]: add gen_dev SW USB2.0 'Open' Host Controller (OHCI) Driver
[usbh core]: adding sub dev (config #1, interface 0)
usb match id suceessfull
[hub]: usb hub probe
[hub]: 1 port detected
[usbh hub]: local power source is good
[D(rv.)] devops: register dev(sunxi_ohci0) ok
U 盤功能
選上以下配置:
Mass Storage
? > Drivers Options
? > soc related device drivers
? > USB Drivers
? > USB HOST
[*] Mass Storage support
[*] USB CD support
等待U 盤掛載成功,可以發現根目錄下多了一個usb_msc 的文件夾,這個即是U 盤掛載的文件夾。可以通過該文件夾與U 盤進行讀取/傳輸文件。
- 目前R128 只支持fat32 文件系統的U 盤,其他文件系統U 盤會掛載失敗。
- 只支持掛載單分區的U 盤,如果U 盤被分解成了多個分區的話,只能掛載上第一個分區。
接入U 盤后,系統開始識別U 盤。成功識別到U 盤的log 信息如下:
ehci_irq: highspeed device connect
port debounce 0...
port debounce 0...
port debounce 25...
port debounce 50...
port debounce 75...
hub_port_init: udev address = 0
[hub_port_init]: new high speed USB device address 0
usb hub set new address(2)
[usbh core]: adding sub dev (config #1, interface 0)
usb match id suceessfull
mscDevProbe begin
[msc]: GetMaxLUN successful, max lun is 0
begin mscLunAdd
disk, send last lun msg.........
mscLun? >LunNo=0
mscLun? >mscDev? >MaxLun=1
BlkDev? >last_lun=1
Wrn: short transfer, urb_state(0), want_len(192), real_len(70)
Wrn: short transfer, urb_state(0), want_len(192), real_len(24)
?????????????????Disk Information?????????????????
WriteProtect = 0
MediaPresent = 1
WCE = 0
RCD = 0
capacity = 29532M, sector number = 60481536
sector_size = 512
DevNo = 0
ClassName =
DevName = SCSI_DISK_000
??????????????????????????????????????????????????
hub_port = 1
cnt = 0
Classname = DISK
DevName = SCSI_DISK_000
DeviceName = SCSI_DISK_000
Vender = TOSHIBA USB FLASH DRIVE PMAP
Product = USB FLASH DRIVE PMAP
Serial = PMAP
HubPortNo = 1
DeviceType = 2
DiskRead: block(0, 1) is adjacence max capacity(39ae000), can't use special write
mount usb mass storage successull!!
..............................................................................
[USB Disk]: Register new device, class = [DISK], dev = [SCSI_DISK_000]
..............................................................................
end mscLunAdd
mscDevScanThread end...
然后通過ls 查看usb_msc,可以看到U 盤里的文件:
c906 >ls
dev data usb_msc
c906 >ls usb_msc
System Volume Information 3.txt
USB 攝像頭
選上以下配置:
UVC
? > Drivers Options
? > soc related device drivers
? > USB Drivers
? > USB HOST
[*] USB_CAMERA
接上USB 攝像頭后,成功識別出攝像頭后會出現以下log:
ehci_irq: highspeed device connect
port debounce 0...
port debounce 0...
port debounce 25...
port debounce 50...
port debounce 75...
hub_port_init: udev address = 0
[hub_port_init]: new high speed USB device address 0
usb hub set new address(3)
[hub] :skipped 1 descriptor after configuration
skipped 6 descriptors after interface
skipped 1 descriptor after endpoint
skipped 26 descriptors after interface
num_ep:0
skipped 1 descriptor after endpoint
skipped 4 descriptors after interface
num_ep:0
num_ep:0
skipped 2 descriptors after interface
skipped 1 descriptor after endpoint
[usbh core]: adding sub dev (config #1, interface 0)
usb match id suceessfull
UVCDevProbe begin
Probing generic UVC device
device quirks 0x0
Found format MJPEG.
? 1920x1080 (30.0 fps)
? 1280x720 (30.0 fps)
? 640x480 (30.0 fps)
? 640x360 (30.0 fps)
? 352x288 (30.0 fps)
? 320x240 (30.0 fps)
? 320x180 (30.0 fps)
? 176x144 (30.0 fps)
? 160x120 (30.0 fps)
? 1920x1080(30.0 fps)
Found format YUV 4:2:2 (YUYV).
? 1920x1080 (5.0 fps)
? 1280x720 (10.0 fps)
? 640x480 (30.0 fps)
? 640x360 (30.0 fps)
? 352x288 (30.0 fps)
? 320x240 (30.0 fps)
? 320x180 (30.0 fps)
? 176x144 (30.0 fps)
? 160x120 (30.0 fps)
? 1920x1080 (5.0 fps)
Found UVC 1.00 device USB 2.0 Camera (0c45:6366)
num_altsetting=7
UVC device initialized.
DRV_WEBCAM_MInit
webcam plug in message...
[usbh core]: adding sub dev (config #1, interface 1)
[usbh core]: adding sub dev (config #1, interface 2)
[usbh core]: adding sub dev (config #1, interface 3)
通過log 信息能夠看到,在識別出USB 攝像頭后,會打印出該攝像頭支持的格式以及分辨率。
接著通過uvc 測試命令,對UVC 功能進行測試:
usb uvc_test
測試命令調用完成之后,會在/data 目錄下生成5 張名為/data/source_frame_x.jpg 的圖片。通過adb pull 將圖片拉到PC 端,然后在PC 端打開圖片即可看到USB 攝像頭拍下的照片。
USB 調試方法
USB OTG 功能調試
除了OTG 的自動切換功能,還可以進行手動的切換,需要使用到USB 命令。
USB Device/Host 的手動切換方法:
輸入usb ?h 能夠看見usb 的全部命令。
- USB Device 的相關命令
usb udc {?i|?r} []
?i:指的是指定需要進行切換的USB口。目前R128芯片只有USB0是支持Device模式的。
?r:指的是remove,注銷當前的Device模式。
比如說將USB0切換成Device模式,則運行:
usb udc ?i 0 - USB Host 的相關命令
usb hci {?i|?r} []
?i:指的是指定需要進行切換的USB口。
?r:指的是remove,注銷當前的Host模式。
比如說將USB0切換成Host模式,則運行:
usb hci ?i 0
USB 相關工具
ADB
ADB 功能是從Android 移植過來的,設備端會運行adbd 服務,而Host 端(一般為PC) 通過adb工具進行調試,如adb shell, adb push/pull 等。
ADB 功能說明
adb shell 功能
PC端執行adb shell,可進入控制臺。
PC端執行adb shell + command, 例如adb shell ls /可以直接將結果輸出到終端。
adb push/pull 功能
推送文件到小機端:
adb push test.bin /data
從小機端拉取文件:
adb pull /data/test.bin .
adb 網絡連接
如果需要用此功能,需要額外進行menuconfig 的配置,配置方法如下:
? > System components
? > aw components
? > USB Components Support
? > USB Gadget Support
[*] adb local transport
(5555) adb local transport port
adb local transport port 是用于配置端口號的,用于在adb 網絡連接時匹配端口的,默認為5555。
在進行網絡adb 連接之前,需要保證PC 和小機端在同一個局域網中,并且可以ping 通。
小機端運行ifconfig,查看當前小機端的IP,假設IP為192.168.1.101。
則PC端執行adb connect 192.168.1.101建立連接,然后就可以開始執行adb shell等命令了。
-
控制器
+關注
關注
112文章
15885瀏覽量
175370 -
OTG
+關注
關注
2文章
145瀏覽量
45256 -
RTOS
+關注
關注
20文章
804瀏覽量
119113 -
USB驅動
+關注
關注
1文章
136瀏覽量
20117 -
VBUS
+關注
關注
0文章
10瀏覽量
5371 -
R128
+關注
關注
0文章
41瀏覽量
76
發布評論請先 登錄
相關推薦
評論