USB
的数据信号线是差分
驱动,在数据传输过程中分别有差分态
(1,0)
、静止态
(1,0)
和单终端
0(SE0)
等状态。协议根据这些状态判断设备的速率、信号所代表的数据意义等目
的。
数据按照包
(Packet)
的格式传输。
Packet = Sync
包
+
数据(PID,
数据字段
,CRC)
+
EOP(End of Packet,
由
SE0
和
J
信号组成
)
。传输顺序为
:
先
LSB
后
MSB.
除了
D+
和
D-
数据线的空闲状态和
EOP
外,
USB
中的数据采用反向不归零
(NRZI=None-Return to Zero Inverted)
的编码方式,并对
D+
和
D-
所处的不同数据状态定义成
'J’
和
'K'
两种状态。
NRZI
的编码规则如下
:
u
当有多个“
0
”的信息时,信号的每一位时间按方波变换。
u
当有多个“
1
”的信息时,信号的每一位时间状态不变。
u
当有从“
1
”到“
0
”的信息时,信号的状态要求变换。
u
当有从“
0
”到“
1
”的信息时,信号的状态要求不变。
The SYNC pattern used for low-/full-speed
transmission is required to be 3 KJ pairs followed by 2 K’s
for a total of
eight symbols. Figure 7-35 shows the NRZI bit pattern, which is prefixed
to each low-/full-speed packet.
(低速
/
全速
的
Sync
包
=3K&J
对
+ 2
个
K ,
共
8symbols
)
The SYNC pattern used for high-speed
transmission is required to be 15 KJ pairs
followed by 2 K’s, for a total of 32 symbols.
(高速的
Sync
包
=15
个
K&J
对
+ 2
个
K ,
共
32symbols
,但通过
HUB
转发时可以
Drop
至多
4Bits
,这样的话,通过
5
级
Hub
转发后,
Sync
包可能等于
12Bits
)
由于采用
NRZI
编码,对于一串
1
来说,数据线的电平状态长时间不会跳变,可能会
导致数据接收方的时间同步漂移。因此协议要求每遇到
6
个
1
就在
NRZI
编码之前添加一个
0
,称为位填充
(Bit Stuffing). Sync
Pattern
的最后一位“
1
”计作连续
6
个
1
序列的第一位。