lanbada
驱动牛犊
驱动牛犊
  • 注册日期2002-11-12
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1041回复:6

!!jinghuiren .etc.你们快进来看看 堵 住啦!!!

楼主#
更多 发布于:2003-01-23 17:41
请大虾 帮忙把下面的 流 程 走通
     我用的是带USB接口的单片机
应用程序发出 IOCTL-****----〉DEVICEIOCONTROL()构成URB--->SUBMIT()向下传递---〉系统提供的USB驱动程序-----〉总线----〉SIE----〉SIE 返回状态信号(表示指令接受正确/错误)---〉(正确)则---〉固件程序----〉??识别IOCTL-****------>固件做出响应。
  (错误)则  SIE 返回状态信号(表示指令接受错误)---〉总线----〉DEVICEIOCONTROL()返回值

上面的流程不知对不对,
??表示固件是如何识别ioctl-**在批量合控制传输时
cf_yeah
驱动牛犊
驱动牛犊
  • 注册日期2002-03-12
  • 最后登录2006-10-30
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-01-26 15:11
send deviceiocontrol() with io_ctl_code to i/o management,then driver receive an IRP with your io_ctl_code .u can crate many irp and urb if ur datas lager than 64k,set complete routine,and send these irp onebyone to usbdi.u can get result from complete routine ,and return ur IRP to application programme.
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-24 14:11
在ioctl函数里有一个表明是什么传输类型的参数,你可以参考一下msdn和cypress的app程序,比较一下就会明白了,我想你还是自己多找找吧,我现在麻烦挺多的,就不专门为你找了。
lanbada
驱动牛犊
驱动牛犊
  • 注册日期2002-11-12
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-24 11:22
其实,我想知道在主机端,怎样做就分别成了控制传输,批量传输
 给个回答 :P
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-23 21:35
呵呵,老兄,这些东西不是你我需要开发的,我们需要知道的接口:上面的是usbd,你编写的驱动需要和usbd打交道,其他的都封装好了,不需要你管的,下面的接口就是固件与端点,至于ioctl如何变成in和out令牌知不知道都没太大的关系的。我建议你不要在这上面花太大的精力了。
lanbada
驱动牛犊
驱动牛犊
  • 注册日期2002-11-12
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-01-23 20:58
jinghuiren:
你说的没错。我现在搞不明白我的ioctl怎样变成in 或out ,setup令牌 请指教
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-01-23 19:39
哥们,ioctl不是固件来识别的,SIE(或这之后的硬件系统,反正是绝对没到固件那一层!)收到上游正确的IN令牌后会去检查端点缓冲区是否为满,如果是就把数据打包由收发器发往主机,否则就发送NAK给主机,这样主机上的HOST CONTROLLER 收到NAK后就会发送下一个IN令牌到设备(这一点你不用管)。

我在别的贴子里已经说过了,固件程序的任务除了初始化和枚举外就是向端点缓冲区添数据,他没法通知主机,填满了后只有等待主机来取走数据,然后再填,循环往复,如果他填满了缓冲区,主机却永远不发送IN令牌来取数据,那缓冲区里的数据只好“烂”在里面了!

游客

返回顶部