硬件: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
很明显
数据包被莫名其妙打散,和粘连了。
这是为什么,怎么解决呢?