whmjack
驱动小牛
驱动小牛
  • 注册日期2003-09-17
  • 最后登录2007-04-26
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望29点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:1744回复:3

usb握手包的疑惑,谢谢

楼主#
更多 发布于:2003-12-09 12:07
我想问一下,usb的握手信号包是自动回复呢还是要由软件来控制呢?
如果是自动回复的,那么假如收到一个setup包后,假如没有满足要求的功能,应该回复stall握手包,那硬件怎么知道能不能满足功能呢?是不是!
还有一个问题,对usb的终点的理解是不是这样的:
首先主机发送setup包给终点0的out端点,然后由终点0的in终点作状态回复(而不是out终点!),对于普通端点也一样,out包的数据发送到out端点,in包只负责数据的输入,是不是这样的呢?
那么这样说来,终点0还不是靠一个in,一个out实现了双向传送,这和普通端点还不是一样的?请问大家是怎么理解的,谢谢!!
byteman
驱动牛犊
驱动牛犊
  • 注册日期2005-12-15
  • 最后登录2009-07-12
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望7点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-11-16 12:16
"SETUP包不是发给OUT端点的,而是有个专门的8字节缓冲区来存放!至少我所做过的68013和ISP1581都是这样的,当分析SETUP包之后数据阶段是才会用到EP0 IN或者OUT端点"

这个也不一定哦,我用的PHLIPS的LPC2148芯片setup包也是发送到OUT端点的
codesnail
驱动牛犊
驱动牛犊
  • 注册日期2008-11-07
  • 最后登录2008-12-29
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望87点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-11-13 15:27
楼上说的浅显易懂,感谢
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于: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端点。

以上是我的愚见,仅做参考。

游客

返回顶部