分页: 1 / 1

大侠帮帮忙,usbd_urb_status()urb状态检测发生错误

发表于 : 周四 6月 11, 2009 4:14 pm
zhangshuyuan
请教各位大侠们
前提:QNX下USB复合设备的驱动程序的开发
操作:在PC上插入USB复合设备
现在我想通过urb从复合设备上接收Audio数据,接收数据的前提是查看urb的状态,
使用的函数是:usbd_urb_status(urb, &ustatus, &receive_len),ustatus中获取的就是urb的状态,进行下面的检查:
①查看ustatus的结果是USBD_STATUS_CMP_ERR(The operation is complete, but an error occurred),正常的ustatus是USBD_STATUS_CMP
②查看函数的返回值,返回值是EIO(I/O error)
请问各位大侠们: 发生EIO错误的可能原因有哪些?
注:个人分析了一下,可能是数据传输的过程中发生的错误,跟数据源应该没有什么关系,不知道是不是这样,如果是数据传输发生错误,那么一般是哪些错误呢?希望大侠们帮帮忙

发表于 : 周五 6月 12, 2009 7:49 am
iNFINITE
高手都不在的样子。。。
我也刚搞QNX下的USB驱动1,2个月,回答错误的话还请包涵。

USB驱动最基本的步骤如下:(翻译自Jan Axelson的《USB complete》)

1。使用函数 usbd_connect( ) 连接到USB stack,并同时提供 insertion( )和removal( ) 两个回调函数。
2。在 insertion( ) 里面:
A。使用函数 usbd_attach( ) 连接到 USB 设备
B。使用函数 usbd_descriptor( )得到描述符
C。使用函数 usbd_select_config( ) 和 usbd_select_interface( ) 选择 USB设备的 configuration 和 interface
D。使用函数 usbd_open_pipe( ) 连接 pipe
3。在 removal( ) 里面,使用函数 usbd_detach( ) 摘除设备
4。使用函数系列 usbd_setup_*( ) 建立数据传输方式(bulk/interrupt/iso/control 里面选)
5。使用函数 usbd_io( ) 开始传输数据


根据描述,你的程序好像没有第1步。。。