I2C、SPI协议备忘
1. I2C简介
I2C 是很常见的一种总线协议,I2C 使用两条线在主控制器和从机之间进行数据通信。一条是 SCL(串行时钟线),另外一条是 SDA(串行数据线),这两条数据线需要接上拉电阻,总线空闲的时候 SCL 和 SDA 处于高电平。I2C 总线标准模式下速度可以达到 100Kb/S,快速模式下可以达到 400Kb/S。
1.1. I2C协议
支持多从机,一个 I2C 控制器下可以挂多个 I2C 从设备,这些不同的 I2C从设备有不同的器件地址,这样 I2C 主控制器就可以通过 I2C 设备的器件地址访问指定的 I2C设备。SDA 和 SCL 这两根线必须要接一个上拉电阻,一般是4.7K。其余的 I2C 从器件都挂接到 SDA 和 SCL 这两根线上,这样就可以通过 SDA 和 SCL 这两根线来访问多个I2C设备。
1.2. 起始位
I2C 通信起始标志,在 SCL 为高电平的时候,SDA 出现下降沿就表示为起始位。
1.3. 停止位
与起始位功能相反,停止I2C通信的标志位,SDL为高电平时,SDA出现上升沿就是停止位。
1.4. 数据传输
I2C 总线在数据传输的时候要保证在 SCL 高电平期间,SDA 上的数据稳定,因此 SDA 上的数据变化只能在 SCL 低电平期间发生
1.5. 应答信号
I2C主机发送完8位数据后会将SDA设置为输入状态,等待从机应答告诉主机收到。应答信号是由从机发出的,主机需要提供应答信号所需的时钟,主机发送完 8 位数据以后紧跟着的一个时钟信号就是给应答信号使用的。从机通过将 SDA 拉低来表示发出应答信号,表示通信成功,否则表示通信失败。
1.6. 写时序
- I2C总线单字节写时序
- 起始位;
- 发送要写的I2C从设备地址;
- 读写位,0:写,1:读;
- 应答位,由从机发送应答信号;
- 重新起始位;
- 发送要写数据的寄存器地址;
- 应答;
- 写入寄存器的数据;
- 应答;
- 停止位;
(写时序分为三部分1-4是获取从设备设备地址)
- I2C总线单字节读时序
读时序分为 4 部分,1-4 是发送设备地址,5-7 是发送要读取的寄存器地址,8-11 重新发送设备地址,12-14 是 I2C 从器件输出要读取的寄存器值。
- 起始位;
- 发送要读取的从设备地址;
- 读写位0(0:写,1:读);
- 应答;
- 起始位;
- 发送要读取的寄存器地址;
- 应答;
- 起始位;
- 从设备地址;
- 读写位1(0:写,1:读);
- 应答;
- 向寄存器写入的数据;
- 主机发出 NO ACK 信号,表示读取完成,不需要从机再发送 ACK 信号;
- 主机发出STOP信号,停止I2C通信;
(注:多字节读写时序只是在读写时可以连续发送数据)
2. SPI简介
SPI 和 I2C 都是串行通信,但 I2C 的速度最高只能到 400KHz,对于访问速度要求比价高的话 I2C 就不适合了,SPI 是一种高速、全双工的同步通信总线,SPI 时钟频率相比 I2C 要高很多,最高可以工作在上百 MHz。
2.1. SPI协议
SPI 以主从方式工作,通常是有一个主设备和一个或多个从设备,一般 SPI 需要4 根线,但是也可以使用三根线(单向传输),设备连接图如下:
-
CS/SS
Slave Select/Chip Select,片选信号线,用于选择需要通信的从设备。(从设备通过将片选信号拉低,来告诉主设备进行通信)
-
SCK
Serial Clock,串行时钟,为 SPI 提供时钟。
-
MISO/SDI
Master In Slave Out/Serial Data Iutput,主入从出信号线,只用于用户从主机向从机发送数据。
-
MOSI/SDO
Master Out Slave In/Serial Data Output,主出从入信号线,只用于主机向从机发送数据。
2.2. SPI四种工作模式
通过串行时钟极性(CPOL)和相位(CPHA)的搭配来得到四种工作模式:
- CPOL=0,串行时钟空闲状态为低电平。
- CPOL=1,串行时钟空闲状态为高电平,此时可以通过配置时钟相位(CPHA)来选择具体的传输协议。
- CPHA=0,串行时钟的第一个跳变沿(上升沿或下降沿)采集数据。
- CPHA=1,串行时钟的第二个跳变沿(上升沿或下降沿)采集数据。
2.3. SPI 时序
以 CPOL=0,CPHA=0 这个工作模式为例,SPI 进行全双工通信的时序如图:
SPI 是全双工的,读写时序可以一起完成。如图,CS 片选信号先拉低,选中要通信的从设备,然后通过 MOSI 和 MISO 这两根数据线进行收发数据,MOSI 数据线发出了0XD2 这个数据给从设备,同时从设备也通过 MISO 线给主设备返回了 0X66 这个数据。
如有侵权之处,敬请联系删除。