阅读:1433回复:5
大家帮忙看看SL811开发bulk-only协议的问题,郁闷死我了
今天凌晨发的那篇贴子还是没有人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的响应,真是非常怪异:( |
|
沙发#
发布于: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的回应包? 非常感谢您对我问题的一直关注:) |
|
板凳#
发布于:2004-07-22 14:12
[quote]1、检查是否正确接受发送数据 多谢您的解答:) 对于一下两点我还想确认一下,不知道我的想法是否正确 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 |
|
地板#
发布于:2004-07-22 13:04
1、检查是否正确接受发送数据 多谢您的解答:) 对于一下两点我还想确认一下,不知道我的想法是否正确 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] |
|
地下室#
发布于:2004-07-22 08:39
1、检查是否正确接受发送数据
2、当有错误或者全部接受发送完毕 3、可能你的程式有点问题 |
|
5楼#
发布于:2004-07-21 18:34
我用的不是那个芯片,具体的无法帮你.
就我所用的芯片而言,在BULK传输量超过MAXPACKET时,它会分包给你(由USBD完成),而你回ACK只要在传输完成正确接收后,回答就可以了. |
|
|