基于 CherryUSB 调试 dwc2 usb host 笔记

RT-Thread物联网操作系统 RT-Thread物联网操作系统 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

本文由RT-Thread论坛用户@sakumisu原创发布:https://club.rt-thread.org/ask/article/9c31ce71ead26c2b.html
背景

之前适配 DWC2 USB IP 的时候,主要是基于 st 的 hal 库来走的,当时我就对他们的 hal 库代码不满,只是无奈,迫于时间就没重构,果不其然,usb bug 一堆,随意举例,这还只是冰山一角。
https://club.rt-thread.org/ask/article/dac2a83e018f6ad2.html

https://club.rt-thread.org/ask/article/b39785f4dd8a6032.html

再论 usb 的性能,那 hal 库写的,性能直接歇菜,根本没法用。
排坑

ok,现在我们开始一步步排坑

    全局中断 SOF
    首先是全局中断 SOF ,这是一个比较坑的,尤其是带了 OS 以后,几个意思,跟我 os 抢中断呢?sof 中断 1ms会触发一次,很费中断。为什么会有这个中断开启?后面再来说,结论就是 dwc2 这个ip太辣鸡,硬件做的很随意,功能没有做到硬件上去,而这个 sof 主要就是给中断传输和同步传输用的。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wIthnmr5-1655258913676)(https://oss-club.rt-thread.org/uploads/20220613/5b84aa1d18091292a73ad9f74193620e.png “QQ图片20220613230829.png”)]

    HCFG 中的 bit 0-1

这也是坑,我们直接看结论,人家手册里说了,每次设置时,需要复位,st 代码中楞是一个字没看见。小坑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2u5ueiC6-1655258913677)(https://oss-club.rt-thread.org/uploads/20220613/31c9536bc90106277ea899242d32e1d0.png “QQ截图20220613231215.png”)]

    HCINTMSK 中的 USB_OTG_HCINTMSK_NAKM

这里面中断标志那是相当多,最坑的是什么,USB_OTG_HCINTMSK_NAKM,我可以说,论坛出现的所有 NAK 的原因都是他造成的,什么枚举 NAK,U盘 NAK,都是他。究其原因,NAK 表示当前没有准备好,需要重试,但是其实并不需要,st 的代码中,进入 NAK 中断以后会关闭当前通道传输,然而,对于控制和批量传输这是没有必要的,传输是可以等到完成的。开了这个,就会造成,各种地方需要手动重发,然后读 HAL_HCD_HC_GetURBState,没有必要,关掉该中断给你带来无限可能。

原文链接:https://blog.csdn.net/rtthreadiotos/article/details/125291738

...全文

相关推荐

DWC2 USB主机驱动分析[项目源码]

本文详细分析了CherryUSB项目中DWC2 USB主机控制器的驱动实现,重点解读了usb_hc_dwc2.c源码。文章首先提供了主机中断处理流程的思维导图,帮助读者理解整体架构。随后通过全中文注释的方式,逐函数解析了DWC2主机模式的初始化、端口控制、通道管理、URB提交等核心功能。代码分析涵盖了控制传输、批量传输和中断传输的处理流程,包括FIFO配置、DMA设置、中断处理机制等关键技术细节。特别对控制传输的状态机转换(SETUP→DATA→STATUS)和各类错误处理(STALL、NAK、Babble等)进行了详细说明。文章适合USB协议栈开发者和嵌入式系统工程师参考,有助于深入理解USB主机控制器的底层实现原理。

ol78901234

rtt里将cherryusb的一个cdc设置成调试口

rtt里将cherryusb的一个cdc设置成调试口

嵌入式小宅宅

CherryUSB是一个小巧美观的便携式USB主机和设备堆栈,用于嵌入式系统与USB IP.zip

c语言

看海听风心情棒

rt-thread CherryUSB

该资源是在rt-thread上实现CherryUSB的CDC工程,是给刚开始学习CherryUSB的一个参考,该工程里除了rtt工程外还有一个CherryUSB自带的stm32h7的裸机demo工程,两个keil5工程需要用AC6编译,都在h743的板子上的得到验证,串口验证时记得勾选DTR

嵌入式小宅宅

cherryusb-acm-multi.zip

用cherryusb虚拟出四个cdc端口,适用于stm32h743/stm32h753

嵌入式小宅宅
评论 1
收藏 已收藏
分享
返回顶部