bigbigboy
驱动牛犊
驱动牛犊
  • 注册日期2003-08-24
  • 最后登录2008-08-06
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1433回复:5

大家帮忙看看SL811开发bulk-only协议的问题,郁闷死我了

楼主#
更多 发布于:2004-07-21 16:54
今天凌晨发的那篇贴子还是没有人re,可能我的问题描述的不清楚,只好重新整理,再来问一下,哪位达人帮帮忙吧:)其实我凌晨发的那篇帖子有个附件,感觉里面的流程图还是不错的,不过我还是不知道怎么利用:(

 步入正题,主要是2个问题:
1。看cypress给的EZ811-DK中提供的slave部分源码,发现其中对ep0的处理有个地方总是不明白,虽然我的ep0貌似通过了:( 就是在
ep0_isr()中有一句if(status & EP_ACK)这个到底有什么用呢?个人觉得slave中没有必要这个判断啊~~

2。和bulk-only协议相关的一个问题,
假设我的sl811s配置如下:
    EP1 bulk-out endpoint
    EP2 bulk-in  endpoint
    EP1/2的描述符表中wMaxPacketSize = 0x40
    SL811S中为EP1/2预留的缓冲区范围:0x80-0xff(共0x80个字节)
问题是:
    对于data长度大于0x40的数据传输,host要分成几次传输,则SL811S的EP1/2就会分几次收到中断,
    那是否每次都需要返回CSW呢?还是根据自己的需要在特定时候(比如中间的某次中断)返回CSW呢?

P.S.
bulk-only协议要求ep0响应CLASS_REQUEST中的Get max lun,我觉得应该用ep0的data1发出,但是只要ep1的处理程序中添加了一些代码就会影响device对get max lun的响应,真是非常怪异:(

bigbigboy
驱动牛犊
驱动牛犊
  • 注册日期2003-08-24
  • 最后登录2008-08-06
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-22 20:49
你说最后的错误列表是指那13种状态关系对吧?
但是我不能很好地理解Dn,Di,Do的意思,我目前的感觉是它们指:device根据CBWCB的分析结果并结合自身功能,认为该次传输应该从host接收或发送给host多少字节数据,这样理解有错吗?

还有ep0 data0 rec是指receive host发来的GET MAX LUN请求数据包吗?而ep0 data 1 sent是指向host发送data1的回应包?

非常感谢您对我问题的一直关注:)
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-22 14:12
[quote]1、检查是否正确接受发送数据
2、当有错误或者全部接受发送完毕
3、可能你的程式有点问题


多谢您的解答:)
对于一下两点我还想确认一下,不知道我的想法是否正确

2。什么叫错误呢?我看bulk-only协议后理解成,当device无法完成host要求的任务,或者host发送的CBW是错误的时候?也就是CBW.dCBWDataTransferLength和分析CBWCB后确定的传输长度不一致的时候,就叫做错误呢?
还有是否只要是device成功完成host要求后,即CSW.bCSWStatus=0时,CSW.dCSWDataResidue必定为0呢?

3。你是说我的ep1的处理有问题?还是ep0处理有问题?
不过用PID=data1的数据包返回GET_MAX_LUN请求应该没有错吧?我看usb协议关于toggle的部分应该是这么理解的,您说呢?

再次感谢您的回答 :D

[编辑 -  7/22/04 by  bigbigboy] [/quote]
2.协议后面有一个错误列表
3.ep0 data0 rec,ep0 data 1 sent
bigbigboy
驱动牛犊
驱动牛犊
  • 注册日期2003-08-24
  • 最后登录2008-08-06
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-22 13:04
1、检查是否正确接受发送数据
2、当有错误或者全部接受发送完毕
3、可能你的程式有点问题


多谢您的解答:)
对于一下两点我还想确认一下,不知道我的想法是否正确

2。什么叫错误呢?我看bulk-only协议后理解成,当device无法完成host要求的任务,或者host发送的CBW是错误的时候?也就是CBW.dCBWDataTransferLength和分析CBWCB后确定的传输长度不一致的时候,就叫做错误呢?
还有是否只要是device成功完成host要求后,即CSW.bCSWStatus=0时,CSW.dCSWDataResidue必定为0呢?

3。你是说我的ep1的处理有问题?还是ep0处理有问题?
不过用PID=data1的数据包返回GET_MAX_LUN请求应该没有错吧?我看usb协议关于toggle的部分应该是这么理解的,您说呢?

再次感谢您的回答 :D

[编辑 -  7/22/04 by  bigbigboy]
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-22 08:39
1、检查是否正确接受发送数据
2、当有错误或者全部接受发送完毕
3、可能你的程式有点问题
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-21 18:34
我用的不是那个芯片,具体的无法帮你.
就我所用的芯片而言,在BULK传输量超过MAXPACKET时,它会分包给你(由USBD完成),而你回ACK只要在传输完成正确接收后,回答就可以了.
新手上路,请多关照.
游客

返回顶部