电子说
我用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);
}
全部0条评论
快来发表一下你的评论吧 !