本文为大家带来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浏览量
48632 -
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设备实践 | 技术集结
评论