USB数据包解析

简柒。 2022-06-23 15:01:01 编辑

145857846164
我现在获取了一段USB的波形,通过代码用状态机的方式要将包分别解析出来,要求解析出SNYC、PID、包内容,但是数据包中的负载长度是不固定的,请问在这段波形如何判断数据包中负载的长度呢?求大佬解答

USB中文网 2022-06-23 15:37:44 编辑

这个一般最好用逻辑分析仪来看。

  • 首先得标出高低电平。
  • 找到SYNC同步信号
  • 翻译PID
  • 根据PID的不同,数据长度不一样。对于DATA这些,可参考端点的大小或找其截止信号。
  • 结束包的可以参考:http://www.usbzh.com/article/detail-824.html

在低速或全速链路上,一个简短的单端零 (SE0) 状态用于指示数据包结束 (EOP),空闲由 J 状态指示。
在高速链路上,空闲状态实际上是一个 SE0,因此该状态不能用于指示 EOP,并且使用了不同的方法来指示数据包结束。在正常的数据传输过程中,连续的 1 不能超过 6 个,因为 0 会自动插入(并且会在接收时删除)。这保证了 NRZI 编码数据流中有足够的转换以允许时钟恢复。
在高速时,通过故意发送一个包含位填充错误的字节来指示 EOP;’01111111’。这适用于除 SOF 之外的所有数据包的末尾。
每个高速 SOF 数据包以包含比特填充错误的 5 个 NRZI 字节结束:01111111 - 11111111 -11111111 -11111111 -11111111。这种模式允许“断开包络检测器”检测到高于 625 mV 的数据幅度上升,以防设备及其终端电阻已被拔出。

往事随风 2022-08-12 18:02:13 编辑

您好,上面的波形包用什么工具抓

USB中文网 2022-08-12 22:44:36 编辑

示波器