一、SPI总线
SPI接口是Motorola 首先提出的全双工三线/四线同步串行外围接口采用主从模式(Master Slave)架构。
时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI接口有2根单向数据线,为全双工通信。
SPI总线被广泛地使用在FLASH、ADC、LCD等设备与MCU间,要求通讯速率较高的场合。
二、SPI总线物理(拓扑结构)
SPI总共有4根总线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。
(1)MOSI:主器件数据输出,从器件数据输入
(2)MISO:主器件数据输入,从器件数据输出
(3)SCLK :时钟信号,由主器件产生
(4)/SS:从器件使能信号,由主器件控制(片选)
三、SPI总线协议
起始信号: NSS信号线由高变低,是SPI通讯的起始信号 (NSS是片选信号,使能信号)
结束信号:NSS信号由低变高,是SPI通讯的停止信号
数据传输:SPI使用MOSI及MISO信号线来传输数据,使用SCK信号线进行时钟同步。
数据同步:MOSI及MISO数据线在SCK的每个时钟周期传输一位数据高位在前低位在后,且数据输入输出是同时进行的。SPI每次数据传输可以 8 位或 16 位为单位,每次传输的单位数不受限制。
四、SPI的四种通信模式
通信模式:
由 时钟极性(CPOL)和时钟相位(CPHA) 的不同状态,SPI分成了四种模式,主机与从机需要工作在相同的模式下才可以正常通讯,因此通常主机要按照从机支持的模式去设置
1. 模式0 应用比较广泛
交换一个字节(模式0)
CPOL=0:空闲状态时,SCK为低电平
CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据
2. 模式1 逻辑比较顺畅
交换一个字节(模式1)
CPOL=0:空闲状态时,SCK为低电平
CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据
3. 模式2
交换一个字节(模式2)
CPOL=1:空闲状态时,SCK为高电平
CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据
4. 模式3
交换一个字节(模式3)
CPOL=1:空闲状态时,SCK为高电平
CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据
扩展
SPI模式0被广泛使用的原因
1. 兼容性:模式0(CPOL=0, CPHA=0)是最基本的SPI模式,许多SPI设备和微控制器默认支持这种模式,因此它具有很好的兼容性。
2. 简单性:在模式0下,时钟线(SCLK)在空闲时为低电平,数据在SCLK的上升沿被采样,在下降沿保持,这种时序简单直观,易于理解和实现。
3. 硬件设计:由于模式0的时序特性,它在硬件设计上可能更为简单,因为数据在时钟的上升沿采样,这与许多数字电路的设计习惯相符合。
4. 文档和资源:由于模式0的普遍性,相关的技术文档、开发工具和开发库往往以模式0为基础,为开发者提供了丰富的资源和支持。
5. 教育和培训:在教育和培训中,模式0常作为SPI协议的入门点,因为它的时序简单,易于教学和学习。
6. 广泛支持:大多数SPI器件都同时支持模式0和模式3,这使得在设计时可以选择使用这两种模式中的任何一种,而不需要对硬件进行特殊调整。