阅读:1744回复:3
usb握手包的疑惑,谢谢
我想问一下,usb的握手信号包是自动回复呢还是要由软件来控制呢?
如果是自动回复的,那么假如收到一个setup包后,假如没有满足要求的功能,应该回复stall握手包,那硬件怎么知道能不能满足功能呢?是不是! 还有一个问题,对usb的终点的理解是不是这样的: 首先主机发送setup包给终点0的out端点,然后由终点0的in终点作状态回复(而不是out终点!),对于普通端点也一样,out包的数据发送到out端点,in包只负责数据的输入,是不是这样的呢? 那么这样说来,终点0还不是靠一个in,一个out实现了双向传送,这和普通端点还不是一样的?请问大家是怎么理解的,谢谢!! |
|
沙发#
发布于:2008-11-16 12:16
"SETUP包不是发给OUT端点的,而是有个专门的8字节缓冲区来存放!至少我所做过的68013和ISP1581都是这样的,当分析SETUP包之后数据阶段是才会用到EP0 IN或者OUT端点"
这个也不一定哦,我用的PHLIPS的LPC2148芯片setup包也是发送到OUT端点的 |
|
板凳#
发布于:2008-11-13 15:27
楼上说的浅显易懂,感谢
|
|
地板#
发布于:2003-12-09 14:04
先FT一下!刚才写了回复,可是回复过程中网断了,写的那些都丢了,只好重写一下了!
首先你要知道控制传输有三个阶段:SETUP、DATA、HANDSHAKE。其实在每个阶段里都涉及到了握手的问题!例如在SETUP阶段,当设备正确收到SETUP包时,硬件会自动给主机应答ACK信号,这个ACK会给MCU产生所谓的SETUP中断,还有数据决阶段的那些ACK和NAK,都是自动实现的。而你需要做得只是在传输结束的时候通知一下主机而已,这有两种情况,如果最有一个数据包是满包,那么你需要给主机发一个空包表示传输结束,如果是不满包那就什么也不用发了,主机知道传输结束了。握手阶段一般情况下就是给主机发送一个ACK而已,可以通过发送空数据包或者设置寄存器让硬件回复两种方法(根据芯片不同有所不同) 第二个问题你的理解也不能算错,虽然通常说端点0是双向的,可是数据存储区还是两个不同的64字节,因此才有EP0 OUT 和 EP0 IN之说。但是有一点你理解有偏差,就是SETUP包不是发给OUT端点的,而是有个专门的8字节缓冲区来存放!至少我所做过的68013和ISP1581都是这样的,当分析SETUP包之后数据阶段是才会用到EP0 IN或者OUT端点。 以上是我的愚见,仅做参考。 |
|