首页 文章

请说明USB设备何时重置或更改其数据切换

提问于
浏览
2

我正在研究一种新的USB设备,我正在尝试了解如何跟踪/管理数据切换 . 网络上存在冲突信息,但大多数意见/体验是设备在枚举后永远不会更改其数据切换,但某些安装程序传输除外 .

这似乎与我对规格的解读相冲突 .

关于批量传输,USB2.0规范第8.5.2节说“主机始终使用配置事件初始化总线传输到DATA0 PID的第一个事务 . 第二个事务使用DATA1 PID,并且连续数据传输交替剩余的批量转移 . “

我没有到达这里(也许我误解了)是,似乎没有批量转移这样的事情,至少在协议的这个层面没有任何东西;只有批量交易 - > IN / OUT-DATA0 / 1-HANDSHAKE ......如果是这样,数据切换何时按照8.5.2节进行切换?

此外,在8.5.3节中,它说“一个SETUP总是使用DATA0 PID作为SETUP事务的数据字段 . ”

并且在同一部分中进一步说“状态阶段是由来自前一阶段的数据流方向的变化描绘的,并且总是使用DATA1 PID . ”

现在,假设我在开始的安装转移中做出响应

SETUPTOKEN | DATA0 |握手

然后是一大堆以 . 开头的交易

IN | DATA1 | HANDSHAKE,以状态阶段之前的IN | DATA1 | HANDSHAKE结束 .

此时我期待我的数据切换为0(在发送DATA1并接收ACK后,我的切换从1切换到0,预期下一个数据包中的DATA0 ......我知道,我应该期待状态阶段但是我试图表明这一点) .

现在状态阶段按照USB 2.0规范进行

OUT | DATA1 |但我的数据切换为0 .

但如果我从不干涉切换,我会被卡住,因为我必须忽略DATA1而不回应,主机必须一遍又一遍地重发 .

因此,我必须通过忽略切换不匹配,发送ACK以及将切换保持为0来干预(即假装我的数据切换与Data1匹配并在预期下一次非SETUP传输/事务时翻转它吗?

如果我遵循我读过的意见,那么设备就没有解决方案可以返回STALL .

对此问题的一些帮助将不胜感激,所以提前感谢 .

编辑:

也许我应该重新解释这个问题 - 我是否误读了第8.5.2节,它们只是意味着任何控制转移而不是“公共汽车转移”吗?任何人都可以确认主要操作系统(如果有的话)是否在控制传输的重置阶段强制执行Data1事务,而不管在前一个事务中使用了哪种数据包类型(Data0或Data1)?

1 回答

  • 1

    批量 endpoints 的数据切换为该 endpoints 上的每个批量事务切换 . 如图8-35所示 . 第8.5.2节仅涉及批量交易,而不是控制转移 . 数据切换仅针对特殊事件重新初始化 .

    控制传输的数据切换规则是不同的,因为控制传输的最后一个事务(传输由多个事务组成)将始终将其数据切换设置为1.这在图8-37中最佳 .

相关问题