完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
硬件:NUC505官方开发板
软件:BSP包3.02 例程:USBD Mass Storage SD 在官方例程上仅做如下修改,新增TMR0定时器,以PERIODIC周期模式工作,频率10000Hz。TMR0的中断处理函数什么都不做,仅给一个全局变量tickCount++ 该例程就立即不能工作了!主机不能识别MassStorage。 wireshark抓usb包分析发现,HOST发出的READ命令收到的回复报文异常。 例如主机请求read 长度65536,nuc505只回复了 65523,少了13个字节! 还有很多种异常的可能性,我上面的例如只是其中一种。 最终发现数据包异常的表现其实就是数据包被莫名其妙打散或粘连了。 下面我通过串口打印USB包的TAG和DMA请求传输数据的长度,以及时间戳 read命令回复的数据,DMA请求是正确的,有16个0x1000长度的DMA提交,和一个CSW回复报文 主机上wireshark抓到的回复被打散了。 是一个539 和一个 65064字节 这样两个USB报文 正确的回应包应该是 65563字节的read返回数据,和一个40字节的 CSW 回复 而 539+65064 = 65603 65563 + 40 = 65603 很明显 数据包被莫名其妙打散,和粘连了。 这是为什么,怎么解决呢? |
|
相关推荐
1个回答
|
|
这个问题可能由于TMR0定时器中断与DMA传输冲突导致。当TMR0中断触发时,如果DMA传输仍在进行中,可能会造成DMA传输的数据丢失或错乱。
解决方法: 1. 禁用TMR0定时器中断,在进行DMA传输期间不使用定时器中断。 2. 在定时器中断处理函数中增加延时等待的代码,等待DMA传输完成后再进行操作。 3. 调整TMR0定时器的中断优先级和DMA通道的优先级,确保DMA传输不会被定时器中断打断。 |
|
|
|
只有小组成员才能发言,加入小组>>
880 浏览 1 评论
2277 浏览 5 评论
2588 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2396 浏览 6 评论
2295 浏览 7 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
444浏览 9评论
453浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
559浏览 6评论
434浏览 5评论
468浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-16 17:12 , Processed in 0.838337 second(s), Total 46, Slave 37 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号