usb audio设备的数据读入问题

我现在做一个类似usb Microphone的驱动。
可是在接收完成callback函数里用usbd_urb_status获取URB的状态,发现urb状态是USBD_STATUS_CMP_ERR,usbd_urb_status的返回值是5(EIO)。
我是在完成insertion后,使用创建好的同步传输pipe进行数据接收的。
urb的设置如下,
usbd_setup_isochronous( urb, URB_DIR_IN|URB_ISOCH_ASAP|URB_SHORT_XFER_OK,0,rbuf,rsize);

谁知道是怎么回事啊,是不是在进行Audio数据接收之前需要进行Audio的某些Control设置a,还是我的URB参数设置有问题
(注;我的传输管道和接收BUFFER的创建没有问题)



另外再问一个关于usbd_select_config的使用问题;
因为insetion函数是以interface为单位进行调用的,那么现在有个复合设备.是在每个设备的流interface的insertion函数里都进行一次usbd_select_config?还是所有的只进行一次usbd_select_config?如果都进行一次会有什么影响?

只是尝试过ISO传输的驱动,提供一下参考。。。

帖子http://www.openqnx.com/chinese/viewtopic.php?t=2177里面那个朋友和你的错误相似的样子,不知道我发的那个驱动的步骤有没有用。。。

ISO传输的话,设备端的响应时间需要设置,也就是 endpoint 描述符的 bInterval 字节需要设置,这个应该是主机查询 USB 设备的周期,即 polling time。
High speed 下的计算公式为: 125us2^(n-1)
Full/Low speed 下的计算公式为: 1ms
n
(n 为该字节的数值)
如果你的设备端需要自己写程序的话,这个的设置也是需要的。

希望对你有帮助。 :slight_smile:

你好,谢谢你的回帖。那个连接我看了,步骤我没少。
USB设备已经固定好了,我只是做主机端的,bInterval 位还需要设置吗,另外怎么设置他啊(Request控制里好像没这个)

那个是设备端的 USB controller 在刚连接到主机,枚举( enumerate )的时候,根据程序而定的。

简单地说就是在设备端的程序里设定。