阅读:1618回复:6
d12端点缓冲区太小,怎么送描述啊?
我用d12的,端点0每个缓冲区只有16字节,因此有以下问题。
我收到主机传来的get descriptor命令,然后马上发送他所要求的描述符,如果是大于16字节的就直接发送16字节,等待产生control in中断,然后再将剩余的描述如此发送出去,如果此次刚好可以发送完毕则跟着送空包表示结束,如果刚才那次描述符不足16字节,则在发送完毕后跟一个空包。。。 这样对么? |
|
沙发#
发布于:2003-02-27 12:10
对的 对的 ^_^
|
|
板凳#
发布于:2003-02-27 14:37
对的 对的 ^_^ 可是我觉得不对啊。 80 C0 01 21 01 34 --80 06 00 01 00 00 40 00 --12 01 00 01 DC 00 00 10 40 01 21 01 34 --00 05 02 00 00 00 00 00 --FA 02 00 41 01 21 01 34 --80 06 00 01 00 00 12 00 --12 01 00 01 DC 00 00 10 71 04 66 06 00 01 00 00 02 00 41 00 08 00 01 FA 03 00 01 01 A1 01 34 --80 06 00 02 00 00 09 00 --09 02 2E 00 01 01 00 60 01 FA 03 01 41 01 41 01 21 01 34 --80 06 00 02 00 00 FF 00 -- 09 02 2E 00 01 01 00 60 01 09 04 00 00 04 DC A0 02 00 41 00 08 -------------B0 00 07 05 81 03 10 00 0A 07 05 01 03 10 00 0A 02 00 01 00 18 -------------07 05 82 02 40 00 0A 07 05 02 02 40 00 0A FA 03 00 81 01 41 |
|
地板#
发布于:2003-02-27 14:41
你注意看,control in的第一个字节是选择端点之后读出的一个字节,其中有一个03后面那个数不是00,是01了,也就是说那个端点缓冲区是满的,没有被主机取走啊。那是怎么回事啊。
|
|
地下室#
发布于:2003-02-27 21:22
我还没有开始调试!所以对运行中出现的情况不是很清楚。 但是 确实是那样的。 d12固件手册上对这一过程有比较详细的描述的,在最后面几页,控制端点处理程序那部分 根据流程图和后面的那几段注释 : (原文) 由于d12的控制端点只有16字节的FIFO,如果传输的长度大于16字节,mcu在传输 阶段就必须控制数据的数量。如流程图所示。 mcu必须检查要发送到主机的当前和剩余的数据的大小。如果剩下的字节数大于 16,mcu将先发送16字节并减去参考长度(要求的长度)16。 当下一个control in标志包来到时,mcu将确定剩余的字节数是否为零,如果已经没有数据要发送,mcu需要发送一个空的包以 指示主机数据以发送完毕。 程序还设置了3种状态 IDLE 、TRANSMIT、 RECEIVE 。 表明了在下一个标志包到达时,d12将进行的相应的操作(是发数据还 是收数据) 只能说明该过程的确是这样的, 坚定思想! ps: sys文件是二进制代码,不能看 :( |
|
5楼#
发布于:2003-02-28 08:10
:(你写的那个我知道啊,因为我就是按照那个编的啊。。可是我觉得会不会我少做了什么步骤,导致错误的出现啊?你看我数据,就会发现有点问题的啊。。
|
|
6楼#
发布于:2003-03-03 09:34
如果刚才那次描述符不足16字节,则在发送完毕后跟一个空包。。。
不需要!如果刚才那次描述符不足16字节,则USB协议确保HOST 能识别数据传输已完成.也就是说,不足16字节,只要发送实际数目就行了。 |
|