唯一标识
在社会上,靠身份证号,来唯一标识一个人。
在计算机的世界里,通过什么来唯一标识一个外设呢?方案还不止一种
- I2C
- 使用地址(7 或 10 位)来唯一标识一个外设
- SPI
- 使用 CS 引脚来唯一确定通信的外设
- CAN
- 不对设备进行唯一标识,而是对报文进行唯一标识,设备处理自己感兴趣的报文 ID(11 位或 29 位)就行了
- PCI
- 则是对功能进行唯一标识,通过 BDF(Bus,Device,Function) 来唯一确定目标功能的位置。
通信手段
-
I2C
- 两根线
- SCL:时钟线,时钟都是由 master 提供
- SDA:双向数据线,发送数据或者接收数据(收发不能同时)
- 起始信号、地址字节和读写命令、应答信号、停止信号
- 特殊情况,当 master 决定不再接收数据时,应向 slave 发送 NACK 信号
- 两根线
-
SPI
- 四根线
- SCLK:时钟线,时钟都是由 master 提供
- MOSI:Master 输出,Slave 输入,由 Master 向 Slave 发送数据
- MISO:Master 输入,Slave 输出,由 Slave 向 Master 发送数据
- CS:Chip Select,片选信号,Master 通过拉低 Slave 的片选信号选择 Slave
- 四根线
-
CAN
- 两根线
- CAN_H
- CAN_L
- CAN_H = CAN_L = 2.5V,隐性电平,逻辑 1
- CAN_H = 3.5V,CAN_L = 1.5V,显性电平,逻辑 0
- 两根线
-
PCIe
- x1:1 个 lane
- x4:4 个 lane
- …
- x32:32 个 lane
- 1 个 lane
- 两对差分信号线(4 根线),一对用来发,一对用来收
- 两对差分信号线(4 根线),一对用来发,一对用来收
- 差分时钟(两根线)
- 时钟架构有三种
数据报文
- I2C
- 按字节传输
- 按字节传输
- SPI
- 按字节传输
- 按字节传输
- CAN
- 帧
- 数据帧,软件实现,所以只要掌握数据帧、遥控帧即可
- 遥控帧,软件实现
- 错误帧,硬件完成
- 过载帧,硬件完成
- 每帧由 7 部分组成
- 帧起始、仲裁段、控制段、数据段、CRC 段、ACK 段、帧结束
- 帧起始、仲裁段、控制段、数据段、CRC 段、ACK 段、帧结束
- 帧
- PCIe
- 四层
- 应用层,不是 PCIe Spec 规定的内容,完全由用户自行设计。下面三层都是 PCIe Spce 明确规定的,要求设计者严格遵循。
- 事务层,Transaction Layer,收发事务层包(Transaction Layer Packet,TLP)
- 数据链路层,Data Link Layer,收发数据链路层包(Data Link Layer Packet,DLLP)
- 物理层,Physical Layer
- 发
- 收
- TLP 报文格式
- 四层
特点
-
I2C
- 同步、半双工
- 速率
- 标准模式 100kbps
- 快速模式 400kbps
- 高速模式 3.4Mbps
- 同一时刻只能有一个 master 与一个 slave 通信
-
SPI
-
同步、全双工
-
同一时刻只能有一个 master 与一个 slave 通信
-
有 4 种不同的数据传输时序(工作模式)
-
速率
- 受限于硬件,STM32 是 18M
-
主要用在 EEPROM、FLASH、实时时钟、AD 转换器、数字信号处理器、数字信号解码器
-
缺点
- 没有应答机制确认是否收到数据
-
CAN
- 多主总线,多主竞争
- 废除传统的地址编码,代之使用对通信数据块进行编码。优点是节点个数在理论上不受限制。
- 数据段长度最多为 8 字节,不会占用总线太长时间,实时性高
- 速率
- 最高 1M
-
-
PCIe
- 也是串行总线
- 点对点(传统 PCI 是共享总线)
- 全双工
- 按需调整 PCIe 设备带宽
- 显卡,多个 lane
- 网卡,一个 lane
- 速率
- 注意这里是 大B
- 注意这里是 大B