华大HC32F460XXX移植cherryusb协议栈,实现USB CDC ACM

第一步:下载cherryusb源代码:https://github.com/cherry-embedded/CherryUSB/tree/master
第二步:找到HC32F460对应的IP:新思科技的dwc2
             这里我在阅读cherryusb源代码的时候,看到有HC32F4A0的片子支持,然后比对了寄存器发现基本上是一致的,下图列了一部分寄存器对应关系,感兴趣的可以自己查阅比对一下
             



第三步:因为我们要实现的是CDC ACM类,也就是USB转串口的功能,所以要用到的源代码文件如下图:
             


第四步:实现配置文件usb_config.h,因为我用到了rt_thread_nano,所以,我直接拷贝了作者的文件到cherryusb根目录下
          


第五步:实现应用代码,直接拷贝作者提供的模板文件,然后根据自己实际应用修改文件名及代码内容:
          


第六步:实现两个函数:对应初始化usb时钟、引脚复用、usb时钟开启、【串口实体初始化】等硬件功能,因为作者用了__WEAK修饰符,所以可以自己直接重新实现
          usb_dc_low_level_init
          usb_dc_low_level_deinit
          


第七步:修改对应的FIFO缓存大小,因为作者默认的缓存大小超出了HC32F460的,所以这里需要手动修改。根据芯片手册,HC32F460的FIFO总共只有1.25KB,需要根据自己实际情况修改
         


第八步:如果使用了实体串口,还需要在类请求实现对实体串口的配置,因为作者使用了_WEAK修饰符,所以也可以自己重新实现
         

第九步:调用USB中断服务程序


到此基本结束了,就可以直接使用了,下面是我自己实现的一些截图
       


       


可以直接代替串口工具使用了


 



总结:实际上学习USB协议栈断断续续的也有两年多了,途中反反复复,前面学的知识忘记了,后面又得重新学习,官方文档庞杂、散乱,其中CDC ACM类,要完成一个描述符的内容,需要好多分散的文档才能理解,费老劲了。
          我自己推荐一些自认为有用的学习内容:
          视频(cherryusb作者自己做的视频,前期前面的几集声音有问题,后期重新录过):https://www.bilibili.com/video/B ... 706db96bb8a6aa4fbfd
          网站:USB中文网,站长推荐的一款usb抓包工具力荐:USB Packet view,上面截图就是该工具上位机界面,当然 Wireshark 也是很好用的,但是本人不太会用


          官网:Defined Class Codes | USB-IF

源码及抓包工具,转包例程数据,cdc acm用到的文档,有兴趣的可以自行提取:

链接:百度网盘 请输入提取码
提取码:1234

CherryUSB 是一个轻量级的 USB 协议栈,适用于资源受限的嵌入式系统。它支持多种 USB 设备类,并且具有良好的模块化设计,便于集成到不同的操作系统中。 RT-Thread 是一款实时操作系统 (RTOS),其特点是高度可裁剪、低功耗以及强大的组件生态。将 CherryUSB 移植到 RT-Thread 上可以让开发者更容易地构建基于该操作系统的 USB 应用程序。 以下是简化的步骤说明: ### 准备工作 1. **环境搭建**:首先确保已经安装了适合开发板的目标工具链,比如 GCC 编译器等。 2. **下载源码库**: - 获取最新的 `cherryusb` 和 `rt-thread` 源代码仓库。 ### 文件组织结构整合 3. 将 `cherryusb` 的核心文件夹加入到项目工程目录下;如果有必要的话修改相应的路径设置使得编译器能找到它们。 4. 根据实际硬件平台调整配置选项,在某些情况下可能需要编写特定于芯片的初始化函数或中断处理机制。 ### 系统调用适配层创建 5. 构建一层薄薄的适配层以连接两者之间的差异点(例如内存分配策略)。这通常涉及到对 `os.h` 类型头文件的操作,目的是让上层应用看不到底层 OS 的具体实现细节。 6. 对比分析双方对于同步原语的支持情况并选择合适的方式来进行互斥保护或者事件通知之类的任务调度控制。 ### 测试验证阶段 7. 使用简单的示例测试整个移植过程是否成功,如 HID 鼠标/键盘设备模拟,MSC 存储盘符仿真等等。 8. 解决所有已知的问题后进行全面的功能性和稳定性回归测试直至满足预期目标为止。 通过上述流程可以顺利完成从零开始把 CherryUSB 移植到 RT-Thread 的全过程。当然每个具体的项目可能会有所不同,因此还需要针对实际情况作出适当调整。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值