硬件设计:接口--SPI总线
参考资料:SPI协议及其工作原理浅析
SPI(Serial Perripheral Interface,串行外围设备接口)是摩托罗拉(Motorola)公司推出的一种同步串行接口技术,是一种高速的、全双工、同步的通信总线。常作为MCU外设芯片串行扩展接口,主要应用于EEPROM、FLASH、实时时钟、AD转换器、数字信号处理器和数字信号解码器之间。
一、SPI通信原理
1、采用主从模式的控制方式
SPI规定了两个SPI设备之间通信必须由主设备(Master)来控制次设备(Slave),Master设备可以通过对Slave设备进行片选来控制多个Slave设备,SPI协议还规定Slave设备本身不能产生或控制时钟信号,必须由Master设备通过SCLK管脚提供给Slave设备,没有Clock,则Slave设备不能正常工作。
2、采用同步方式传输数据
Master设备需要根据从机的工作模式等来配置控制寄存器并产生相应的时钟信号,从而保证数据在两个设备之间是同步传输的。
3、数据传输
SPI设备数据传输的工作原理如图1所示,Master中的8位数据寄存器和Slave中的8位数据寄存器通过信号线(MOSI、MISO)连接而组成一个分布式的16位数据寄存器;当执行数据传输操作时,该16位寄存器按照Master提供的时钟信号(SCLK)串行移动8位,所以Master和Slave中寄存器的数据就实现了数据交换;之后再被自动装入接收缓冲器中,并将接收缓冲器满标志位(BF)和中断标志位(SSPIF)置为高电平;而Master或Slave检测到标志位发生变化后,就会去读取接收缓冲器中的数据,这样就完成了一次通信过程。
图1 SPI内部结构简易示意图
二、SPI总线结构
由SPI工作原理可知,SPI总线需要包含两条信号线(MOSI、MISO)和一条时钟线(SCLK),但是由于SPI是一个多从机系统,所以需要增加1条从设备选择信号线(SS)来选择需要通信的Slave设备(每个Slave设备都需要单独的从设备选择信号来控制)。这四条信号线的详细作用介绍如下:
SS(Slave Select):从设备选择信号线,常称为片选(Chip Select)信号线。当有多个SPI从设备与主机相连时,设备的其它信号线SCLK、MOSI及MISO同时并联到相同的SPI总线上,即无论有多少个从设备,都共同只使用这3条总线;而每个从设备都有独立的这一条CS信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。当主机要选择从设备时,把该从设备的CS信号线设置为低电平,该从设备即被选中,即片选有效,接着主机开始与被选中的从设备进行SPI通讯;所以SPI通讯以CS线置低电平为开始信号,以CS线被拉高作为结束信号。
MOSI(Master Output Slave Input):主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,即这条线上数据的方向为主机到从机。
MISO(Master Input Slave Output):主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机。
SCLK(Serial Clock):时钟信号线,用于通讯数据同步。它由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不一样,如STM32的SPI时钟频率最大为Fpclk/2,两个设备之间通讯时,通讯速率受限于低速设备。
扩展:SPI通信有4种不同的模式,不同的从设备可能在出厂就是配置为某种模式,这是无法改变的;但我们的通信双方必须工作在同一模式下,所以我们可以通过对CPOL(时钟极性)和CPHA(时钟相位)的配置来设置我们的主设备的工作模式;CPOL是用来配置SCLK的电平的空闲态或者有效态时的电平,CPHA是用来配置数据采样是发生在上升沿还是下降沿。具体如下:
Mode0:CPOL=0,CPHA=0;空闲态时SCLK=0,数据在上升沿采样,在下降沿移位;
Mode1:CPOL=0,CPHA=1;空闲态时SCLK=0,数据在下降沿采样,在上升沿移位;
Mode2:CPOL=1,CPHA=0;空闲态时SCLK=1,数据在上升沿采样,在下降沿移位;
Mode3:CPOL=1,CPHA=1;空闲态时SCLK=1,数据在下降沿采样,在上升沿移位;
需要注意的是:因为我们的SPI通信并不像UART或者IIC通信那样有专门的通信周期、专门的通信起始信号、专门的通信结束信号;所以我们的SPI协议能够通过控制时钟信号线,当没有数据交流的时候我们的时钟线要么保持高电平要么保持低电平。
扩展
1、SPI设备内部详细结构如图2所示,主要组件包括状态寄存器、控制寄存器和数据寄存器,数据位移逻辑单元,波特率发生器,主从控制逻辑单元和端口控制逻辑单元。
图2 SPI内部结构图
2、由于在SPI Flash的通信中,全双工并不常用,因此扩展了标准SPI中MOSI、MISO的用法,使其工作在半双工,用于加倍数据传输,这就形成了Dual SPI;在Dual SPI的基础上再增加两条信号线(SIO2、SIO3),可以在一个时钟内传输4bit数据,使传输速率再次加倍,就形成了Qual SPI;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?