之前发了个帖子吐槽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,可惜碰上了不靠谱的手册和代码版本管理,让开发者不敢使用
|
|