数据OUT方式为:PC->MCU ram->SD卡。由于资源限制,ram不能开太大,所以给PC过来的数据开的ram最大是2k,而传很大数据的时候(M以上)win7会一次发64k的数据,所以只能每次拿2k放ram,等SDIO写完2k的数据后再通过USB从上位机取,直到发完这64k数据后再发csw。传输速度最大为170k左右。
我遇到的问题是:传大数据时候,有时候出现传到一段时间,没传完,进度条就不走了,然后发现PC发过来的CBW的datalength域和对应scsi命令一直都为0,就好像数据已经传完了一样。但是PC机的进度条一直停在那里。
我自己觉得的可能性:因为MCU往SD卡写的时候是DMA在搬数据,而DMA搬数据的速度太慢,拖了整个速度,使得PC老收到NAK,如果超过了一定时间(spec里貌似有这个值),就会取消IRP。我观察那个进度条是好几秒(但不超过10s)往前走一次。
请教各种大神,到底是啥情况,费解啊? |