阅读:2327回复:6
usb驱动开发感受(胡诌几句,抛砖引玉!)
到今天,也就是刚才19点,6月6号为止,usb产品总算有了点眉 目了!
有些体会,也可说是困惑,说出来想和大家讨论! 首先说明,我是第一次开发驱动程序,因此水平有限啊!有些问题可能肤浅啊,望大虾,高手们包涵!并希望能够指点迷津啊! 呵呵 总的来说,usb设备给我的感觉太脆弱! 我的usb设备使用USBN9603,有6个endpoint,设备端只实现对两个endpoint(这两个断点有64字节)的读写操作。(bulk方式的。(具体我不清楚下面是怎么做的,由其他同事负责的。) 我的驱动程序中自定义IOCTLs 控制代码,以实现对上述两个endpoint对应的pipe 进行读写操作。 驱动开发完后,对设备的配置等都很正常! 但到真正让驱动和设备干点正事的时候,麻烦来了!一句话:读写的结果都不是自己预期希望得到的。 出现了以下几个现象: 第一种情况, 递交给下层bus driver的urb 能够被处理,但urb的status code不对。主要有这些返回码 1。USBD_STATUS_DEV_NOT_RESPONDING (0xc0000005L) 照字面的意思,好象是下面的设备没有反应,那么到底是什 么 因会导致这种情况的发生呢? 2。USBD_STATUS_DATA_UNDERRUN (0xc0000009L) 这又是什么意思,怎么产生的?该怎么解决? 3。USBD_STATUS_BUFFER_OVERRUN (0xCOOOOOOCL) 这个呢? 4,出现上面情况后,紧跟着可能出现的URB status code 是 USBD_STATUS_ENDPOINT_HALTED (0xC0000030L) 这是端点停止的情况,一般在什么时候,在程序的什么地方 对它进行处理呢? 第二种情况是bus driver 一直处理递交给她的URB 不返回,在递交URB 前初始化了一个event ,但一直在等待 KeWaitForSingleObject(...); 遇到这种现象,驱动该如何处理? 另外,是不是USB 芯片是不是已经自动实现了对12种标准命令的处理? 还是自己编firmware 来实现? URB_FUNCTION_SELECT_CONFIGURATION URB_FUNCTION_SELECT_INTERFACE URB_FUNCTION_ABORT_PIPE URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL URB_FUNCTION_GET_FRAME_LENGTH URB_FUNCTION_SET_FRAME_LENGTH URB_FUNCTION_GET_CURRENT_FRAME_NUMBER URB_FUNCTION_CONTROL_TRANSFER URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER URB_FUNCTION_ISOCH_TRANSFER URB_FUNCTION_RESET_PIPE 不好意思! 望大家发表意见啊。 共同努力,共同提高。 |
|
最新喜欢:![]() |
沙发#
发布于:2002-06-07 16:28
to shlei20
你好,我正要用USBN9603做个USB通讯的小设备,能否把你的硬件图给我寄一份。 gladiola_jt@sohu.com 谢谢 |
|
板凳#
发布于:2002-06-07 10:05
你们开发了个什么产品啊,怎么这么长时间??
|
|
|
地板#
发布于:2002-06-06 22:55
你的公司就这样吗?
对不起,我说话有点直,但事实真如你所说的话,努力学习吧,弄个技术骨干很容易。 |
|
地下室#
发布于:2002-06-06 21:51
4 个月了啊。本以为驱动编完,固件写完就万事ok,了,没想到调试中出现这么多问题!
到现在也不能说真正完成。 |
|
6楼#
发布于:2002-06-06 20:12
不错,以后继续
|
|
|