打印
[STM32F4]

STM32F407的USB主机通信问题,原子都说坑

[复制链接]
6319|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
奇立电源|  楼主 | 2019-5-7 01:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在做STM32F407的USB通信,遇到了一些问题,插入设备后,可以检测到设备插入,也可以获取到设备的设备描述符、配置描述符、接口描述符等,在运行到HOST_CLASS_REQUEST状态后程序卡死在了\Libraries\STM32_USB_HOST_Library\Core\src\usbh_core.c 的第607行的case :CTRL_SETUP_WAIT里面。程序在反复调用这个函数后URB_Status = HCD_GetURB_State(pdev , phost->Control.hc_num_out);
总是得到URB_IDLE状态,而不是URB_DONE状态。但是通过另外一块STM32F405与设备通信,通信完全正常,两块开发板的USB引脚都是PA11、PA12,但是不知道F407为什么就是不行。已经调试好几天了,没有任何进展,希望大家可以帮帮忙,非常感谢!
       以上是转载的问题,和我现在遇到的一模一样,但我的是随机性的,网上很多人反映这个问题,一直没有官方出来给个说法,原子的方案是做个超时重新枚举,枚举成功后单向通讯(只接收键码)基本不出问题了,但发送不行,比如发个指令给键盘亮灯。随机死。测试一百次以内,绝对死。。严重怀疑st的东西没做老化就上市了


使用特权

评论回复
沙发
奇立电源|  楼主 | 2019-5-7 01:36 | 只看该作者
期间也怀疑是PCB 问题,改过一次板还做了D+D-阻坑匹配,电源改射频专用LDO问题依旧

使用特权

评论回复
板凳
caoenq| | 2019-5-7 08:33 | 只看该作者
之前也用到407的USB,我是用HAL库做的,没遇到楼主说的问题。

使用特权

评论回复
地板
奇立电源|  楼主 | 2019-5-7 12:17 | 只看该作者
caoenq 发表于 2019-5-7 08:33
之前也用到407的USB,我是用HAL库做的,没遇到楼主说的问题。

请问你是做主机还是做设备,做主机发数据会偶尔卡死,随机性的问题

使用特权

评论回复
5
hyf811004| | 2019-5-7 20:54 | 只看该作者
用407做过全速USB 转CAN  ,未发现有问题

使用特权

评论回复
6
奇立电源|  楼主 | 2019-5-7 21:43 | 只看该作者
hyf811004 发表于 2019-5-7 20:54
用407做过全速USB 转CAN  ,未发现有问题

https://www.amobbs.com/forum.php?mobile=2&mod=viewthread&tid=5507845

使用特权

评论回复
7
奇立电源|  楼主 | 2019-5-7 21:44 | 只看该作者
这个问题很多人遇到了,我收集一下

使用特权

评论回复
8
奇立电源|  楼主 | 2019-5-7 21:51 | 只看该作者
http://www.openedv.com/forum.php?mod=viewthread&tid=44534&page=1#pid746661这是原子论坛的帖子,实测末解决

使用特权

评论回复
9
caoenq| | 2019-5-8 08:16 | 只看该作者
奇立电源 发表于 2019-5-7 12:17
请问你是做主机还是做设备,做主机发数据会偶尔卡死,随机性的问题

做的host。

使用特权

评论回复
10
xtoolbox| | 2019-5-8 09:44 | 只看该作者
你遇到的是控制传输遇到NAK后的回退时机问题,ST的主机库只是一个演示用的DEMO,没有考虑如何回退,回退到哪一步,所以死在了里面。
如果要在这个库的基础上做修改,可以根据设备速率调整包重传频率。比如当Setup Out从机回复NAK时,不要立即重传,等到下一个SOF再传。

ST为了在没有OS的环境下使用USB主机,主机栈采用的多重状态机架构很难扩展和维护,这些修补都是治标不治本
如果需要兼容性良好的主机,可以使用商用协议栈,如Segger的那个
我也正打算在rt thread的主机栈基础上重写ST的主机协议栈,目的就是提高兼容性和解决现在HAL主机栈的BUG
代码在 code.tusb.org

使用特权

评论回复
11
奇立电源|  楼主 | 2019-5-8 19:38 | 只看该作者
xtoolbox 发表于 2019-5-8 09:44
你遇到的是控制传输遇到NAK后的回退时机问题,ST的主机库只是一个演示用的DEMO,没有考虑如何回退,回退到 ...

还是st的库不完善,修改起来也是大工程,时间周期人力成本又上来了,还未毕搞得好。所以还是实实在在换方案

使用特权

评论回复
12
奇立电源|  楼主 | 2019-5-12 00:47 | 只看该作者
调了几天有进展了,中断标志位错乱引起的,在主机挂起中断有两个分支一个in中断,一个out中断。调试发现枚举不成功时这两个中断时序刚好是反的

使用特权

评论回复
13
BUCK7| | 2019-7-12 14:01 | 只看该作者
本帖最后由 BUCK7 于 2019-7-12 14:03 编辑

调试过程中,也质疑后st的库及硬件的问题。
最后还是搞定了,分享几个点可以参考下:
        1. 硬件:USB(vcc,d-,d+,gnd) 直接连接,无Vbus限流
        2. 可获取部分设备描述符-更换读卡器解决
        3. 设备描述符信息不完整及设备驱动初始化时间长-单独USB供电解决
        4. SD卡f_open操作失败-文件系统格式为NTFS(Windows 文件系统的格式)->修改格式为FAT32解决(FAT16文件系统格式,测试OK)

使用特权

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

本版积分规则

28

主题

100

帖子

7

粉丝