本文為大家帶來CherryUSB-HID設備實踐,以MCXA156為例。開發環境搭建請參考RT-Thread的快速入門,咱們就直入主題,折騰USB去。
CherryUSB的移植適配
據筆者理解,RT-Thread歷史上一共曾有過三個USB協議棧,原自帶Legacy USB協議棧、TinyUSB、CherryUSB,但在2024年已經統一切換成CherryUSB了。CherryUSB的適配其實也有固定套路:第一步準確找到USB對應的IP,因為CherryUSB的IP實現是作為一個port存在,復用即可。那么對于MCXA156 USB來說,它的IP應該是kinetis一類;第二步實現usb_dc_low_level_init()與usb_dc_low_level_deinit()函數,前者主要做USB相關的時鐘阿、中斷阿、甚至pinmux等一些初始化,而后者就是去初始化是前者的逆向操作,這一步可以觀察下倉庫里的code是不是已經有對應的glue代碼,如果有修改即可,如果沒有添加下對應代碼也不是難事。
對應到MCXA156來說,如上文所述有版友已經做完CherryUSB適配的修改,咱就搭個順風車。
USB HID設備的實踐
版友做完CherryUSB適配修改后測試的是CDC ACM設備,那筆者就換USB HID設備玩玩,就模擬個USB HID鼠標吧。
直接上代碼,修改bsp/nxp/mcx/mcxa/frdm-mcxa156/board/ports/cherryusb/cherryusb.c,加入以下代碼:
#ifdefRT_CHERRYUSB_DEVICE_TEMPLATE_HID_MOUSEexternvoidhid_mouse_init(uint8_tbusid,uintptr_treg_base);externvoidhid_mouse_test(uint8_tbusid);staticintrt_hw_mcxa156_cherryusb_hid_init(void){ hid_mouse_init(0,0x400A4000u); return0;}INIT_COMPONENT_EXPORT(rt_hw_mcxa156_cherryusb_hid_init);staticinthid_example(intargc,char**argv){ hid_mouse_test(0); return0;}MSH_CMD_EXPORT(hid_example, USB hid example);#endif
筆者覺得代碼挺簡單的,調用hid_mouse_init()初始化一個USB HID鼠標,調用hid_mouse_test()做具體測試,其實就是鼠標畫圓了可參見文末視頻,代碼基本是self-commented and explained,在CherryUSB的手冊里也有對應的函數API介紹,如有疑問可回帖垂詢。
然后在bsp/nxp/mcx/mcxa/frdm-mcxa156/目錄下運行如下命令進入menuconfig配置界面
scons--menuconfig
進入menuconfig配置界面后,按如下步驟配置一下:
配置主界面進RT-Thread Components

再進Device Drivers

最下面有Using USB with CherryUSB

進入CherryUSB配置頁面,這里選中Enable usb device mode

再Enter鍵進入USB Device模式配置,這里選中FS,IP選kinetis_mcx, 并Enable usb hid device, usb device template選hid_mouse

配置完畢,運行如下命令編譯:
scons-j8

編譯成功,在當前目錄下也會有rtthread.bin文件生成,用如下pyocd命令即可燒錄:
pyocdload -e sector -t mcxa156vll rtthread.bin
燒錄完畢后板子會自動重啟,電腦系統中應該會識別出一個新USB HID鼠標設備,筆者電腦的linux系統下dmesg看到內容如下圖所示:

在Finsh終端運行hid_example命令,會看到鼠標畫圓

-
HID
+關注
關注
2文章
137瀏覽量
48553 -
USB協議棧
+關注
關注
0文章
3瀏覽量
7348
發布評論請先 登錄
讓開發板暢游網絡:RT-Thread CherryUSB 驅動 RNDIS 模塊詳解 | 技術集結
CherryUSB Host必須要DMA而Device就可以選擇是否使用DMA?
CherryUSB和RTThread自帶的USB如何合理使用?
CherryUSB軟件包不知道如何使用
如何編寫應用程序與USB HID設備通訊
基于Wave Panel的HID設備通訊接口設計
基于USB總線接口芯片CH372的HID設備接口設計
安卓設備的USB-HID通訊例程的開發(2)
基于HAL庫的USB自定義HID設備實現
HID設備例程
【技術專欄】泰凌微電子USB HID 用戶自定義設備應用及調試

CherryUSB-HID設備實踐 | 技術集結
評論