阅读:2047回复:1
[请教]SL811S做U盘与bulk-only协议的问题
我知道U盘属于mass storage class,需要仔细看bulk-only transport 协议,但怎么把bulk-only和usb的某些概念联系起来,我有很多不明白的地方,所以有了这篇请教的帖子:)
===================================================== 1。ep0_isr()中是否要判断(status & EP_ACK)?原来EZ811-HK例子中的这句话含义到底是什么? 2。对SL811S系统开发软硬件功能划分的理解,不知道对不对。以SL811S中的某些寄存器为例: EPXControl.bit2(Direction)由SL811S负责给出其值(硬件) EPXControl的其它bit都应该由软件来设置(软件) EPXStatus的所有bit都是由硬件设置的,指示SL811接收和传送包的相关信息。 EPXStatus.bit0(ACK)既可能是host发送握手信号,SL811接收到时硬件置位的, 也有可能是device发送握手信号时硬件置位的(硬件) 3。mass storage bulk-only协议如何融入2个bulk类型端点?? 下面假设SL811S的EP1设置为bulk out,EP2设置成bulk in,他们公用一段buffer。 bulk传输方式是否也象control传输方式那样自动把超过协商长度的data处理分成多次呢? sl811的EPXCount和bulk-only CSW中dCSWDataResidue关系如何?即,我想关心的是:sl811中为每个bulk 端点设置的缓冲区大小会影响CBW.dCBWDataTransferLength的响应吗?会影响CSW的返回值吗? 例如:EP1的缓冲区大小只有0x10,但CBW本身长度就是0x1f > 0x10,即使EP1的缓冲区可以再大点, 是否每次EPX_DONE发生后的EPX_ISR中都需要返回CSW,还是等到用户需求的数量传输完毕再返回CSW呢? 猜测是后者,但假使真是后者,其中用户需求的传输数量(dUserTransferLen)是对CBWCB分析后得来的吗? dCBWDataTransferLen-dUserTransferLen是否就是最后dCSWDataResidue的值呢? EP1和EP2的中断处理程序到底各需要做什么?三种事务CBW,data,CSW怎么在EP1/2中实现? EP1既要处理含有CBW的bulk-out数据包,又要处理data阶段的bulk-out数据包,所以需要一个全局变量保存当前状态 ◆可能的伪代码如下: 状态集:enum {命令状态,TRANS_OUT,TRANS_IN} USBinit: status = 命令状态 ep1_isr: 令byte_out为EP1实际收到的字节个数; if(status == TRANS_OUT) CSWdCSWDataResidue -= byte_out; dUserTransferLen -= byte_out; if(dUserTransferLen == 0) 通过EP2回传CSW; status = 命令状态; else 设置ep1Control,规定其再从host接收缓冲区大小长度的数据; if(status == 命令状态) 从sl811缓冲读取CBW; 确定CBW是个正确而有意义的,否则EP2回送stall给host; CSW.dCSWDataResidue = CBW.dCBWTransferLen; 根据CBW.bCBWFlags确定status = TRANS_IN 还是 status = TRANS_OUT; 根据CBW.CBWCB确定用户需要处理的数据长度dUserTransferLen; 如果是TRANS_IN,则需要设置ep2Control,规定其向host发送数据; ep2_isr: //如何在ep2中确保bulk-out/in data事务后的CSW回传事务的完整性(考虑到ep2缓冲区的大小问题:-()??? 令byte_in为EP2实际发送的字节个数; if(status == TRANS_IN) CSW.dCSWdataResidue -= byte_in; dUserTransferLen -= byte_in; if(dUserTransferLen == 0) 通过EP2回传CSW; status = 命令状态; else 设置ep2Control,规定其再向host发送缓冲区大小长度的数据;//此处依据什么来确定发送数据内容和长度呢? 还有其中如何考虑DATA0,DATA1的传输问题?这些问题搅在一起,更是看不清楚了:( ◆上面的只是一个初步想法,肯定不完整,我觉得应该把mass storage bulk-only协议中规定的13中状态都讨论完毕 才能算完整,但还有很多细节想不清楚:( ===================================================== 最后是我在网上找到的一个application note,后面有处理bulk-only的流程图,但是还是解释不清楚上面的问题,不过个人认为还是有很多参考价值,大家不妨看一看 :P [编辑 - 7/21/04 by bigbigboy] [编辑 - 7/21/04 by bigbigboy] |
|
|
沙发#
发布于:2004-07-21 16:54
没有Re啊??我自己顶一个:(
其实附件中的那个流程图还是不错的说:) |
|