打印
[APM32F4]

记录一次糟心的USB调试经历

[复制链接]
671|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
座机呀|  楼主 | 2025-3-26 10:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
之前发了个帖子吐槽USB库的包含关系
中途来回对比"APM32_USB_SDK_v1.1"和"APM32F4xx_SDK_V1.4"里面的USB相关代码
发现极海的代码版本管理非常糟糕,简直是灾难级别,有兴趣的可以自己看下代码体会下
后面硬着头皮啃了,逐个文件对比同步改动,最后跑通了HS的CDC范例,同时把代码里面藏着的printf和malloc,free替换成了rtthread的对应函数
这下才像个样子了.

但是高兴的太早了,简单过了一边高速USB的CDC类,以为差不多了,没想到后续一个大坑等着我

准备用高速USB做个HID加CDC加MSC的复合设备,去例程包里翻,没找到HS的全是FS的

于是自己动手丰衣足食,简单调整一下代码,改一下中断入口,枚举成功,然后再测试一下CDC的收发,问题就来了,只能收不能发???

接着上Wireshark监测包传输,发现本该有的IN包没有抓到,猜测可能是中断,端点配置不对

没事再接着上调试器,对照应用手册一路Debug,各种检查,有点眉目

发现手册上说需要为每个有效的端点配置TXFIFO,然后检查范例,FS下的复合设备确实多了些配置TXFIFO的语句
那么问题就来了,我自己配置的话,应该配置多少,有没有上限,多个端点怎么分配,想从手册找答案,<通篇找不到USB的FIFO任何描述>


接着我试着去看官网的应用笔记,初步看了下,没什么帮助,感觉和代码都对不上,这就放弃了?


最后想起手册上说默认上电的时候端点FIFO寄存器有个复位值,于是上电检查这个复位值,初步推断FIFO大小总共为8K,由RX,TX共享,单个TX最大是1024?
但是代码里给了一个很奇怪的值:372???不纠结了,马上给生效的IN端点补上这个定义,这下CDC终于能正常收发了

说到底就是一个TXFIFO配置的问题,但是定位到这里费大劲,尤其是第一次使用极海芯片的情况下

各家的高速USBIP设计的都大差不差,都那么几个模块组成,怎么别家的手册就会详细描述时钟,中断,FIFO,DMA配置,极海的就上来就摆寄存器列表
代码突出个抽象向ST的HAL层靠拢,手册描述又向炼丹炉STC靠拢,这怎么配合???

虽然调试单片机就好这个抽丝剥茧,一点一点接近真相,这次运气好表面上解决了问题,但是没有文档可以求证,用这个芯片也没底

总体这个F407VG芯片不错,资源足够,还带高速phy,可惜碰上了不靠谱的手册和代码版本管理,让开发者不敢使用


使用特权

评论回复
沙发
Gfan| | 2025-3-26 13:44 | 只看该作者
感谢您提出的宝贵建议,后续我们将针对您提及的几个问题进行改善和优化。

使用特权

评论回复
板凳
xionghaoyun| | 2025-3-26 14:38 | 只看该作者
Gfan 发表于 2025-3-26 13:44
感谢您提出的宝贵建议,后续我们将针对您提及的几个问题进行改善和优化。 ...

捕捉版主

使用特权

评论回复
地板
心跳回响| | 2025-3-26 15:28 | 只看该作者
各家在初期都会出现的问题。
还好,版主虚心接受,积极改正。我估计待我使用的时候,SDK一定更新成最佳状态了

使用特权

评论回复
5
座机呀|  楼主 | 2025-3-26 16:12 | 只看该作者
高速phy CDC+HID复合设备 仅供参考

Monkey.zip

7.44 MB

zip修改为7z后解压

使用特权

评论回复
6
Gfan| | 2025-3-26 16:51 | 只看该作者
心跳回响 发表于 2025-3-26 15:28
各家在初期都会出现的问题。
还好,版主虚心接受,积极改正。我估计待我使用的时候,SDK一定更新成最佳状态 ...

必须的,非常感谢各位工程师们的建议,我们也会不断优化进步,这也是我们在论坛的动力之一

使用特权

评论回复
7
海洋凝视| | 2025-3-26 20:18 | 只看该作者
前几年咱们一个知名的国际大厂,他们提供的USB驱动库也是有bug的。我还曾经在线下技术分享的时候咨询过,但他们居然不正面回应!

使用特权

评论回复
8
座机呀|  楼主 | 2025-3-26 21:33 | 只看该作者
海洋凝视 发表于 2025-3-26 20:18
前几年咱们一个知名的国际大厂,他们提供的USB驱动库也是有bug的。我还曾经在线下技术分享的时候咨询过,但 ...

我并不是说有bug,有bug再正常不过了,其实直接跑例子,功能是正常的,不然也不可能发布出来,只是项目开发不可能仅仅停留在跑通例子的地步.
软硬件bug还能有规避的措施,但是文档的缺失和版本管理没到位的话,给人的感觉就是半成品
虽然国产半导体不乏类似的企业,但我感觉极海不是这种类型

比如W801这颗芯片,他的SDK写的就真的是到处埋雷

使用特权

评论回复
9
jobszheng| | 2025-3-27 10:09 | 只看该作者
我也是一名芯片设计研发人员。
我们的文档书写的也是一言难尽。
借楼主的话共勉,把事情不仅要做好,而且要做精。

使用特权

评论回复
10
海洋凝视| | 2025-3-27 10:21 | 只看该作者
我在和我的团队人员说的时候,可以先使用SDK来编写程序,如果跑通要对照手册核对一下寄存器。
如果不通,也要对照手册核对一下寄存器。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

165

帖子

1

粉丝