我用U盤導出數據,現象是第一次導出成功,不拔出U盤的情況下,直接導出第二次失敗,之后的每一次都失敗。拔出U盤后重新插入,仍是第一次正常,之后每一次失敗。
查到是drv_usbh.c文件中的drv_pipe_xfer()函數,NAK死循環。
1、增加了NAK后重試的代碼
論壇中其他方法效果不明顯,還是會NAK。
if (++retry_times >= 100)
{
return -2;
}
continue;
2、增加延時
打開RT_DEBUG_USB后發現,U盤讀寫正常了,但是枚舉有時不正確,概率大概是插入5次,會有1次枚舉不成功。
所以在rt_usb_hcd_pipe_xfer()函數內打印處增加延時,關閉RT_DEBUG_USB后,讀寫、枚舉全部正常。
RT_DEBUG_LOG(RT_DEBUG_USB,("pipe transform remain size,: %dn", remain_size));
if (!RT_DEBUG_USB)
{
rt_thread_mdelay(5);
}
-
USB接口
+關注
關注
9文章
705瀏覽量
56733 -
DRV
+關注
關注
0文章
18瀏覽量
20796 -
DEBUG
+關注
關注
3文章
94瀏覽量
20413 -
RT-Thread
+關注
關注
32文章
1375瀏覽量
41595
發布評論請先 登錄
評論