1. 什么是4B/5B编码
就是用5bit的一个二进制数来表示一个4bit二进制数.
2. 目的
为了保证物理层通信的同步(一般数字电路实现),线路中传输的码流需要有足够多的跳变.
显然正常的方式如:00000000(0)~11111111(255)在大部分情况下是没有足够跳变的。
曼彻斯特编码有足够跳变,但效率低,这里不进一步讨论了。
因此就有了4B/5B编码,用一个5bit表示一个4bit,效率应在80%,它为什么有足够多的跳变呢?
5bit(32种组合)中挑选一些有足够跳变的来表示4bit(16种组合)。
3. 编码基本规则
每个5bit码组中不多于3个"0"
或者5bit码组中不少于2个"1"
附:USB PD3.0中4B/5B对应表
表格来自:USB_PD_R3_0 V2.0 20190829 + ECNs 2020-02-07 Redline.pdf
P70,Table 5-1 4b5b Symbol Encoding Table
(如0~F的对应,显然遵循上面的2条规则的,不是数学逻辑转换关系,应不必寻求对应公式,按对应表转换即可)
Name | 4b | 5b | Symbol Description |
---|---|---|---|
0 | 0000 | 11110 | hex data 0 |
1 | 0001 | 01001 | hex data 1 |
2 | 0010 | 10100 | hex data 2 |
3 | 0011 | 10101 | hex data 3 |
4 | 0100 | 01010 | hex data 4 |
5 | 0101 | 01011 | hex data 5 |
6 | 0110 | 01110 | hex data 6 |
7 | 0111 | 01111 | hex data 7 |
8 | 1000 | 10010 | hex data 8 |
9 | 1001 | 10011 | hex data 9 |
A | 1010 | 10110 | hex data A |
B | 1011 | 10111 | hex data B |
C | 1100 | 11010 | hex data C |
D | 1101 | 11011 | hex data D |
E | 1110 | 11100 | hex data E |
F | 1111 | 11101 | hex data F |
Sync-1 | K-code | 11000 | Startsynch #1 |
Sync-2 | K-code | 10001 | Startsynch #2 |
RST-1 | K-code | 00111 | Hard Reset #1 |
RST-2 | K-code | 11001 | Hard Reset #2 |
EOP | K-code | 01101 | EOP End of Packet |
Reserved | Error | 00000 | Shall Not be used |
Reserved | Error | 00001 | Shall Not be used |
Reserved | Error | 00010 | Shall Not be used |
Reserved | Error | 00011 | Shall Not be used |
Reserved | Error | 00100 | Shall Not be used |
Reserved | Error | 00101 | Shall Not be used |
Sync-3 | K-code | 00110 | Startsynch #3 |
Reserved | Error | 01000 | Shall Not be used |
Reserved | Error | 01100 | Shall Not be used |
Reserved | Error | 10000 | Shall Not be used |
Reserved | Error | 11111 | Shall Not be used |