Wxy8030
驱动小牛
驱动小牛
  • 注册日期2002-03-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1330回复:7

D12如何“设备应答”?

楼主#
更多 发布于:2003-12-19 09:06
看周立功的枚举过程列出来的数据――其中设备应答是怎么完成的呢?

是否是那个应答SETUP命令就可以,为什么要对端点索引0和端点索引1都要应答一次?

还有,我到现在都没搞清楚――到底D12的端点索引0和端点索引1是不是共用的缓冲区,还是它们各自拥有自己的缓冲区?

我现在可以接受到主机第一次发来的设备描述符、主机分配的地址,,,也收到了第二次发来的设备描述符,,,可就是收不到主机发的配置符!!!!!!!!

感觉调D12真是步履为艰,,,,,,

[编辑 -  12/19/03 by  Wxy8030]
mailxufeng
驱动牛犊
驱动牛犊
  • 注册日期2003-10-15
  • 最后登录2005-03-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-19 10:25
呵呵,D12规定每收到1个SETUP包就会屏蔽2条命令(清空缓冲区命令和使缓冲区有效命令)以保证SETUP包的完整性(不受破坏),所以接收到数据包以后需要用应答命令重新使这两条命令有效,否则你将不能发送数据,端点索引0和1的缓冲区是分开的,0负责接收(即OUT),1负责发送(即IN),所以你需要对0和1都应答一次。枚举过程简单来讲是这样的:主机通过SETUP包的形式向设备发调档命令,设备接收到命令分析后把相应档案资料上传,而在资料数据发送完后都要发一个ACK(0字节数据包)作为正确应答。
Wxy8030
驱动小牛
驱动小牛
  • 注册日期2002-03-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-19 10:38
不好意思,还要请教啊――

既然IN、OUT缓冲区是分开的,SETUP包只会出现在OUT的缓冲区内,并不影响IN缓冲区啊?为什么也要禁止IN缓冲区的清空和使缓冲区有效这两个命令呢?应答端点索引0我可以理解,为什么要应答端点索引1就有点模糊了,,,(是否是D12就这么规定的,接受到SETUP包后,IN、OUT着两个缓冲区都不能动了?)

还有――“主机通过SETUP包的形式向设备发调档命令,设备接收到命令分析后把相应档案资料上传,而在资料数据发送完后都要发一个ACK(0字节数据包)作为正确应答。”

此ACK是主机发到从机,还是从机自己发出的?
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-12-19 11:06
不好意思,还要请教啊――


还有――“主机通过SETUP包的形式向设备发调档命令,设备接收到命令分析后把相应档案资料上传,而在资料数据发送完后都要发一个ACK(0字节数据包)作为正确应答。”

此ACK是主机发到从机,还是从机自己发出的?


此处是主机发给设备。接收数据方发送ACK给发送方
我思,故我在
mailxufeng
驱动牛犊
驱动牛犊
  • 注册日期2003-10-15
  • 最后登录2005-03-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-19 11:46
清空缓冲区命令是针对端点索引0的,即OUT缓冲区,使缓冲区有效命令是针对端点索引1的,即针对IN缓冲区,IN和OUT都是针对主机而言,ACK当然是设备发往主机的啊,表示正确应答了主机的SETUP包啊。
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2003-12-19 14:13
清空缓冲区命令是针对端点索引0的,即OUT缓冲区,使缓冲区有效命令是针对端点索引1的,即针对IN缓冲区,IN和OUT都是针对主机而言,ACK当然是设备发往主机的啊,表示正确应答了主机的SETUP包啊。

拜托,仔细看看协议吧,不要误导别人。


――“主机通过SETUP包的形式向设备发调档命令,设备接收到命令分析后把相应档案资料上传,而在资料数据发送完后都要发一个ACK(0字节数据包)作为正确应答。”

首先,“0字节数据包”和“ACK”是两码事
针对上面这句话,设备正确收到setup包后,立即就发ACK给host;然后才是发送数据,每发一次数据,如果host正确接收到的话,就给设备发ACK确认,直到数据发送完(注意,这里的ACK是host发给设备的!);数据发送完成,host端发送一个0字节的数据包给设备,注意他不是ACK!,设备正确接收到这个数据包,返回ACK。至此,一个USB控制传输事务才算完成。
我思,故我在
Wxy8030
驱动小牛
驱动小牛
  • 注册日期2002-03-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-12-19 14:16
呵呵,没事没事,这个我大概知道了,,,,,,
mailxufeng
驱动牛犊
驱动牛犊
  • 注册日期2003-10-15
  • 最后登录2005-03-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-12-19 16:04
flycat0101说得对,我那段话确实有误导的嫌疑,在这里向Wxy8030表示道歉。一个完整的控制模式下传输事务就像flycat0101所说,在这里我做一点补充:如果上传数据不是端点0缓冲区大小的整数倍的话,那么上传的最后一个数据包必小于缓冲区大小,也就向主机宣告了本次数据阶段的结束,如果上传数据刚好是缓冲区大小的整数倍的话,那么最后设备还必须发送一个0字节长度的数据包表示本次状态的结束(我一开始理解错了,这里特别指出)。
游客

返回顶部