背景
如何讓Openharmony設(shè)備HDC接口(OTG接口)作為一個(gè)復(fù)合設(shè)備,實(shí)現(xiàn)HDC(HDC:鴻蒙設(shè)備連接器) + CDC ACM(USB 虛擬串口),而設(shè)備本身支持HDC。所以需要增加CDC ACM(USB 虛擬串口)。
本文主要講解OpenHarmony中,板卡上的OTG接口如何支持復(fù)合設(shè)備,環(huán)境說明如下:
描述項(xiàng) | 說明 |
---|---|
OpenHarmony版本 | release-4.0 |
內(nèi)核版本 | 5.10 |
板卡 | 風(fēng)火輪youyeetoo R1開發(fā)板(RK3588S) |
Linux內(nèi)核5.10,是采用configfs來(lái)配置USB的功能,即配置USB gadget。實(shí)現(xiàn)USB復(fù)合設(shè)備之前,需要了解一些概念。
什么是USB gadget
在OpenHarmony如何配置
configfs配置USB gadget流程
什么是USB gadget
USB設(shè)備驅(qū)動(dòng),按照設(shè)備端關(guān)聯(lián)的USB控制器是工作在主模式還是從模式,分為USB設(shè)備主機(jī)側(cè)驅(qū)動(dòng)(主模式),或者USB設(shè)備從機(jī)側(cè)驅(qū)動(dòng)(從模式)。同時(shí),工作在主模式的USB控制器,稱為USB主機(jī)控制器(UHC:USB Host Controller),工作在從模式的USB控制器,稱為USB設(shè)備控制器(UDC: USB Device Controller)。有的USB控制器,只能工作在主模式或從模式中的某一種;而有的則既可以工作在主模式,也可以工作在從模式,模式通過OTG切換。當(dāng)然,在同一時(shí)刻,USB控制器要么工作在主模式,要么工作在從模式。
本文的重點(diǎn)是USB設(shè)備從機(jī)側(cè)驅(qū)動(dòng)(從模式),Linux下將USB設(shè)備從機(jī)側(cè)驅(qū)動(dòng),稱為USB Gadget驅(qū)動(dòng)。USB Gadget驅(qū)動(dòng) 是通過USB來(lái)模擬其它類型的設(shè)備,如USB Gadget UAC驅(qū)動(dòng) 用來(lái)模擬聲卡外設(shè);USB Gadget Serial驅(qū)動(dòng)用來(lái)模擬串口外設(shè),等等等等。這里所謂模擬,是指通過USB來(lái)模擬這些設(shè)備的行為,而這些對(duì)于連接對(duì)端的USB主機(jī)是透明的。對(duì)于USB Gadget驅(qū)動(dòng) ,類似于譬如像U盤設(shè)備的固件,但它們并不完全等同,因?yàn)楫吘怪皇峭ㄟ^USB模擬設(shè)備行為。
USB Gadget驅(qū)動(dòng),包括USB設(shè)備控制器(UDC)驅(qū)動(dòng)和Gadget功能(function)驅(qū)動(dòng)兩大部分。其中USB設(shè)備控制器(UDC)驅(qū)動(dòng)負(fù)責(zé)USB設(shè)備控制器(UDC)和主機(jī)側(cè)USB控制器(UHC)之間的數(shù)據(jù)傳輸;而Gadget功能驅(qū)動(dòng)(function)負(fù)責(zé)實(shí)現(xiàn)功能協(xié)議(如UDC等)。USB設(shè)備控制器(UDC)驅(qū)動(dòng)和Gadget功能驅(qū)動(dòng)(function)彼此之間也會(huì)進(jìn)行數(shù)據(jù)交互。
在OpenHarmony如何配置
在OpenHarmony中,USB這一塊依舊采用內(nèi)核驅(qū)動(dòng),所以整體套路都是一樣。也是通過configfs配置USB功能。
以風(fēng)火輪youyeetooR1開發(fā)板(RK3588S)為例,configfs配置路徑:device/board/youyeetoo/R1/cfg/init.R1.usb.cfg。
init.R1.usb.cfg默認(rèn)已經(jīng)配置好了HDC的功能,如果需要功能,只需在此文件上增加對(duì)應(yīng)功能即可。
configfs配置USB gadget流程
掛載configfs,掛載完成之后在/config 目錄下就會(huì)生成usb_gadget/目錄。
"mountconfigfsnone/config"
建立gadgets, 創(chuàng)建g1/目錄之后,該目錄下會(huì)生成很多配置目錄,這里的g1表示 gadget 1,一個(gè) UDC 對(duì)應(yīng)一個(gè) gadget,如果你的 SOC 上有多個(gè) gadget,可以創(chuàng)建多個(gè)gx目錄。
"mkdir/config/usb_gadget/g10770shellshell"
"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相關(guān)配置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支持
內(nèi)核配置需要使能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",
驗(yàn)證
新增加的USB CDC ACM功能之后,就會(huì)在/dev下生成設(shè)備節(jié)點(diǎn),虛擬串口節(jié)點(diǎn)一般為:ttyGSx(即:Gadget Serial)
數(shù)據(jù)驗(yàn)證:
-
usb
+關(guān)注
關(guān)注
60文章
7947瀏覽量
264797 -
hdc
+關(guān)注
關(guān)注
1文章
44瀏覽量
3598 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3723瀏覽量
16343
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論