EDN首页   博客首页

日志档案

发表于 2008-3-11 14:52:06

6

标签: 无标签

DS3.2开发USB驱动时SubmitUrb一个输入URB蓝屏问题的解决

在使用DS3.2开发USB PDIUSBD12的驱动程序时,使用DS的
向导自动生成驱动后,添加发送数据相关代码后,测试发
送数据成功。继续增加读数据相关代码,使用最简单的同步
调用,结果出现蓝屏……反复查看代码,不管是使用buffere
d模式还是direct模式,设置成异步调用并设置完成例程,
结果还是蓝屏依旧...在经过无数次的修改代码、蓝屏之后,
人都快崩溃了...看别人的驱动以及DS自带的例子中都是这样
做的呀,看来问题不在这里。找到代码中的设备构造函数
Computer00USBDevice::Computer00USBDevice,发现原来是
DS向导生成的代码SB了...

本来应该是
    // Initialize each Pipe object
    m_Endpoint1In.Initialize(m_Lower, 0x81, 16);   
    m_Endpoint1Out.Initialize(m_Lower, 1, 16);   
    m_Endpoint2In.Initialize(m_Lower, 0x82, 64);   
    m_Endpoint2Out.Initialize(m_Lower, 2, 64);   

而向导自动生成的代码在0x81和0x82前面都漏掉了0x,
变成十进制的了,我倒塌...

结果就是两个输出端点可以正常工作,而一旦对输入端点
操作时,就导致系统蓝屏了...

将代码改正过来,再测试,系统不再蓝屏,而且也可以
正常从设备读取到数据了。

另外,如果应用程序提供的缓冲区比实际返回的数据
长度少时,就会读不到数据,并且以后再使用足够长度
的缓冲区去读时也还是读不到。需要将设备停用后重新启用
才能重新读到数据。所以应用程序应该提供足够大的缓冲区
(例如端点的最大数据包长度)去读数据。

              Computer00 2008.03.11

系统分类: 软件开发   |   用户分类: WDM驱动开发   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(1105)    回复(10)  

投一票您将和博主都有获奖机会!

最新评论

  • andyzhu9

    2008-3-12 11:29:43

    圈圈老大,可否将你的这个示例share一下,我的mail是andyzhu129@yahoo.com.cn 因为最近我也在用DS3.2生成了一个驱动去控制你的USB键盘的示例,以便可以控制上面的LED灯,无奈发送数据无效。 我是改注册表来安装这个驱动的,主要是改了service的键值,不知道问题是否出在安装部分还是驱动本身有问题。 帮忙答疑解惑,不胜感激!!!

  • andyzhu9

    2008-3-12 11:37:35

    另外,我也是用端点的最大数据包长度去写数据的。

  • computer00

    2008-3-13 0:39:33

    呵呵,楼上这位朋友请稍等几天,我现在已经将这个驱动程序做好了,现在正在写应用程序。我的应用程序现在已经可以控制我的EDN USB板上的LED,也可以显示板上开关的状态,这两个操作是通过端点1的中断输入和输出实现的。我现在正在完成端点2的批量输出和输入功能,类似USB转串口,发送的数据从串口发送出去,读数据时取走串口接收到的数据。目前正在写代码,等我将代码写好,并测试通过后,我会一并将USB板的固件部分、驱动程序、驱动程序源代码、应用程序、应用程序源代码等分别发上来,到时就有得玩了~~~

  • andyzhu9

    2008-3-13 9:09:16

    Thank you very much!!! 这下有得玩了。 其实我也试过直接用ReadFile和WriteFile来控制HID设备,也的确成功了。 但是HID设备驱动是微软写的,我就想知道一下深层次的原理,更想知道Bulk和ISO传输在驱动里面的细节。 认识你很高兴,期待你早日发出这个示例...

  • computer00

    2008-3-13 13:20:10

    bulk和ISO的细节我也没搞清楚,呵呵,因为我是直接用DS开发的,DS帮我们封装了很多类,我直接调用类的函数即可。例如bulk传输,我只需要调用创建bulk传输的URB,然后再提交这个URB即可,操作系统的底层USB总线驱动会处理这个URB,将数据发到USB总线或者从总线上读数据。

  • andyzhu9

    2008-3-14 8:16:10

    呵呵, thank you, 发得真够快的!!!

  • 329201998

    2008-5-20 16:00:11

    给我也发个好吗chenwubin163@163.com,谢谢了

  • computer00

    2008-5-20 17:11:36

    我都上传了呀,你直接来这里下载: http://blog.ednchina.com/computer00/21772/category.aspx

  • rain14305

    2008-9-1 21:29:47

    你好,圈圈,从你提供的资料我学到了很多东西,最近用你提供的原理图和固件程序做了一个AT89C52+PDIUSBD12与PC机通信的USB板子,现在通过调试已经枚举成功了,但当我从PC机通过端点1给USB发数据数时,从中断寄存器中读到的不是0X04的数据,这是怎么回事啊,能帮忙解决一下不,谢谢啦,我的邮箱是rain14305@yahoo.com.cn

  • computer00

    2008-9-1 23:11:39

    发送数据时中断是否产生了?我的程序是可以正常运行的。