当前位置: 技术问答>linux和unix
USB驱动程序开发中,如何读取USB设备数据??
来源: 互联网 发布时间:2016-11-19
本文导语: 如题,最近在开发USB驱动,在该设备的读操作过程中,通过usb_bulk_msg()函数获取的返回错误码是-75??查询错误码表示USB接收的数据长度大于端点传输的最大值,怀疑USB设备或固件有问题。。。。。。。。。 ...
如题,最近在开发USB驱动,在该设备的读操作过程中,通过usb_bulk_msg()函数获取的返回错误码是-75??查询错误码表示USB接收的数据长度大于端点传输的最大值,怀疑USB设备或固件有问题。。。。。。。。。
随后使用该USB设备能够通过windows驱动能正常读取数据,说明USB设备硬件或固件没有问题。
找不到其中的原因,希望高手能够指点!!谢谢!!!!!能够提供其他的读USB设备驱动的方式,谢谢!!
随后使用该USB设备能够通过windows驱动能正常读取数据,说明USB设备硬件或固件没有问题。
找不到其中的原因,希望高手能够指点!!谢谢!!!!!能够提供其他的读USB设备驱动的方式,谢谢!!
|
把usb_bulk_msg的最后一个参数Timeout值设的大一点试一下,另外提醒下,usb_bulk_msg是阻塞的,也就是说你要读一定长度的数据,只有底层完全读到这些数据或者超时才会返回,如果在超时时间内设备未发送完全部的数据,那么此时返回err值,最简单的办法是加大Timeout值,最标准的做法是用usb_submit_urb异步方式提交URB包,效率比较高,Linux下的USB分层机制作的比较好,你可以看一下drivers/usb/serial下面就是最简单的主机侧串口驱动,里面基本上用的都是异步方式,看你帮定的应用是哪个应用Class对应看usb下面的代码
|
是不是你读取的通道配错了?譬如你想在EP1上收发数据,却配成了EP2,而事实上EP1的MPS是64,EP2的MPS是512?
|
我估计你用的是linux2.4的内核把,找个linux2.6的内核比较一下,就知道了。linux2.4下的好像有些问题