Skip to content

时序

SPI 总线:直来直去的“行动派”

SPI 是全双工,时序比 I2C 简单得多,它没有复杂的 Start/Stop 组合信号,完全靠 CS (片选)SCK (时钟) 控制。

1. 开始与结束

  • 开始:CS 引脚从 高 -> 低。只要 CS 变低,从机就开始从 MOSI 听指令。
  • 结束:CS 引脚从 低 -> 高。CS 一变高,从机立马切断与总线的联系(MISO 变高阻态)。

2. 写/读 数据时序 (同时进行!)

SPI 是环形移位寄存器结构。主机发出的每一个 bit,同时也对应着从机发回来的一个 bit。

具体情况结合 极性相位

  • 写指令/数据
    1. CS_Low()
    2. MOSI 线:主机在时钟边沿(比如上升沿)把数据放上去。
    3. 从机采样:从机在对应的边沿读取数据。
    4. CS_High()
  • 读数据 (最经典的坑)
    • 你想读数据,不能只等着收
    • 你必须在 MOSI 线上发送一个 Dummy Byte (哑字节,通常是 0xFF 或 0x00)
    • 你发出去 8 个时钟脉冲的同时,MISO 线上就会把从机的数据“挤”进你的单片机。
特征I2C (IIC)SPI
开始信号SCL高时,SDA 下降沿CS 拉低
结束信号SCL高时,SDA 上升沿CS 拉高
读/写控制靠地址字节的最后1位 (0写/1读)靠发送具体的指令字节 (如 0x03 读)
数据采样SCL高电平期间保持数据稳定SCK 的上升沿下降沿(看模式)
应答机制必须有 ACK/NACK (第9个时钟)无硬件应答 (发出去就不管了)
空闲状态SDA 和 SCL 都是高电平 (上拉电阻)CS 高,MOSI/MISO/SCK 看配置