打印
[STM32F0]

stm32f072 usb 双缓冲 bug

[复制链接]
1435|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
acguy|  楼主 | 2015-8-4 07:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码如下:
    _SetEPAddress(rx_ep, rx_ep);
    _SetEPType(rx_ep, EP_BULK);
    _SetEPDoubleBuff(rx_ep);
    _SetEPDblBuffCount(rx_ep, EP_DBUF_OUT, 64);
    _SetEPDblBuffAddr(rx_ep, EP_DBL0_ADDRESS(rx_ep), EP_DBL1_ADDRESS(rx_ep));

    _ClearDTOG_RX(rx_ep);
    _ClearDTOG_TX(rx_ep);
    _ToggleDTOG_TX(rx_ep);
    _SetEPRxStatus(rx_ep, EP_RX_VALID);
根据ST文档,第1个事务完成后,双缓冲的机制开始应用,第2个事务的令牌包到达后,硬件检查硬件缓冲区与用户缓冲区是否冲突,如果冲突就设置NAK状态。
那么,当第1个包收到后,位于缓冲区0中,硬件缓冲区自动切换为缓冲区1,如果用户程序不翻转用户缓冲区,第2个包到达时,就会发生冲突,所以第2个包应该收不到。

但是实际测试却不是这样,用户程序不翻转用户缓冲区,硬件却收到3个包,分别位于缓冲区0, 1, 0,第3个包后,硬件缓冲区重新回到了1,此时方才因为冲突报NAK。
总结:DBL_BUF启用后,第1个冲突不报告。第2个冲突及以后就正常了。
评分
参与人数 1威望 +5 收起 理由
mmuuss586 + 5 赞一个!
沙发
mmuuss586| | 2015-8-4 09:06 | 只看该作者

谢谢分享;

使用特权

评论回复
板凳
冰河w| | 2015-8-4 09:07 | 只看该作者
DBL_BUF启用后,第1个冲突不报告

使用特权

评论回复
地板
acguy|  楼主 | 2015-8-4 13:16 | 只看该作者
有人能解决么?

使用特权

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

本版积分规则

15

主题

203

帖子

1

粉丝