1. NRZI 编码的基本原理
- 定义:NRZI(Non-Return-to-Zero Inverted)是一种通过电平跳变表示
0
,保持电平表示1
的编码方式。 - 规则:
- 输入
0
:电平翻转(若当前为J
则变K
,反之若当前为K
则变J
)。 - 输入
1
:电平保持(不翻转)。
- 输入
- 目的:确保信号中有足够的跳变边缘,供接收方恢复时钟同步。
2. SYNC 字段的 NRZI 编码实现
全速 SYNC:二进制 00000001
→ 电平 KJKJKJKK
- 初始状态:假设常态电平为J(高电平1),那么起始电平为
K
(低电平0)。 - 逐位编码:
输入比特 | NRZI 操作 | 当前电平 | 说明 |
---|---|---|---|
0 |
翻转(J →K ) |
K |
第1个0 ,电平跳变 |
0 |
翻转(K →J ) |
J |
第2个0 ,电平跳变 |
0 |
翻转(J →K ) |
K |
第3个0 ,电平跳变 |
0 |
翻转(K →J ) |
J |
第4个0 ,电平跳变 |
0 |
翻转(J →K ) |
K |
第5个0 ,电平跳变 |
0 |
翻转(K →J ) |
J |
第6个0 ,电平跳变 |
0 |
翻转(K →J ) |
K |
第7个0 ,电平跳变 |
1 |
保持(J ) |
K |
第8个1 ,电平保持不变 |
- 最终电平序列:
K J K J K J K K
SYNC域 8位中 的 最后两位 KK 是一个标记(电平未翻转,即收到数据1),用于标识SYNC域的结束和PID域的开始。
高速 SYNC 的二进制模式
- 规范定义(USB 2.0 协议 7.1.11.2节)
- 二进制输入:
00000000000000000000000000000001
(31个0
+ 1个1
,共32位) - 设计意图:
通过长串0
触发 NRZI 连续跳变,生成稳定的同步信号。
- NRZI 编码过程
输入比特序列 | NRZI 操作(初始电平 K ) |
生成的电平序列 |
---|---|---|
00000000000000000000000000000001 |
每个0 翻转,1 保持 |
KJ KJ KJ ... KJ KK (共32跳变) |
- 实际结果:
- 前31个
0
→KJ
交替15次 + 最后一个J
(第31位) - 最后1个
1
→ 保持J
- 协议补
KK
→ 最终序列:(KJ)×15
+J
+KK
= 15次KJ
+JKK
- 前31个
3. 为什么 USB 使用 NRZI?
- 抗干扰:跳变边缘携带时钟信息,降低对绝对电平精度的依赖。
- 效率:比曼彻斯特编码(每个比特均跳变)节省带宽。
- 兼容性:适合 USB 的全速/高速多速率场景。