阅读:1876回复:9
请教:SLAVE回应HOST要求上传512字节,用64*8可以,但用32*16则不行,为甚么呢?
我用811作SLAVE,MASS STORAGE。我使用一些自定义的命令,诸如要向HOST发送65(字节)*1000(次)的数据,我想按照(64+1)*1000的方式进行发送,因为我缓冲比较小,一下子准备好全部数据有困难。
为此我使用READ10命令作了一下测试,使用64*8的方式传送512字节的方法是没有问题的,而我如果试图用32*16的方式传送,结果在发出第一个32字节后就收到HOST发来的BUS RESET,SSTS为NO DEVICE,然后就又收到MODE SENSE等一系列检查命令。(我定义端点的能力是64字节) 我不能解释此中的原因,大侠们出剑救救我吧。 |
|
沙发#
发布于:2005-08-01 11:23
知道的大侠说说吧。
|
|
板凳#
发布于:2005-08-01 15:06
你如果定义64为一个包
那么32会作为一个短包做处理 这样Host会认为是一个结束标志 所以不会在发IN_TOKEN过来 所以。。。。 |
|
地板#
发布于:2005-08-01 16:10
谢谢Levis75,也就是说如果PAYLOAD定义了64字节,一旦主机要求我上传65个字节,我只能64+1对吗?有什么方法可以让我根据自己的要求分割传送吗?
|
|
地下室#
发布于:2005-08-03 13:48
USB is a kind of host※slave device.
The EP_buffer in Hardware is the condition you can use the max buffer size. |
|
5楼#
发布于:2005-08-04 08:59
再次谢谢LEVIS75的帮助。如果这样行不通的话我就只好建立FIFO缓存了。
|
|
6楼#
发布于:2005-08-04 10:10
楼主为何要这么做?可以改变host端的驱动
|
|
7楼#
发布于:2005-08-04 10:46
非常感谢您的意见!您的意思是说让驱动程序预先分割,SLAVE来执行?驱动端我懂的不多,惭愧!
因为大部分的时候我还是要执行UFI命令,只在特定的自定义命令处理中采用上述分段传输。我现在还不能完全抛弃WINDOWS自带的USBSTOR,只是要增加一些自定义命令,我的伙伴负责驱动开发。 我有过这样的想法:另外开辟2个控制传输端点,借用HID设备的驱动程序来完成这些自定义的命令。不知道是否可行? |
|
8楼#
发布于:2005-08-04 17:42
我是Linux OS,
Slave 和Host 都是所以好改些 如果是Windows的话有点麻烦 不过你可以参考BulkUSB去做 应该也可以 |
|
9楼#
发布于:2005-08-05 08:26
谢谢Levis75的无私帮助,看来我还有努力学习才行啊!
|
|