打工人日报#20251202
2C 和 SPI 并非随便选择几个引脚然后设置时序就能实现,虽然从原理上理解它们基于特定时序通信,但实际应用中有诸多限制与要求:
I2C
引脚特性
SCL(时钟线)和 SDA(数据线):I2C 标准规定使用这两根线进行通信。在大多数微控制器中,通常有特定的引脚被指定为 I2C 功能引脚,这些引脚具备开漏输出特性 。开漏输出意味着引脚只能拉低电平,高电平需要通过上拉电阻到电源来实现。例如,STM32 系列微控制器,有专门的 I2C 外设引脚,如 PB6(SCL)和 PB7(SDA)可作为 I2C1 的默认引脚。
上拉电阻:由于 I2C 引脚的开漏特性,必须接上拉电阻。上拉电阻的值通常在 1kΩ - 10kΩ 之间,常见取值为 4.7kΩ。上拉电阻的作用是在总线空闲时将 SCL 和 SDA 线拉高到高电平,确保信号的正常传输和电平状态的稳定。
时序要求严格
起始和停止条件:起始条件是当 SCL 为高电平时,SDA 由高电平向低电平跳变;停止条件是当 SCL 为高电平时,SDA 由低电平向高电平跳变。这些条件的时序要求非常精确,例如起始条件下 SCL 高电平期间 SDA 的电平变化必须在规定的时间内完成,否则从设备可能无法正确识别起始信号。
数据传输:数据在 SCL 的低电平期间改变,在 SCL 高电平期间保持稳定以供从设备采样。每个数据位的传输都要严格遵循这种时序,并且数据传输的速率也有规定,标准模式下速率为 100kbps,快速模式为 400kbps,高速模式可达 3.4Mbps,不同模式对时序的要求不同。
SPI
引脚功能特定
MOSI(主机输出从机输入)、MISO(主机输入从机输出)、SCK(串行时钟)和 SS(从机选择):SPI 通信至少需要这四根线(有些简单应用中可能会共享某些线)。在不同的微控制器中,这些信号通常对应特定的引脚。例如,Arduino 的 SPI 通信,MOSI 对应 D11 引脚,MISO 对应 D12 引脚,SCK 对应 D13 引脚,SS 引脚可根据实际连接的从设备选择不同引脚。
引脚复用:很多微控制器的引脚具有复用功能,SPI 相关引脚可能会与其他外设功能复用。例如,在一些芯片中,SPI 的 SCK 引脚可能同时也能作为普通 GPIO 或者其他通信接口的时钟引脚,这就需要通过配置寄存器来选择使用 SPI 功能。
时序模式多样
四种工作模式:SPI 有四种工作模式,由时钟极性(CPOL)和时钟相位(CPHA)决定。CPOL 决定时钟空闲时的电平状态(0 为低电平空闲,1 为高电平空闲),CPHA 决定数据采样的时钟沿(0 为在时钟的第一个沿采样,1 为在时钟的第二个沿采样)。主机和从机必须配置为相同的工作模式才能正常通信,例如主机设置为 CPOL = 0,CPHA = 0 模式,从机也需要设置为相同模式。
速率限制:SPI 的数据传输速率取决于主机的时钟发生器和相关寄存器配置,同时也受到硬件电路和从设备的限制。过高的传输速率可能会导致信号失真、数据传输错误等问题,例如在长距离传输或者连接低速从设备时,需要适当降低传输速率。
阅读
《命运》
