阅读:4381回复:3
usb bulkin错误请教
BulkIn采用完成函数来读取数据
如果在未开机前将设备插入USB插槽,然后启动计算机,驱动加载,则总是出现错误。第一次的错误是USBD_STATUS_XACT_ERROR(c0000011),之后的错误全部都是USBD_STATUS_BABBLED_DETECTED 奇怪的是,如果先启动计算机,再将设备插入,加载驱动,则一切OK 不知哪位仁兄还碰到过,请指教 |
|
沙发#
发布于:2007-08-24 01:34
问题解决了,固件的bug
当随着计算机一起启动时,2.0的控制器枚举时,固件没有返回描述符,可固件却按照2.0来操作,BulkIn最大包长512;而驱动得到的信息则是1.1版本。因此驱动一进行bulkin就产生C0000012 |
|
板凳#
发布于:2007-08-24 09:44
引用第1楼rangzh于2007-08-24 01:34发表的 : 没有明白你的问题原因所在. 能否说得更清楚些. |
|
|
地板#
发布于:2007-08-24 18:04
引用第2楼lejianz于2007-08-24 09:44发表的 : 问题是这样的,一个USB设备:
为了确认是固件还是驱动的问题,就第一种情况做了几个测试:
大致可说明问题跟驱动无关,在驱动运行前下面的设备已经有问题。 出现的BulkIN错误为USBD_STATUS_BABBLE_DETECTED,google了一下,开始时不甚明白网上的说法。 用BUS hound抓了一下,发现出错情况下报告上来的设备描述符版本是1.1;而跟踪固件,发现固件里面却当成是高速设备(2.0) 错误的原因在于固件代码的一个bug: 固件里面维护了一个全局的描述符表,初始化成为2.0。但是在主机读取设备描述符时,固件会根据硬件的一个设备状态寄存器判断是1.1还是2.0;如果是1.1,则把那张全局描述符表改成1.1版的描述符,而如果是2.0,固件却认为默认值就是2.0,所以不用改了。 当设备在主机启动前插入时,大概BIOS会枚举一次,读描述符,此时固件修改全局描述符表为1.1;而Windows起来时,2.0的HC又读描述符,此时虽然固件根据设备状态寄存器判断出是2.0,但是因为全局描述符表已经改成了1.1版的,所以返回的还是1.1的描述符表。如此导致驱动认为设备是1.1,而固件则按照高速设备操作,问题产生。 |
|