chaijih
驱动牛犊
驱动牛犊
  • 注册日期2003-05-22
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1693回复:6

usb枚举结束,找到硬件并提示安装驱动,但?

楼主#
更多 发布于:2003-06-13 09:07
usb枚举结束,找到硬件并提示安装驱动,但是设备却不知该进入何种状态,请问这时firmware 应做什么工作,怎样和usb驱动程序通信呢?usb设备驱动完成什么功能呢,和设备硬件及firmware关联如何?是不是按照我特定的应用(上传数据给PC)所特制的,别人的例程不能直接使用吧?它和用户应用程序间的通信如何实现,好迷茫呀!哪位高手指教?

最新喜欢:

eyeszhueyeszh...
hanfuxu
驱动牛犊
驱动牛犊
  • 注册日期2001-07-14
  • 最后登录2009-01-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-21 11:41
你的固件中应该初始化你的设备,开好需要的管道,处理好下位机的数据。
之后在应用层打开设备驱动后,用DeviceIoControl和需要的管道通信!
别忘了在驱动中将固件下载到下位机(如果需要的话)!
zsw79923
驱动牛犊
驱动牛犊
  • 注册日期2002-11-15
  • 最后登录2009-11-05
  • 粉丝1
  • 关注1
  • 积分2分
  • 威望25点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-21 15:45
在做好楼上兄弟所说的同时要保证硬件的完整比如电路工作正常,EEPROM里面要有程序等,以免造成误解。其实我觉得USB只是一个传输的通道而已,PC发出命令,设备理解接受并处理然后回答PC,WIN32应用程序接受数据然后做进一步处理。要理解USB SPEC协议部分和具体USB器件SPEC
一片云
chaijih
驱动牛犊
驱动牛犊
  • 注册日期2003-05-22
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-23 09:02
多谢指教,我是通过deviceiocontrol在端点0发vendor request“请求发送数据”和“请求接收数据”的命令给固件,固件正确接收并解析命令,然后该怎么处理下位机数据呢?例如,对“请求发送数据”来讲,固件把待发送数据是否直接从端点1(我的bulk in)发送出去呢,还是放在端点1的缓冲区待主机readfile()读呢?我现在最迷茫的就是readfile()实现何功能,何时调用,我怎样用它来读数据到主机。我现在的驱动是在driver works的基础上做的。
hanfuxu
驱动牛犊
驱动牛犊
  • 注册日期2001-07-14
  • 最后登录2009-01-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-23 11:29
呵呵!
usb的通信全部都是主机发起的(设备的枚举和初始化可能例外!)!也就是说,全部的通信都需要主机向usb设备请求,usb设备应答!
我们作的usb设备是动态下载固件的,如果你的eeprom中有静态写好的固件就不用下载了!不过不管怎么样,都需要在eeprom中静态保存厂商id和设备id等必备信息!不然驱动怎么装啊!

关于通信,我们不用0 pipe,而是开了1 2 3共3个管道。
Pipe:  0   Type: BLK Endpoint:  1 OUT  MaxPktSize: 0x40
Pipe:  1   Type: BLK Endpoint:  1 IN   MaxPktSize: 0x40
Pipe:  2   Type: BLK Endpoint:  2 IN   MaxPktSize: 0x40
Pipe:  3   Type: INT Endpoint:  3 IN   MaxPktSize: 0x40

刚才说了,usb通信都是主机发起,就是说,没有中断的可能,(注意和中断传输方式的区别!!),这样,就必须不断的查询设备的状态(管道3),利用管道3返回的状态,我再处理,是读2还是读1。
我们的设备返回两种信息,所以使用管道1和2,你应该看情况处理。

这样,我就建立了一个应用层的线程,时刻去读3,并将数据在应用层作了缓冲区,这之后数据的处理,就不用我说了吧?
例子代码:(好像有点多元啊!呵呵)
                BTC.pipeNum = 3;        //查询管道
                State=DeviceIoControl (DevHandle,
                           IOCTL_EZUSB_BULK_READ,
                           &BTC,
                           sizeof(BULK_TRANSFER_CONTROL),
                           &GetStateBuf,
                           1,
                           &nBytes,
                           NULL);
if (GetStateBuf>5)
{
                                BTC.pipeNum = 1;        //点数据管道
                                DeviceIoControl (DevHandle,
                                           IOCTL_EZUSB_BULK_READ,
                                           &BTC,
                                           sizeof(BULK_TRANSFER_CONTROL),
                                           GetDataBuf,
                                           GetStateBuf,
                                           &nBytes,
                                           NULL);
}
else
{
                                BTC.pipeNum = 2;        //键盘代码管道
                                DeviceIoControl (DevHandle,
                                           IOCTL_EZUSB_BULK_READ,
                                           &BTC,
                                           sizeof(BULK_TRANSFER_CONTROL),
                                           &GetCmdBuf,
                                           1,
                                           &nBytes,
                                           NULL);
}

呵呵!具体的配置看你的设备和你的需要!

我说的够多的了呀!呵呵!给分!!:)


chaijih
驱动牛犊
驱动牛犊
  • 注册日期2003-05-22
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-23 17:18
不胜感激,哈。不过我现在脑海有很多问题,一直没有机会找高手交流,论坛聊效率有点低,不知能否电话请教?我的qq是64855124,方便的话请给信我,谢谢,没人沟通的日子太难过了,我们这都没有做这方面的,痛苦呀。
chenjp
驱动小牛
驱动小牛
  • 注册日期2003-03-11
  • 最后登录2009-05-05
  • 粉丝1
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-07-03 17:59
请教chaijih:D12枚举的过程是什么样的?我这边设备上电之后,有中断,应该是总线复位,之后就没有动静了,系统也提示发现新硬件。
游客

返回顶部