背景
如何讓Openharmony設備HDC接口(OTG接口)作為一個復合設備,實現HDC(HDC:鴻蒙設備連接器) + CDC ACM(USB 虛擬串口),而設備本身支持HDC。所以需要增加CDC ACM(USB 虛擬串口)。
本文主要講解OpenHarmony中,板卡上的OTG接口如何支持復合設備,環境說明如下:
描述項 | 說明 |
---|---|
OpenHarmony版本 | release-4.0 |
內核版本 | 5.10 |
板卡 | 風火輪youyeetoo R1開發板(RK3588S) |
Linux內核5.10,是采用configfs來配置USB的功能,即配置USB gadget。實現USB復合設備之前,需要了解一些概念。
什么是USB gadget
在OpenHarmony如何配置
configfs配置USB gadget流程
什么是USB gadget
USB設備驅動,按照設備端關聯的USB控制器是工作在主模式還是從模式,分為USB設備主機側驅動(主模式),或者USB設備從機側驅動(從模式)。同時,工作在主模式的USB控制器,稱為USB主機控制器(UHC:USB Host Controller),工作在從模式的USB控制器,稱為USB設備控制器(UDC: USB Device Controller)。有的USB控制器,只能工作在主模式或從模式中的某一種;而有的則既可以工作在主模式,也可以工作在從模式,模式通過OTG切換。當然,在同一時刻,USB控制器要么工作在主模式,要么工作在從模式。
本文的重點是USB設備從機側驅動(從模式),Linux下將USB設備從機側驅動,稱為USB Gadget驅動。USB Gadget驅動 是通過USB來模擬其它類型的設備,如USB Gadget UAC驅動 用來模擬聲卡外設;USB Gadget Serial驅動用來模擬串口外設,等等等等。這里所謂模擬,是指通過USB來模擬這些設備的行為,而這些對于連接對端的USB主機是透明的。對于USB Gadget驅動 ,類似于譬如像U盤設備的固件,但它們并不完全等同,因為畢竟只是通過USB模擬設備行為。
USB Gadget驅動,包括USB設備控制器(UDC)驅動和Gadget功能(function)驅動兩大部分。其中USB設備控制器(UDC)驅動負責USB設備控制器(UDC)和主機側USB控制器(UHC)之間的數據傳輸;而Gadget功能驅動(function)負責實現功能協議(如UDC等)。USB設備控制器(UDC)驅動和Gadget功能驅動(function)彼此之間也會進行數據交互。
在OpenHarmony如何配置
在OpenHarmony中,USB這一塊依舊采用內核驅動,所以整體套路都是一樣。也是通過configfs配置USB功能。
以風火輪youyeetooR1開發板(RK3588S)為例,configfs配置路徑:device/board/youyeetoo/R1/cfg/init.R1.usb.cfg。
init.R1.usb.cfg默認已經配置好了HDC的功能,如果需要功能,只需在此文件上增加對應功能即可。
configfs配置USB gadget流程
掛載configfs,掛載完成之后在/config 目錄下就會生成usb_gadget/目錄。
"mountconfigfsnone/config"
建立gadgets, 創建g1/目錄之后,該目錄下會生成很多配置目錄,這里的g1表示 gadget 1,一個 UDC 對應一個 gadget,如果你的 SOC 上有多個 gadget,可以創建多個gx目錄。
"mkdir/config/usb_gadget/g10770shellshell"
寫入gadget的PID、VID、序列號等信息。
"write/config/usb_gadget/g1/idVendor0x2207", "write/config/usb_gadget/g1/idProduct0x0018", "write/config/usb_gadget/g1/os_desc/use1", "write/config/usb_gadget/g1/bcdDevice0x0223", "write/config/usb_gadget/g1/bcdUSB0x0200", "mkdir/config/usb_gadget/g1/strings/0x4090770", "copy/sys/block/mmcblk0/device/cid/config/usb_gadget/g1/strings/0x409/serialnumber", "chmod0640/config/usb_gadget/g1/strings/0x409/serialnumber", "write/config/usb_gadget/g1/strings/0x409/manufacturerRockchip", "write/config/usb_gadget/g1/strings/0x409/product"HDCDevice"",
建立gadget相關配置configurations。
"mkdir/config/usb_gadget/g1/configs/b.10770shellshell", "mkdir/config/usb_gadget/g1/configs/b.1/strings/0x4090770shellshell", "write/config/usb_gadget/g1/os_desc/b_vendor_code0x1", "write/config/usb_gadget/g1/os_desc/qw_signMSFT100", "write/config/usb_gadget/g1/configs/b.1/MaxPower500",
建立功能functions
增加功能模版,function name :任意字符串
mkdir/config/usb_gadget/g1/functions/.
以HDC為例:
mkdir/config/usb_gadget/g1/functions/ffs.hdc
建立功能和配置的鏈接。
增加功能和配置的鏈接模版
"ln-s/config/usb_gadget/g1/functions/./config/usb_gadget/g1/configs/c.1"
以HDC為例:
"symlink/config/usb_gadget/g1/configs/b.1/config/usb_gadget/g1/os_desc/b.1",
使能USB gadget
"setparamsys.usb.configfs1", "setparamsys.usb.controllerfc000000.usb"
增加CDC ACM支持
內核配置需要使能CONFIGFS的ACM的支持:
CONFIG_USB_CONFIGFS_ACM=y
通過configfs配置USB gadget,使其支持CDC ACM
"mkdir/config/usb_gadget/g1/functions/acm.usb", "symlink/config/usb_gadget/g1/functions/acm.usb/config/usb_gadget/g1/configs/b.1/f2",

驗證
新增加的USB CDC ACM功能之后,就會在/dev下生成設備節點,虛擬串口節點一般為:ttyGSx(即:Gadget Serial)
數據驗證:
-
usb
+關注
關注
60文章
8059瀏覽量
269436 -
hdc
+關注
關注
1文章
44瀏覽量
3763 -
OpenHarmony
+關注
關注
26文章
3803瀏覽量
17784
發布評論請先 登錄
相關推薦
用hal庫通過usb做了一個hid復合設備,想問問怎么才能通過藍牙來實現hid設備?
靈動微課堂(第109講) | MM32 USB功能學習筆記 —— USB復合設備
怎樣去編寫STM32 USB復合設備
如何利用OpenHarmony實現智能中控設備面板的設計
無法將工作中的USB復合設備應用程序從LPC54114移植到LPC11U68怎么解決?
USB復合設備的概念及CDC MSC的講解
WinCE系統中USB設備自動檢測實現
MM32 USB功能學習筆記 —— USB復合設備

評論