文章目录
- SPI 简介
- 基本原理
- 工作模式
- 特点
- SPI寻址方式
- 1. 片选(Chip Select, CS)
- 2. 多从设备通信
- 3. 菊花链(Daisy-Chain)模式
- 4. 地址寄存器(应用层)
- SPI通信过程
- 时钟信号生成(SCLK)
- 数据传输(MOSI/MISO)
- 数据采样与移位
- 通信时序图
- 极性和相位
- 1. 时钟极性(CPOL)
- 2. 时钟相位(CPHA)
- SPI 的 4 种工作模式
- 如何选择 CPOL 和 CPHA
SPI 简介
SPI(Serial Peripheral Interface)是一种同步串行通信协议,用于短距离的设备之间数据传输。它常用于微控制器与外部设备(如传感器、闪存、显示器等)的通信。SPI 具有以下主要特点:
基本原理
SPI 是主从模式的通信协议,通常包括一个主设备(Master)和一个或多个从设备(Slave)。主设备控制通信的时序,从设备根据主设备的指令进行响应。
SPI 使用以下四条主要信号线:
- MOSI(Master Out Slave In): 主设备发送数据到从设备的线路。
- MISO(Master In Slave Out): 从设备发送数据到主设备的线路。
- SCLK(Serial Clock): 主设备生成的时钟信号,用于同步数据传输。
- CS(Chip Select): 用于选择特定从设备进行通信,通常为低电平激活。
工作模式
SPI 通过时钟信号的不同相位和极性组合形成 4 种工作模式(Mode 0、1、2、3)。这 4 种模式根据 SCLK 的极性(CPOL)和相位(CPHA)决定数据的采样和发送时刻。
特点
- 全双工同步通信: SPI 同时进行数据发送和接收,主设备和从设备可以同时发送和接收数据。
- 速度快: 由于是硬件控制的同步通信,SPI 的传输速度较高,通常比 I²C 等其他协议更快。
- 多从设备: 一个主设备可以控制多个从设备,通过单独的CS 线选择不同的从设备。
- 简单协议: SPI 协议没有复杂的仲裁或地址机制,相对容易实现。
SPI寻址方式
在 SPI 通信中,寻址方式主要是通过片选(Chip Select, CS)线来实现的。与 I²C 等协议不同,SPI 没有内置的寻址机制,具体是通过以下方式选择和管理从设备的:
1. 片选(Chip Select, CS)
SPI 使用片选线(也称为从选择线,SS/CS)来选择与哪个从设备进行通信,主设备需要向对应从设备的CS线上发送使能信号。每个从设备通常都有自己独立的 CS 引脚。当主设备需要与某个从设备通信时,它会将对应从设备的 CS 线拉低(即置为低电平,active low,高电平也可以,根据从机而定),表示选择该从设备进行通信。其他未被选中的从设备保持 CS 线高电平,不参与通信。
2. 多从设备通信
如果在一个 SPI 总线上有多个从设备,主设备需要为每个从设备提供单独的 CS 线。典型的 SPI 多从设备通信过程如下:
- 主设备通过拉低某个从设备的 CS 线来选择该从设备。
- 其他未选中的从设备的 CS 线保持高电平,因此它们不会响应 SPI 通信信号。
- 选中设备通过 MOSI 线接收数据,通过 MISO 线向主设备发送数据。
- 当通信结束后,主设备将该从设备的 CS 线拉高,停止与该设备的通信。
例如,若有 3 个从设备,主设备可能需要 3 根 CS 线分别控制每个从设备,标记为 CS1、CS2、CS3。当主设备要与从设备 2 通信时,会拉低 CS2,进行通信,而 CS1 和 CS3 保持高电平。
3. 菊花链(Daisy-Chain)模式
在某些特殊场景下,多个从设备可以通过 菊花链 连接在一个 SPI 总线上。菊花链模式下,从设备之间依次连接,数据从一个从设备流向下一个从设备。这种模式可以通过减少主设备上的 CS 线数量来节省引脚,但通信方式较为复杂。
在菊花链模式下,主设备通过串行时钟(SCLK)发送数据,数据依次经过每个从设备。主设备发送的数据经过所有从设备后,最后一个从设备将数据回传给主设备。此模式通常用于某些特定类型的设备,如 LED 驱动器或移位寄存器。
4. 地址寄存器(应用层)
虽然 SPI 协议本身没有设备地址机制,但可以通过应用层协议来实现类似的寻址功能。主设备发送的第一字节或前几位可以定义为设备的虚拟地址,只有匹配该地址的从设备会响应。在这种方式下,SPI 寻址逻辑需要通过硬件或软件协议来设计和实现。
SPI通信过程
时钟信号生成(SCLK)
主设备生成的时钟信号 (SCLK) 用于同步数据的传输。数据在时钟的上升沿或下降沿进行采样或发送(取决于设置的 CPOL 和 CPHA 模式)。
数据传输(MOSI/MISO)
- 数据发送(MOSI): 主设备通过 MOSI(Master Out Slave In)线向从设备发送数据。主设备和从设备在时钟的相应沿根据协议设置同步数据发送。
- 数据接收(MISO): 同时,从设备可以通过 MISO(Master In Slave Out)线向主设备发送数据。由于 SPI 是全双工通信,数据发送和接收可以在同一时刻进行。
通常数据位数为 8 位,主设备每发送一个字节,从设备无需应答主设备,发完一个数据之后,立即再发送下一个字节。数据的传输顺序一般是从最高位(MSB)到最低位(LSB),但也可以通过配置改变。
数据采样与移位
- 在数据传输过程中,数据位在时钟的某个边沿被送出,在另一边沿被接收。具体的数据采样时刻取决于时钟的极性(CPOL)和相位(CPHA)。
- 主设备和从设备内部有 移位寄存器,每次时钟脉冲会导致移位寄存器中的数据往左移一位,直至完成整个字节的发送和接收。
通信时序图
极性和相位
在 SPI 通信中,时钟极性(CPOL)和相位(CPHA)是用于定义时钟信号的特性和数据采样时间的两个重要参数。这两个参数决定了数据在何时发送和接收。为了确保主设备和从设备能够正确通信,双方的时钟极性和相位必须一致。
1. 时钟极性(CPOL)
CPOL 定义了时钟信号在空闲状态下的电平。
- CPOL = 0:空闲时钟线为 低电平。
- CPOL = 1:空闲时钟线为 高电平。
2. 时钟相位(CPHA)
CPHA 定义了数据采样的时刻,即在时钟的哪个边沿对数据进行采样。
- CPHA = 0:数据在第一个时钟边沿(时钟脉冲的第一个跳变沿,如上升沿或下降沿)进行采样或发送。
- CPHA = 1:数据在第二个时钟边沿(时钟脉冲的第二个跳变沿,如上升沿或下降沿)进行采样或发送。
SPI 的 4 种工作模式
由 CPOL 和 CPHA 的组合,SPI 有 4 种工作模式。这些模式规定了时钟信号的特性和数据传输的时序。主设备和从设备必须工作在相同的模式下,才能保证通信的正确性。
模式 0:CPOL = 0,CPHA = 0
- 时钟空闲状态为低电平。
- 数据在上升沿(第一个边沿)采样,在下降沿发送。
- 时钟处于低电平,数据在第一个上升沿采样。
模式 1:CPOL = 0,CPHA = 1
- 时钟空闲状态为低电平。
- 数据在下降沿(第二个边沿)采样,在上升沿发送。
- 时钟处于低电平,数据在第一个上升沿发送,第二个下降沿采样。
模式 2:CPOL = 1,CPHA = 0
- 时钟空闲状态为高电平。
- 数据在下降沿(第一个边沿)采样,在上升沿发送。
- 时钟处于高电平,数据在第一个下降沿采样。
模式 3:CPOL = 1,CPHA = 1
- 时钟空闲状态为高电平。
- 数据在上升沿(第二个边沿)采样,在下降沿发送。
- 时钟处于高电平,数据在第一个下降沿发送,第二个上升沿采样。
如何选择 CPOL 和 CPHA
- CPOL 决定了空闲时钟的电平状态(高电平或低电平)。
- CPHA 决定了数据在第一个边沿(上升沿或下降沿)还是第二个边沿进行采样。
- 不同的设备可能要求不同的工作模式,选择 CPOL 和 CPHA 时需参照从设备的规格文档。主设备和从设备的 SPI 模式必须匹配才能成功通信。