0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在Openharmony中實(shí)現(xiàn)USB復(fù)合設(shè)備

Rice嵌入式開發(fā)技術(shù)分享 ? 來(lái)源:Rice嵌入式開發(fā)技術(shù)分享 ? 作者:Rice嵌入式開發(fā)技術(shù) ? 2024-06-13 15:03 ? 次閱讀

背景

如何讓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)

f0f1b5e0-220a-11ef-8eb4-92fbcf53809c.png

通過configfs配置Linux USB gadget

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è)備行為。

f11f7db8-220a-11ef-8eb4-92fbcf53809c.png

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"

寫入gadget的PID、VID、序列號(hào)等信息

"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",
f1363396-220a-11ef-8eb4-92fbcf53809c.png

驗(yàn)證

新增加的USB CDC ACM功能之后,就會(huì)在/dev下生成設(shè)備節(jié)點(diǎn),虛擬串口節(jié)點(diǎn)一般為:ttyGSx(即:Gadget Serial)

f141fb40-220a-11ef-8eb4-92fbcf53809c.png

數(shù)據(jù)驗(yàn)證:

f15e953e-220a-11ef-8eb4-92fbcf53809c.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7947

    瀏覽量

    264797
  • hdc
    hdc
    +關(guān)注

    關(guān)注

    1

    文章

    44

    瀏覽量

    3598
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3723

    瀏覽量

    16343
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    stm32 usb復(fù)合設(shè)備支持鍵盤鼠標(biāo)和hid串口通信可以實(shí)現(xiàn)嗎?

    stm32 usb復(fù)合設(shè)備支持鍵盤鼠標(biāo)和hid串口通信可以實(shí)現(xiàn)
    發(fā)表于 05-24 08:20

    何在一個(gè)USB設(shè)備同時(shí)實(shí)現(xiàn)USBHID和USB讀卡器

    原子大哥,如何在一個(gè)USB設(shè)備同時(shí)實(shí)現(xiàn)USBHID和USB讀卡器 ?我把HID的各描述符都放到
    發(fā)表于 07-24 04:35

    靈動(dòng)微課堂(第109講) | MM32 USB功能學(xué)習(xí)筆記 —— USB復(fù)合設(shè)備

    、類別描述元和端點(diǎn)描述元,而HID類別則會(huì)有特定的類別描述元,此描述元會(huì)交代報(bào)告(report)描述元和實(shí)體(physical)描述元; 本節(jié)我們來(lái)講解如何在MM32 MCU實(shí)現(xiàn)USB復(fù)合
    發(fā)表于 03-04 17:23

    怎樣去編寫STM32 USB復(fù)合設(shè)備

    本實(shí)驗(yàn)是基于野火霸道開發(fā)板STM32F103ZET6目的完成一個(gè)CDC + MSC的復(fù)合USB設(shè)備可以方便在CDC,MSC,復(fù)合設(shè)備三者間切
    發(fā)表于 08-20 07:28

    STM32 USB復(fù)合設(shè)備編寫的目的是什么

    STM32 USB復(fù)合設(shè)備編寫目的完成一個(gè)CDC + MSC的復(fù)合USB設(shè)備可以方便在CDC,M
    發(fā)表于 08-20 07:10

    如何利用OpenHarmony實(shí)現(xiàn)智能設(shè)備面板的設(shè)計(jì)

    。如何實(shí)現(xiàn)多種家庭設(shè)備的集中管理和遠(yuǎn)程控制,是智能家居功能的體現(xiàn)?;谝陨媳尘埃疚奶岢隽艘环N基于OpenHarmony設(shè)計(jì)實(shí)現(xiàn)智能
    發(fā)表于 03-21 09:20

    OpenHarmony標(biāo)準(zhǔn)設(shè)備應(yīng)用開發(fā)筆記匯總

    何在標(biāo)準(zhǔn)設(shè)備上運(yùn)行一個(gè)最簡(jiǎn)單的 OpenHarmony 程序。2、如何在OpenHarmony
    發(fā)表于 03-28 14:19

    USB復(fù)合設(shè)備工作不正常是因?yàn)槎它c(diǎn)太多了嗎?

    我在H7芯片上成功運(yùn)行了ThreadX+USBX程序。使用的是USB復(fù)合設(shè)備(CDC ACM+HID),所以我嘗試在F105RBT6上實(shí)現(xiàn)同樣的功能,但是遇到了麻煩,在F105上運(yùn)行
    發(fā)表于 12-27 06:58

    無(wú)法將工作USB復(fù)合設(shè)備應(yīng)用程序從LPC54114移植到LPC11U68怎么解決?

    我無(wú)法將工作USB 復(fù)合設(shè)備應(yīng)用程序從 LPC54114 移植到 LPC11U68。問題背景:在此應(yīng)用程序,
    發(fā)表于 04-14 06:34

    USB復(fù)合設(shè)備的概念及CDC MSC的講解

    購(gòu)買Hub的費(fèi)用,而對(duì)于開發(fā)者則希望可以既不占用多接口,又可以實(shí)現(xiàn)多功能,來(lái)贏得消費(fèi)者的關(guān)注。USB復(fù)合設(shè)備就在這樣的市場(chǎng)需求下應(yīng)運(yùn)而生。
    發(fā)表于 09-07 06:11

    WinCE系統(tǒng)USB設(shè)備自動(dòng)檢測(cè)實(shí)現(xiàn)

    英創(chuàng)公司ARM9系列工控主板預(yù)裝正版 WinCE 操作系統(tǒng),提供標(biāo)準(zhǔn)USB接口,本文介紹如何在應(yīng)用程序判斷USB存儲(chǔ)設(shè)備的插入和移出操作。
    發(fā)表于 06-09 15:48 ?51次下載

    實(shí)現(xiàn)stm32 usb復(fù)合設(shè)備開發(fā)

    cube的stm32 usb代碼分析以及復(fù)合設(shè)備開發(fā)
    的頭像 發(fā)表于 07-05 00:11 ?9352次閱讀
    <b class='flag-5'>實(shí)現(xiàn)</b>stm32 <b class='flag-5'>usb</b><b class='flag-5'>復(fù)合</b><b class='flag-5'>設(shè)備</b>開發(fā)

    MM32 USB功能學(xué)習(xí)筆記 —— USB復(fù)合設(shè)備

    在上一節(jié)我們介紹了MM32 MCU的USB模擬U盤功能,通過四個(gè)章節(jié)把常用的USB設(shè)備功能編程一一做了介紹,通常來(lái)說,往往希望我們USB設(shè)備
    發(fā)表于 02-09 11:27 ?2次下載
    MM32 <b class='flag-5'>USB</b>功能學(xué)習(xí)筆記 —— <b class='flag-5'>USB</b><b class='flag-5'>復(fù)合</b><b class='flag-5'>設(shè)備</b>

    何在OpenHarmony上開發(fā)服務(wù)卡片

    本篇文章我們將分享如何在 OpenHarmony 上開發(fā)服務(wù)卡片。
    的頭像 發(fā)表于 04-10 11:12 ?1067次閱讀

    USB復(fù)合設(shè)備介紹

    電子發(fā)燒友網(wǎng)站提供《USB復(fù)合設(shè)備介紹.pdf》資料免費(fèi)下載
    發(fā)表于 08-01 10:37 ?0次下載
    <b class='flag-5'>USB</b><b class='flag-5'>復(fù)合</b><b class='flag-5'>設(shè)備</b>介紹