完善资料让更多小伙伴认识你,还能领取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传输不会被定时器中断打断。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
1064 浏览 1 评论
1885 浏览 0 评论
1865 浏览 1 评论
3286 浏览 5 评论
3614 浏览 9 评论
1067浏览 1评论
如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况?
1393浏览 1评论
1887浏览 0评论
1208浏览 0评论
1340浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-12 03:28 , Processed in 0.517018 second(s), Total 46, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2158