0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CherryUSB-HID设备实践 | 技术集结

jf_12300286 2025-04-27 17:46 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文为大家带来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

8d5ff1a6-234c-11f0-9434-92fbcf53809c.jpg

再进Device Drivers

8d713e66-234c-11f0-9434-92fbcf53809c.jpg

最下面有Using USB with CherryUSB

8d877fdc-234c-11f0-9434-92fbcf53809c.jpg

进入CherryUSB配置页面,这里选中Enable usb device mode

8d9efdf6-234c-11f0-9434-92fbcf53809c.jpg

再Enter键进入USB Device模式配置,这里选中FS,IP选kinetis_mcx, 并Enable usb hid device, usb device template选hid_mouse

8dae319a-234c-11f0-9434-92fbcf53809c.jpg

配置完毕,运行如下命令编译:

scons-j8

8dc6e6d6-234c-11f0-9434-92fbcf53809c.jpg

编译成功,在当前目录下也会有rtthread.bin文件生成,用如下pyocd命令即可烧录:

pyocdload -e sector -t mcxa156vll rtthread.bin

烧录完毕后板子会自动重启,电脑系统中应该会识别出一个新USB HID鼠标设备,笔者电脑的linux系统下dmesg看到内容如下图所示:

8dd9206c-234c-11f0-9434-92fbcf53809c.jpg

在Finsh终端运行hid_example命令,会看到鼠标画圆

8deb189e-234c-11f0-9434-92fbcf53809c.jpg

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • HID
    HID
    +关注

    关注

    2

    文章

    137

    浏览量

    48632
  • USB协议栈
    +关注

    关注

    0

    文章

    3

    浏览量

    7348
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    让开发板畅游网络:RT-Thread CherryUSB 驱动 RNDIS 模块详解 | 技术集结

    本文通过在RT-Thread操作系统上,使用CherryUSB软件包作为USBHost协议栈,驱动AIR780E4GCat.1模块的RNDIS功能,并成功接入lwIP网络协议栈,最终在开发板上实现了
    的头像 发表于 07-02 17:04 2960次阅读
    让开发板畅游网络:RT-Thread <b class='flag-5'>CherryUSB</b> 驱动 RNDIS 模块详解 | <b class='flag-5'>技术</b><b class='flag-5'>集结</b>

    CherryUSB Host必须要DMA而Device就可以选择是否使用DMA?

    此一问。 图为CherryUSB设备初始化中对于DMA是否开启的配置 图为CherryUSB主机初始化中配置,是必须开启DMA的
    发表于 09-10 06:58

    CherryUSB和RTThread自带的USB如何合理使用?

    RTThread自带了很多的USB的功能,但是我在想如果使用CherryUSB是否比使用 自带的更好。 所以我的操作一开始是这样的 1、RTThread使能自带的USB,使能了大容量设备MSC,测试正常
    发表于 10-13 07:52

    CherryUSB软件包不知道如何使用

    CherryUSB软件包不知道如何使用。软件在env下是在kconfig中设置并在组件中进行设置即可使用。1 如果使用CherryUSB,原来的如何处理?2 是否支持分时的从设备切换到主机?3 主机读写U盘是否有demo?
    发表于 11-24 11:22

    cherryusb hid 高速模式demo

    cherryUSB提供的demo,只有fs模式的demo,有没有高速模式的demo,一次可以传输1024字节的那种
    发表于 11-24 23:27

    如何编写应用程序与USB HID设备通讯

    我们如果想实现一个USB 的HID设备,不需要在Windows 下开发自己的驱动程序。HID不一定要是标准的外设类型,唯一的要求是交换的数据存储在报文的结构内,设备固件必须支持报文
    发表于 01-18 15:16 234次下载
    如何编写应用程序与USB <b class='flag-5'>HID</b><b class='flag-5'>设备</b>通讯

    基于Wave Panel的HID设备通讯接口设计

    本文以视频编辑专用HID设备Wave Panel为基础,简要地介绍HID设备性能及Windows环境下HID通讯机制,并在此基础上设计一个实
    发表于 07-12 15:48 1860次阅读
    基于Wave Panel的<b class='flag-5'>HID</b><b class='flag-5'>设备</b>通讯接口设计

    USB HID设备应用(进阶篇)

    Freescale的USB HID设备应用(进阶篇)
    发表于 12-07 18:19 0次下载

    05 HID设备

    05 HID设备
    发表于 10-11 09:24 13次下载
    05 <b class='flag-5'>HID</b><b class='flag-5'>设备</b>

    基于USB总线接口芯片CH372的HID设备接口设计

    USB(Universal Serial Bus,通用串行总线)是计算机上的一种新型接口技术,它使得计算机和外部设备的连接十分方便。HID 是Human InterfaceDvices 的缩写,即
    发表于 04-10 08:31 4326次阅读
    基于USB总线接口芯片CH372的<b class='flag-5'>HID</b><b class='flag-5'>设备</b>接口设计

    安卓设备的USB-HID通讯例程的开发(2)

    安卓设备的USB-HID通讯例程的开发(2)本博文系JGB联合商务组的原创作品,引用请标明出处分析和理解前面的 **USB-HID通讯例程的开发(1)**博文中的主活动源码的核心方法
    发表于 12-28 19:40 10次下载
    安卓<b class='flag-5'>设备</b>的USB-<b class='flag-5'>HID</b>通讯例程的开发(2)

    基于HAL库的USB自定义HID设备实现

    基于HAL库的USB自定义HID设备实现基于HAL库的USB自定义HID设备实现准备工作CubeMX配置代码实现基于HAL库的USB自定义HID
    发表于 12-28 20:04 13次下载
    基于HAL库的USB自定义<b class='flag-5'>HID</b><b class='flag-5'>设备</b>实现

    HID设备例程

    我使用的硬件是极海的APM32F407IG MINI Board,它提供了一个全速的USB口(Type B)。打开Device_Examples目录中的HID例程,成功编译下载后,将USB线接上板子,电脑的设备管理器就出现下图所示的设备
    的头像 发表于 06-22 10:35 2286次阅读

    HID协议是什么意思

    对于 USB 接口的 HID 设备,有一套协议。 1.1 描述符 HID 设备有如下描述符: HID
    的头像 发表于 07-17 17:41 9406次阅读
    <b class='flag-5'>HID</b>协议是什么意思

    技术专栏】泰凌微电子USB HID 用户自定义设备应用及调试

    本文主要简单介绍USB HID Vendor Defined设备的应用和调试方法,结合Telink 8355 Dongle做简要说明。 1 USB HID Vendor Defined 设备
    的头像 发表于 07-19 08:40 2583次阅读
    【<b class='flag-5'>技术</b>专栏】泰凌微电子USB <b class='flag-5'>HID</b> 用户自定义<b class='flag-5'>设备</b>应用及调试