欢迎各位朋友关注“郝旭帅电子设计团队”公众号,本公众号会定时更新相关技术类资料、软件等等,感兴趣的朋友可以浏览一下本公众号的其他“模块”,希望各位朋友都能在本公众号获得一些自己想要的“东西”。
本篇主要介绍SPI接口
SPI(Serial Peripheral Interface)接口是一种高速、全双工、同步的串行通信总线协议,由摩托罗拉(现为 NXP 的一部分)开发,广泛应用于微控制器、传感器、存储器(如 Flash、SD 卡)、实时时钟、触摸屏等外围设备之间的短距离通信(同一个板卡或者接插板卡)。
SPI 的物理接口(信号线)
一个标准的 SPI 总线使用 4 根信号线:
SCLK Serial Clock 输出 串行时钟,由主设备产生并输出给所有从设备。数据在该时钟的上升沿或下降沿被采样。
MOSI Master Out, Slave In 输出 主设备数据输出,从设备数据输入。主设备通过这根线将数据发送给从设备。
MISO Master In, Slave Out 输入 主设备数据输入,从设备数据输出。从设备通过这根线将数据发送给主设备。
SS/CS Slave Select / Chip Select 输出 从设备选择(或片选)。由主设备控制,用于选择要进行通信的特定从设备。
在某些情况下,MOSI、MISO合并为一根双向线,主机发送或接收都通过这根线进行。
SPI接口支持一主多从的模式:
SPI 的核心特点
同步 (Synchronous):通信由主设备提供的时钟信号 (SCLK) 驱动和同步,所有数据的发送和接收都基于这个时钟脉冲。这意味着通信双方不需要复杂的波特率配置,时钟频率可以很高(可达几十 MHz)。
主从模式 (Master-Slave):通信系统中必须有一个(且通常只有一个)主设备,负责发起和控制通信。可以有一个或多个从设备。
简单高效:硬件实现简单,软件开销小,通信效率高,没有起始位、停止位等额外开销,是真正的“位搬移”协议。
无流控机制:SPI 协议本身没有定义数据确认或流控制机制,需要由更高层的协议或应用程序来确保数据的完整性和可靠性(由具体的芯片确定先发什么位,后发什么位,以及那些位代表是什么意思)。
SPI 的工作原理与数据交换
初始化:主设备将目标从设备的 SS 线激活,表示通信开始。
生成时钟:主设备开始产生 SCLK 时钟信号。
数据传输: 主设备通过 MOSI 线将 1 bit 数据发送出去。 从设备通过 MISO 线将 1 bit 数据发送出去。 数据是在时钟的边沿进行采样和移位的。具体在哪个边沿有效,由时钟极性 (CPOL) 和时钟相位 (CPHA) 决定。
结束通信:数据传输完毕后,主设备停止生成 SCLK,并将 SS 线拉高(释放),表示通信结束。
时钟极性 (CPOL) 和时钟相位 (CPHA)
spi 通信有四种不同的模式,不同的从设备可能在出厂时就已经配置为某种模式。通信的双方必须是工作在同一模式下,所以我们可以对主设备的 spi 模式进行配置,通过 CPOL(时钟极性)和 CPHA(时钟相位)来控制我们主设备的通信模式。
mode0:CPOL=0,CPHA=0; mode1:CPOL=0,CPHA=1; mode2:CPOL=1,CPHA=0; mode3:CPOL=1,CPHA=1;
时钟极性 CPOL 是用来配置 SCLK 在空闲时,应该处于的状态; 时钟相位 CPHA 用来配置在第几个边沿进行采样。 CPOL=0,表示在空闲状态时,时钟 SCLK 为低电平。 CPOL=1,表示在空闲状态时,时钟 SCLK 为高电平。 CPHA=0,表示数据采样是在第 1 个边沿。 CPHA=1,表示数据采样是在第 2 个边沿。
CPOL=0,CPHA=0:此时空闲态时,SCLK 处于低电平,数据 采样是在第 1 个边沿,也就是 SCLK 由低电平到高电平的跳变,所 以数据采样是在上升沿,数据发送是在下降沿。
CPOL=0,CPHA=1:此时空闲态时,SCLK 处于低电平,数据 发送是在第 1 个边沿,也就是 SCLK 由低电平到高电平的跳变,所 以数据采样是在下降沿,数据发送是在上升沿。
CPOL=1,CPHA=0:此时空闲态时,SCLK 处于高电平,数据 采集是在第 1 个边沿,也就是 SCLK 由高电平到低电平的跳变,所 以数据采集是在下降沿,数据发送是在上升沿。
CPOL=1,CPHA=1:此时空闲态时,SCLK 处于高电平,数据 发送是在第 1 个边沿,也就是 SCLK 由高电平到低电平的跳变,所 以数据采集是在上升沿,数据发送是在下降沿。
Mode 0 和 Mode 3 是最常见的两种。 SPI 常见应用场景
存储器:SPI Flash, SD Card (SPI 模式), EEPROM
显示设备:OLED 屏幕、TFT 液晶屏
通信模块:以太网控制器 (ENC28J60)、Wi-Fi/蓝牙模块 (常使用 UART 或 USB,但配置可能用 SPI)、RFID 读卡器 ADC/DAC(模数/数模转换器)
数字电位器
两个微控制器之间的高速通信
总结
SPI 是一种“简单粗暴”的高速通信协议。它的核心是四线制、主从同步和时钟模式。在使用时,最关键的三步是: 正确连接硬件(SCLK, MOSI, MISO, SS)。 查阅从设备手册,确定其要求的时钟模式 (CPOL/CPHA) 和最大时钟频率。 在主设备上正确配置 SPI 控制器(模式、频率等),并按照从设备的数据帧格式编写读写程序
本篇内容中有部分资源来源于网络,如有侵权,请联系作者。
2492