打印
[STM32F1]

STM32 USB host 枚举过程出现TXERR 请香水城版主帮忙

[复制链接]
2194|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aguo1223|  楼主 | 2015-6-25 20:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人在做U盘升级程序, 用的是USB IAP程序 (STM32F105_107_AN3354_FW_V1.0.0)

在读优盘枚举过程中 进到如下中断中,察看datasheet 说是发生如下错误:CRC校验失败/超时/位填充错误/EOP失败
请问有哪些原因导致发生该错误呢?

uint32_t USB_OTG_USBH_handle_hc_n_Out_ISR (USB_OTG_CORE_HANDLE *pdev , uint32_t num)
{
  
  USB_OTG_HCINTn_TypeDef     hcint;
  USB_OTG_HCGINTMSK_TypeDef  hcintmsk;
  USB_OTG_HC_REGS *hcreg;
  USB_OTG_HCCHAR_TypeDef     hcchar;
                                                                                                                     
  hcreg = pdev->regs.HC_REGS[num];                                            
  hcint.d32 = USB_OTG_READ_REG32(&hcreg->HCINT);                    
  hcintmsk.d32 = USB_OTG_READ_REG32(&hcreg->HCGINTMSK);
  hcint.d32 = hcint.d32 & hcintmsk.d32;                                         
  ...                                               
  else if (hcint.b.xfercompl)
  { 正常应该进到这里}
  else if (hcint.b.xacterr)
  { 但是却进到这里}
}
沙发
香水城| | 2015-7-23 16:45 | 只看该作者
xacterr:传输错误,手册上列举了可能的原因:CRC校验失败/超时/位填充错误/EOP失败

1. CRC校验失败:令牌包和数据包都有CRC校验位域。如果总线噪声影响,会造成数据包被破坏,那么CRC校验会失败。但是这是发生在主机的OUT通道上的。那么令牌包和数据包都是主机发出去的,即时有包受损,也应该是在U盘接收方检测出CRC错误。

2. 超时:因为主机OUT通道上发生的transaction是由三部分组成:主机发出的令牌包, 主机发出的数据包,主机收到的应答包。有可能U盘没有即时回复应答包,造成超时错误。这种情况,用USB协议分析仪就可以清楚看到。

3. 位填充:这种一般也是环境干扰造成

4. false EOP:通常也是噪声的影响,使得包的接收方错误的判断成一个EOP(end of packet)。

使用特权

评论回复
板凳
南海渔歌| | 2015-7-23 16:53 | 只看该作者
我用的也是ST的这个例程,但移植到F105RB的板子上了,枚举正确,但在建立文件系统工作区时却不成功。  这个例程的文件系统是最古老版本的,基本看不懂,要命啊!

使用特权

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

本版积分规则

2

主题

7

帖子

0

粉丝