关键点在于:这里其实有两个层次的“高位”。
- 字节层次:多字节数据里先发高字节(更高权重的字节)
- 位层次:单字节内部先发高位(bit7 到 bit0)
这两个层次彼此独立,不要混为一谈。
例子
用 12345 = 0x3039 作为例子,它由两个字节组成:
- 高字节:
0x30 = 0011 0000 - 低字节:
0x39 = 0011 1001
以 SPI 的 MSB first 为例:
- 在字节层次:先发高字节,再发低字节
- 在位层次:每个字节都按高位到低位发送
字节层次发送顺序:
第1个:0x30(高字节)
第2个:0x39(低字节)
位顺序:
发送 0x30 时:
位顺序:0 -> 0 -> 1 -> 1 -> 0 -> 0 -> 0 -> 0
↑高位 ↑低位
发送 0x39 时:
位顺序:0 -> 0 -> 1 -> 1 -> 1 -> 0 -> 0 -> 1
↑高位 ↑低位
再看一个反例:LSB first
还是用 0x3039:
- 字节层次(不变):先发
0x30,再发0x39 - 位层次(变化):每个字节按低位到高位发送(bit0 到 bit7)
位顺序:
发送 0x30 时:
位顺序:0 -> 0 -> 0 -> 0 -> 1 -> 1 -> 0 -> 0
↑低位 ↑高位
发送 0x39 时:
位顺序:1 -> 0 -> 0 -> 1 -> 1 -> 1 -> 0 -> 0
↑低位 ↑高位