USB调试技巧:USB逻辑分析仪报文分析
控制传输分为三个步骤:设置阶段、可选的数据阶段和状态阶段。
设置阶段:必须包含1个控制信号(称为SETUP事务),用于告知设备后续操作类型。
数据阶段(可选):可能包含0个或多个数据包传输。如果需要传输数据,设备会通过IN或OUT信号完成数据交换。
状态阶段:必须包含1个确认信号(IN或OUT事务),用于确认操作完成。
每个步骤的数据包格式都有所不同,整体流程就像先"设定任务-执行操作(可选)-最后确认"的过程。

USB传输数据时,信息会被分成不同的“包”来发送,但这些包必须按固定顺序组合成“事务”才能正常传输。一个事务通常由3种包组成:
令牌包:由主机(比如电脑)最先发出,相当于“开始指令”,告诉设备接下来要做什么。
数据包:实际传输数据的包。数据方向由前面的令牌包决定,可以是主机→设备,也可以是设备→主机。
握手包:由接收数据的一方最后发送,表示“收到且没问题”。如果设备还没准备好接收,会发送一个叫NAK的信号。
简单来说:主机先发指令(令牌包)→双方按指令传输数据(数据包)→接收方最后确认是否成功(握手包)。这样三个步骤组成了完整的数据传输过程。
设置阶段由1个设置事务组成,SETUP事务由SETUP令牌包、DATA0数据包、ACK握手包组成。如下图所示。

1.1、令牌包

从上图可以知道SETUP PID为1101B,则补码校验位0010,在链路上传输先低后高则为,1011_0100(0xB4),下图为SETUP包的链路波形图。

1.2、DATA0 数据包
控制传输由三个阶段组成,设置阶段、可选的数据阶段、状态阶段,其中设置阶段由1个SETUP事务组成,数据阶段由0个或者多个IN/OUT事务组成,状态阶段由1个IN/OUT事务组成,其中每个阶段事务包结构有所不同,下图可以直观看出控制传输的包结构组成。


2、可选的数据阶段包详解
一、如果第一阶段指定数据传输方向为设备到主机: 如果第一阶段指定读(传输方向为设备到主机),则数据阶段会由连续的多个IN事务组成,事务和包协议结构如下图:

二、如果第一阶段数据传输方向为主机到设备(数据长度大于0): 如果第一阶段指定写(传输方向为主机到设备),则数据阶段会由连续的多个OUT事务组成,事务和包协议结构如下图。
三、如果第一阶段数据传输方向为主机到设备(数据长度为0):
3、状态阶段包详解
状态阶段由1个OUT/IN事务组成:
一、 如果第二阶段指定数据传输方向为设备到主机 如果第二阶段指定数据传输方向为设备到主机,则主机接收完毕数据后,主机请求一个OUT事务告诉设备数据的接收状态。

二、 如果第二阶段指定数据传输方向为主机到设备(数据长度大于0) 如果第二阶段指定数据传输方向为主机到设备,则主机发送完毕数据后,主机请求一个IN事务请求设备数据接收状态。
三、如果第二阶段指定数据传输方向为主机到设备(数据长度为0) 如果第二阶段指定数据传输方向为主机到设备,请求传输数据长度为0,则主机发送完令牌包后,主机请求一个IN事务请求设备数据接收状态。