Wince上USB host 中U盘兼容性问题点滴
来源:互联网 发布:陕西广电网络网上缴费 编辑:程序博客网 时间:2024/05/17 19:58
我们现在使用的是sirfA4芯片做的产品,使用它的USB口用于U盘读播MP3和视频文件,之前发现USB口出现这样问题:有个次品U盘(标称容量16G,实际容量只有4G),在电脑上都能正常读写数据,没有什么问题,但是拿到我们机器上就出现插入U盘可以识别,但是会经常性的出现读数据失败,USB识别到断开的情况。
追踪程序发现读取Csw 长度为0,此时会重新初始化,造成USB disk重新枚举,但是怎么也不能再读到U盘的数据,只有重新拔插才能正常工作。偶然机会发现,在读U盘数据时如果没有运行其他程序,出错的几率会小很多,于是判断是对USB的响应中出现了中断去做其他事情造成不能及时相应,兼容性不好的U盘就会死机,所以出现问题,只要及时响应USB操作,应该能解决此问题。 最后在 disK.C中增加以下代码解决此问题:
case DISK_IOCTL_WRITE:
{
DEBUGMSG(ZONE_DSK_IOCTL, (TEXT("USBDISK6>DSK_IOControl>%s\r\n"),
(bRead ? TEXT("IOCTL_DISK_READ"):TEXT("IOCTL_DISK_WRITE"))));
// Sterilize the caller's SG_REQ.
if (!SterilizeIoRequest(
pDevice->pSterileIoRequest,
(PSG_REQ)pInBuf,
InBufLen)
) {
dwErr = ERROR_INVALID_PARAMETER;
break;
}
// If write, ensure that the device is not write-protected.
if (!bRead && pDevice->Flags.WriteProtect) {
dwErr = ERROR_WRITE_PROTECT;
break;
}
pDevice->Flags.MediumChanged = FALSE;
// Initiate I/O. Note that, to determine if ScsiRWSG succeeded,
// we are required to inspect the sr_status. It's safe to do so,
// because pSterileIoRequest is our safe copy of the caller's
// SG_REQ.
#if MXcompatible
dwThreadID = GetCurrentThread();
dwThreadPri = CeGetThreadPriority(dwThreadID);
dwThreadQuantum = CeGetThreadQuantum(dwThreadID);
CeSetThreadPriority(dwThreadID, 0);
CeSetThreadQuantum(dwThreadID, 0);
try
{
#endif
SafeBytesReturned = ScsiRWSG(
pDevice,
pDevice->pSterileIoRequest,
pDevice->Lun,
bRead
);
#if MXcompatible
}
except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
{
dwErr = pDevice->pSterileIoRequest->sr_status;
CeSetThreadQuantum(dwThreadID, dwThreadQuantum);
CeSetThreadPriority(dwThreadID, dwThreadPri);
break;
}
CeSetThreadQuantum(dwThreadID, dwThreadQuantum);
CeSetThreadPriority(dwThreadID, dwThreadPri);
#endif
- Wince上USB host 中U盘兼容性问题点滴
- Android USB Host U盘
- Android USB Host 使用详解(U盘)(一)
- Android USB Host 使用详解(U盘)(二)
- Android USB Host 使用详解(U盘)(三)
- Android USB Host 使用详解(U盘)
- 详解WinCE下USB Host驱动开发
- 详解WinCE下USB Host驱动开发
- WINCE对USB HOST供电的控制
- 详解WinCE下USB Host驱动开发
- 详解WinCE下USB Host驱动开发
- 详解WinCE下USB Host驱动开发
- WINCE对USB HOST供电的控制
- 详解WinCE下USB Host驱动开发
- USB学习总结2—USB host设备驱动实现(U盘、鼠标)
- 详解WinCE下USB Host驱动开发(1)
- 详解WinCE下USB Host驱动开发(2)
- 详解WinCE下USB Host驱动开发(1)
- 国家软考与计算机等级考试有什么区别,哪个更有用?
- Android网络通信的六种方式
- libQtCore.so.4 undefined symbol :g_main_context_push_thread_default
- Android多线程问题
- A C&&http://acm.hdu.edu.cn/showproblem.php?pid=1570
- Wince上USB host 中U盘兼容性问题点滴
- apache 日志按天分割归档
- 大数据量高并发的数据库优化
- 学术常识—EMD(earth mover distance)距离
- Spring + Mybatis + Struts2 整合时出现的问题
- 猜拳游戏
- 打印杨辉三角
- 微软新孵化项目Bing Fund:能否告别“衰退”10年?
- Android学习笔记之AndroidManifest.xml文件