lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1539回复:16

请教固件和驱动之间如何通信,如何传数据。

楼主#
更多 发布于:2003-08-12 16:12
请教固件和驱动之间如何通信,如何传数据。
    驱动我用DS写,就是三个类,请教驱动如何与固件通信呢。数据如何流通呢。
    固件主要是干什么的 呢,是用于USB芯片通信吗。和驱动是如何联系的呢 。
  不在郁闷中前进,就在郁闷中毁灭。

最新喜欢:

lmhhlmhhlmhhlm...
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-14 12:50
1,是的,是的,有
2,对的
附件是cypress的应用程序和驱动
附件名称/大小 下载次数 最后更新
2003-08-14_ezusb.rar (236KB)  5
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-14 12:27
leihui1981:
  不好意思,本想给你分。但好像给不了。
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-14 12:19
jinghuiren:
   我开始有点明白了 。真正了解要实践。给分
   用DS开发要配置端点和接口,主要是用IRP和低层通信的,URP包含在IRP中是吗。另外设备驱动里只要配置端点和接口,并提供缓冲区就行吗。能告诉我那里有例子吗,不胜感激。
   现在我的设备接上,系统只认unkown device,是不是枚举不对。
  
leihui1981
驱动小牛
驱动小牛
  • 注册日期2003-07-10
  • 最后登录2004-08-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-14 09:53
[quote]在固件里有自己的命令指令,当收到主机的命令包解压执行命令就可以开始实现通信了呀.

   请教什么是 “主机的命令包解压执行命令”,会给分的。
    [/quote]
当usb设备连上主机后,主机就会发一个CBW命令包,里面就是关于处理的命令,固件里编程解开,并执行.就可以了,(我用的是mass storage的传输协议)
轻轻我来了,轻轻我又走了.
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-13 21:04
取数据不是有我们那层驱动控制的,我们只是发送请求给下层驱动,下层驱动控制硬件获得数据的,这个过程你无法干预的,大致过程是:你的驱动->urb到usbd->hcd->主机控制器,主机控制器会到设备读数据,然后数据经过层层返回到达你的驱动,然后就可以返回到应用程序了。

因此我之前告诉你该做什么你只要照着做了就可以得到数据,其他的可以不用管。

[编辑 -  8/14/03 by  jinghuiren]
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-08-13 19:57
flytomoon:
  你说的不全对,请教你在DS的驱动里分配内存如何分配啊 。先不给你分了 。
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-08-13 19:54
jinghuiren:
   你好,谢谢,我用的是cy68013的芯片,我还不明白端点的 数据,主机是如何去取的。是在设备驱动程序里干的吗。给分
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-08-13 19:48
在固件里有自己的命令指令,当收到主机的命令包解压执行命令就可以开始实现通信了呀.

   请教什么是 “主机的命令包解压执行命令”,会给分的。
  
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-08-13 12:36
存储数据的缓冲区一般是在应用程序中指定的,因为读取数据一般是通过应用程序操纵驱动进行的,所以你要读数据的话就要提供一个存储数据的缓冲区,否则就要提供要传输的数据,驱动只负责把你的要求发下去,如果是前者,他都会数据后会放倒你的缓冲区中,后者会把你的数据一个包一个包的发到设备

在设备方相应的有两种操作,前者要包数据填到端点里(仅此而已),填满了自动生效,等待主机来取,不满则强制生效,效果同前一种;后者要把数据从缓冲区中读出,读空后端点会自动准备重新接收新的数据,如果不想读空就强制清空,如果不想请空那双方就等,如果你没有设置朝时返回,那这个等待是无限期的!

你觉得满意吗?
aladdin
驱动牛犊
驱动牛犊
  • 注册日期2001-07-03
  • 最后登录2008-12-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-08-13 09:15

有问题的时候,还有一种方法,那就是参考你usb芯片的资料,一般来说,会有例子程序,例子程序是你最好的导师!
+====================+ | | | 飞 舞 轻 扬 | | | +====================+
leihui1981
驱动小牛
驱动小牛
  • 注册日期2003-07-10
  • 最后登录2004-08-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-08-13 08:50
在固件里有自己的命令指令,当收到主机的命令包解压执行命令就可以开始实现通信了呀.
轻轻我来了,轻轻我又走了.
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-08-13 08:28
驱动程序中把读写数据的urb发送到下层驱动usbd即可,在此之前你要提供一个存储数据的缓冲区以及确定读写数据的数量,然后下层驱动会控制硬件向设备发送读写的命令。

固件里只需要把数据填充到相应的端点或者从相应的端点里读出数据即可。

   我还是不很明白,存储数据的缓冲区在那里指定呢。
   那在相应端点的数据如何发送到驱动程序呢。
   不在郁闷中成长,就在郁闷中毁灭
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-08-12 18:38
驱动程序中把读写数据的urb发送到下层驱动usbd即可,在此之前你要提供一个存储数据的缓冲区以及确定读写数据的数量,然后下层驱动会控制硬件向设备发送读写的命令。

固件里只需要把数据填充到相应的端点或者从相应的端点里读出数据即可。
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-08-12 18:25
flytomoon
   能否讲的详细些,就用那个DEVICEIOCONTRAL函数吗,它不是应用程序和驱动之间联系的吗。


就是通过DEVICEIOCONTRAL函数来联系应用程序和驱动啊
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-08-12 17:37
flytomoon
   能否讲的详细些,就用那个DEVICEIOCONTRAL函数吗,它不是应用程序和驱动之间联系的吗。
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-08-12 16:16
固件和驱动之间是通过DEVICEIOCONTRAL这个函数来实现通讯的。固件主要是完成USB芯片的各中寄存器的配置,控制USB的通讯方式等问题。
游客

返回顶部