SPI通信 模式0更常用的原因
简单直接的答案是:SPI模式0之所以最常用,是因为它在硬件实现上最简单、最直接,这降低了芯片设计复杂度,提高了兼容性,并满足了绝大多数应用场景的需求。
下面我们从几个层面来详细解释为什么模式0会成为“默认”选择。
1. 回顾一下SPI的四种模式
SPI通信有四个模式,由时钟极性(CPOL, Clock Polarity)和时钟相位(CPHA, Clock Phase)两个参数组合而成:
CPOL:决定SCLK时钟线在空闲时的电平。
CPOL=0:空闲时SCLK为低电平。
CPOL=1:空闲时SCLK为高电平。
CPHA:决定数据在第几个时钟边沿被采样。
CPHA=0:数据在第一个时钟边沿(即第一个跳变沿)被采样。
CPHA=1:数据在第二个时钟边沿被采样。
由此产生的四种模式:
| 模式 | CPOL | CPHA | 空闲时钟 | 采样时刻 | 数据建立 |
|---|---|---|---|---|---|
| 模式0 | 0 | 0 | 低电平 | 第一个边沿(上升沿) | 在SCLK上升沿之前 |
| 模式1 | 0 | 1 | 低电平 | 第二个边沿(下降沿) | 在SCLK上升沿之后 |
| 模式2 | 1 | 0 | 高电平 | 第一个边沿(下降沿) | 在SCLK下降沿之前 |
| 模式3 | 1 | 1 | 高电平 | 第二个边沿(上升沿) | 在SCLK下降沿之后 |
2. 为什么模式0(CPOL=0, CPHA=0)最常用?
a) 硬件实现的简单性与自然性
这是最核心的原因。
逻辑电平的“归零”状态:在数字电路中,低电平(0)通常被视为“复位”或“空闲”状态。让时钟线在空闲时保持低电平,符合大多数逻辑电路的自然状态。上电时,逻辑引脚通常也是低电平,这减少了初始化过程中的不确定性和毛刺。
简单的采样逻辑:在模式0下,主机在SCLK的上升沿对MISO线进行采样,从机在SCLK的上升沿对MOSI线进行采样。这个“上升沿采样”是许多同步数字电路最直接、最基础的操作。从芯片设计的角度看,用时钟上升沿去触发一个锁存器或寄存器,是最标准、最省晶体管的设计。
相比之下:
模式1和3:需要在时钟的两个边沿都进行一些操作(例如,在一边沿切换数据,在另一边沿采样数据),对逻辑设计的要求稍高。
模式2:空闲时为高电平,在某些情况下可能需要额外的上拉电阻或考虑,不如低电平空闲来得直接。
b) 历史原因和广泛的生态系统
早期芯片的设定:许多早期、基础且使用广泛的SPI从设备(如EEPROM、ADC、温度传感器等)都默认使用模式0。例如,Microchip(Atmel)的许多EEPROM和TI的许多ADC都默认是模式0。
形成习惯和标准:由于这些关键器件使用了模式0,后续的微控制器(MCU)和芯片制造商也将其作为默认模式。这使得新的工程师在学习SPI时,首先接触的就是模式0,教材和示例代码也大多以模式0为例。久而久之,它就成为了一个“事实上的”工业标准。
c) 满足绝大多数应用场景
对于大多数中低速传感器、存储器、显示屏等外设,通信的时序要求并不极端。模式0提供的稳定性和简单的数据建立/保持时间已经足够。在性能上没有迫切的理由去选择其他更复杂的模式。
3. 其他模式在什么时候使用?
虽然模式0最常用,但其他模式的存在绝对有其必要性,主要用于解决特定的时序问题。
模式1和模式3:当数据准备需要更多时间时使用。
场景:有些从设备需要从主机的SCLK边沿触发后,花费一些时间来准备数据。如果使用模式0,数据必须在SCLK上升沿之前就准备好(建立时间)。如果从设备来不及,就可以使用模式1或3,这样数据是在第一个SCLK边沿(对于模式1是下降沿,对于模式3是上升沿)之后才被采样,给了从设备额外的半个时钟周期来准备数据。
模式2和模式3:当需要避免电平冲突时使用。
场景:在某些多主设备或热插拔(不常见)的场景中,空闲时为高电平(CPOL=1)可以避免总线冲突。因为如果多个设备同时连接到总线,一个输出低电平会强有力地拉低总线,而与输出高电平的设备产生冲突;而如果大家都输出高电平(空闲状态),冲突的风险就小得多。
一个重要的经验法则:
永远以从设备的数据手册为准! 在开始通信前,必须查阅你所使用的外设芯片的数据手册,确认它要求或支持哪种SPI模式。盲目使用模式0可能会导致通信失败。
总结
| 特性 | 模式0 | 其他模式 |
|---|---|---|
| 核心优势 | 硬件实现最简单、最自然 | 解决特定时序问题 |
| 流行度 | 最高,事实上的默认标准 | 特定应用 |
| 适用场景 | 绝大多数中低速传感器、存储器、显示屏等 | 需要额外数据准备时间的设备,或特定总线拓扑 |
| 设计哲学 | KISS原则(Keep It Simple, Stupid) | 为特殊需求提供灵活性 |
因此,SPI模式0的“更常用”源于其在工程上的简洁、高效和由此建立的强大生态系统,这完美地印证了计算机科学中的一个基本原则:简单性通常是最好的设计。
