andy_ee
驱动牛犊
驱动牛犊
  • 注册日期2002-11-15
  • 最后登录2004-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1357回复:6

请问ds带的ezusb驱动例子中的pipenum是怎么编的?

楼主#
更多 发布于:2003-09-23 12:03
一个双向端点可以建立两个管道啊,这个号是怎么编的啊?deviceioccontrol()需要这个作参数。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-09-23 12:54
两个管道?
什么两个管道?
一个端点只能有一个管道吧,那个pipenum是从0开始的
比如68013有4个端点,分别是2、4、6、8,那么对应驱动中的就是0、1、2、3。
andy_ee
驱动牛犊
驱动牛犊
  • 注册日期2002-11-15
  • 最后登录2004-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-09-23 13:28
呵呵,又是大侠您出手了,谢谢了!
您说的68013我没接触过,也不知道为什么是2468。
我的意思是这样的:
比如吧,有2个额外端点,编号分别为1#,2#。
1号是单向in端点,地址就是0x81。如果2号是双向端点,那它的地址是0x82(in)和0x02(out),这不就是可以建立输入和输出两个管道吗(我说的两个管道是说相对于端点的一个编号,不知道可不可以这样说)?那对于这两个地址的pipenum分别是多少呢?
我本来想把ezUsb例子中的FindPipe()函数去掉就可以绕过这个问题,可是又觉得没啥必要,希望大侠再次明示:)

两个管道?
什么两个管道?
一个端点只能有一个管道吧,那个pipenum是从0开始的
比如68013有4个端点,分别是2、4、6、8,那么对应驱动中的就是0、1、2、3。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-09-23 23:36
呵呵,那不叫双向端点,0x82和0x02是两个端点!
端点的信息在DEVICE_EXTENSION里的Interface里的Pipes[n]里面,如果你设置了3个端点,并且在config描述符里的顺序是0x81, 0x82, 0x02,那么Pipe[0]里存放的就是端点0x81的信息,Pipe[1]是0x82,Pipe[2]是0x02,你需要用那个端点就到相应的pipe里找到pipehandle就可以操作了,如下:(假设用0x02)
PDEVICE_EXTENSION          pdx = fdo->DeviceExtension;
PUSBD_INTERFACE_INFORMATION interfaceInfo = NULL;
PUSBD_PIPE_INFORMATION     pipeInfo = NULL;
USBD_PIPE_HANDLE           pipeHandle = NULL;

   interfaceInfo = pdx->Interface;
   pipeInfo = &(interfaceInfo->Pipes[2]);
   pipeHandle = pipeInfo->PipeHandle;

得到了pipeHandle,你就可以用 UsbBuildInterruptOrBulkTransferRequest()来build urb了。

我说明白了没有?


lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-09-24 00:15
jinghuiren:
  你好。你在呀。ep6是不能配成1024在bukl模式,我都犯晕了。谢谢。因为固件和硬件不是我写。
  
andy_ee
驱动牛犊
驱动牛犊
  • 注册日期2002-11-15
  • 最后登录2004-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-09-24 09:40
非常明白了,就是获取config descriptor时得到的端点描述符的顺序,没错吧?
真的要好好向您学习,我暂时还在ds的圈子里,您说的那些结构还没接触到呢,看来前面的路还很长呢:)

呵呵,那不叫双向端点,0x82和0x02是两个端点!
端点的信息在DEVICE_EXTENSION里的Interface里的Pipes[n]里面,如果你设置了3个端点,并且在config描述符里的顺序是0x81, 0x82, 0x02,那么Pipe[0]里存放的就是端点0x81的信息,Pipe[1]是0x82,Pipe[2]是0x02,你需要用那个端点就到相应的pipe里找到pipehandle就可以操作了,如下:(假设用0x02)
PDEVICE_EXTENSION          pdx = fdo->DeviceExtension;
PUSBD_INTERFACE_INFORMATION interfaceInfo = NULL;
PUSBD_PIPE_INFORMATION     pipeInfo = NULL;
USBD_PIPE_HANDLE           pipeHandle = NULL;

   interfaceInfo = pdx->Interface;
   pipeInfo = &(interfaceInfo->Pipes[2]);
   pipeHandle = pipeInfo->PipeHandle;

得到了pipeHandle,你就可以用 UsbBuildInterruptOrBulkTransferRequest()来build urb了。

我说明白了没有?


 
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-09-24 10:58
jinghuiren:
  你好。你在呀。ep6是不能配成1024在bukl模式,我都犯晕了。谢谢。因为固件和硬件不是我写。
  


ep2和ep6都可以配置成512,四缓冲,这样总的缓冲区就是2048字节了,不是1024!
游客

返回顶部