
近津薪荼 [个人主页]个人专栏《近津薪荼的算法日迹》《c基础知识详解》《c语言基础知识详解》《Linux操作系统及网络基础知识分享》✨不要物化矮化弱化钝化自己保持锋芒不要停止学习这个世界上只有两个人真正在注意着你八岁的你和八十岁的你他们此刻正在注视着你一个希望你勇敢开始一个希望你不留遗憾本期知识点导图SPI 通信基础1. 什么是 SPISPI 全称Serial Peripheral Interface是一种高速、同步、串行、主从结构、全双工通信协议主要用于 MCU 与传感器、Flash、显示屏等板级设备之间的短距离通信。SPI 的几个特点串行数据按 bit 逐位传输。同步主从设备共用 SCK 时钟。主从结构由 Master 控制通信过程。全双工发送和接收可以同时进行。高速通信速度通常较高。谁产生 SCK谁就是 Master。1.1 SPI 的四类信号线标准 SPI 可以按四类信号理解信号方向作用SCKMaster → Slave提供同步时钟MOSIMaster → Slave主机向从机发送数据MISOSlave → Master从机向主机发送数据NSS / CSMaster → Slave选择通信从机NSS 可以由普通 GPIO 实现因此有些参考手册会把 SPI 描述为三线接口。SCKSCK 全称Serial Clock由主机产生。数据的采样和变化都与 SCK 的边沿有关。MOSIMOSI 全称Master Out / Slave In表示Master → Slave主机通过 MOSI 发送数据。MISOMISO 全称Master In / Slave Out表示Slave → Master从机通过 MISO 向主机发送数据。SPI 接线通常是同名连接SCK → SCK MOSI → MOSI MISO → MISONSS / CSNSS 或 CS 用于片选。通常CS 0 从机被选中 CS 1 从机未被选中多个从机可以共享 SCK、MOSI、MISO但通常每个从机需要独立的 CS。SPI 片上外设最终通过 GPIO 复用功能与外部设备连接。1.2 SPI、I²C、UART 对比特点SPII²CUART通信方式同步同步异步时钟线SCKSCL无数据方向全双工半双工全双工数据线MOSI、MISOSDATX、RX多设备选择CS地址通常点对点引脚数量较多少少通信速度较高较低较低SPI 的主要优势是速度快、支持全双工、协议简单。1.3 SPI 的应用场景常见 SPI 外设包括SPI FlashLCDOLEDADCSD 卡以太网模块Wi-Fi 模块SPI 比较适合设备数量不多但对通信速度要求较高的板级通信场景。2. SPI 协议初步理解2.1 片选逻辑一个 SPI 主机可以连接多个从机┌── Slave 1 Master ───┼── Slave 2 └── Slave 3SCK、MOSI、MISO 可以共享但每个从机分别使用CS1 CS2 CS3例如CS1 0 CS2 1 CS3 1表示 Slave 1 被选中。SPI 不通过地址选择从机而是直接通过 CS 完成片选。2.2 未被选中的从机多个从机的 MISO 可能连接到同一根线上。如果多个从机同时输出就可能出现总线冲突。因此未被选中的从机MISO 必须进入高阻态。高阻态可以理解为该从机暂时与 MISO 总线断开。打个比方就像多个开关并联在同一根线上只有被选中的那个开关才接通其余开关全部断开这样数据线才不会互相打架。*。MOSI 不需要这样处理因为 MOSI 始终由主机输出从机只负责接收。2.3 SPI 同步全双工收发SPI 的数据传输由 SCK 边沿驱动。可以先假设上升沿改变数据 下降沿采样数据一个完整时钟周期包含两个边沿。主机和从机按照相同的 SCK 节拍工作。一个时钟周期内Master → Slave发送 1 bit Slave → Master发送 1 bit因此一个 SCK 周期完成 1 bit 数据交换。重复 8 个周期就可以交换 8 bit 数据。SPI 的全双工不是“先发后收”而是主机和从机同时进行数据交换。即使主机只想接收数据也需要同时发送数据来完成交换这些发送的数据可以是无意义的占位数据。3. SPI 时钟极性、相位与工作模式SPI 没有规定必须在哪个边沿采样数据因此引入CPOL CPHA3.1 CPOL时钟极性CPOL 全称Clock Polarity决定 SCK 空闲时的电平。CPOL 0 SCK 空闲时为低电平CPOL 1 SCK 空闲时为高电平第一边沿和第二边沿如果CPOL 0则第一边沿上升沿 第二边沿下降沿如果CPOL 1则第一边沿下降沿 第二边沿上升沿3.2 CPHA时钟相位CPHA 全称Clock Phase决定在哪个边沿采样数据、在哪个边沿改变数据。CPHA 0第一边沿采样 第二边沿改变数据CPHA 1第一边沿改变数据 第二边沿采样判断 SPI 时序CPOL ↓ 确定第一、第二边沿 ↓ CPHA ↓ 确定采样和改变数据的边沿3.3 SPI 四种工作模式CPOL 和 CPHA 都只有 0、1 两种状态因此组合成四种模式。ModeCPOLCPHA第一边沿第二边沿Mode 000上升沿采样下降沿改变Mode 101上升沿改变下降沿采样Mode 210下降沿采样上升沿改变Mode 311下降沿改变上升沿采样配置好 CPOL 和 CPHA 后SPI 硬件会自动产生对应时序。4. SPI 通信过程4.1 一次完整通信一次 SPI 通信可以表示为主机拉低 CS ↓ 选中从机 ↓ 主机产生 SCK ↓ MOSI / MISO 同时交换数据 ↓ 数据传输完成 ↓ 主机拉高 CS三类信号作用可以概括为CS和谁通信 SCK什么时候通信 MOSI / MISO传什么数据4.2 一个时钟周期内发生什么以 Mode 0 为例CPOL 0 CPHA 0可以得到SCK 空闲 0 第一边沿上升沿采样 第二边沿下降沿改变数据因为第一边沿就要采样所以第一位数据需要在上升沿之前提前准备好。上升沿Master 从 MISO 采样 Slave 从 MOSI 采样下降沿Master 改变 MOSI Slave 改变 MISO为下一个上升沿采样做准备。4.3 SPI 时序图怎么看看时序图可以按以下顺序1. 看 CS确认一次通信的开始和结束。2. 看 SCK 空闲电平判断 CPOL。3. 判断第一、第二边沿根据 CPOL 推导。4. 判断采样边沿根据 CPHA 判断在哪个边沿采样。5. 读取 MOSI / MISO只在采样边沿读取对应数据。6. 按时间顺序组合 bit例如 MSB Firstbit7 → bit6 → bit5 → ... → bit07.举个例子在图中第三个第一边缘信号来临时主机做的工作改变MOSI的数据4.4 SPI 数据传输参数4.4.1 MSB First / LSB First假设数据为0b10110010MSB First最高位先发送bit7 → bit6 → ... → bit0LSB First最低位先发送bit0 → bit1 → ... → bit7STM32 SPI 支持这两种方式。4.4.2 数据宽度STM32F1 SPI 支持8 bit 16 bit8 bit 模式下8 个 SCK 周期 ↓ 完成一个 8 bit 数据交换4.4.3 SPI 时钟频率SPI 的通信速度主要由 SCK 决定。例如SCK 1 MHz表示每秒约产生1 000 000 个时钟周期标准 SPI 每个周期交换 1 bit因此 SCK 频率直接决定理论 bit 传输速度。实际 SCK 频率受以下因素限制主机最高支持频率从机最高支持频率PCB 布线信号干扰信号完整性4.4.4 SPI 外设时钟与 SCKSTM32F103ZET6 中SPI1 → APB2 SPI2 → APB1 SPI3 → APB1时钟关系MCU 时钟树 ↓ APB 总线时钟 ↓ SPI 外设 ↓ 分频 ↓ SCK因此SPI 外设的输入时钟和最终输出的 SCK 不是同一个频率。SCK 是 SPI 外设对输入时钟进行分频后产生的通信时钟。5. 总结5.1 SPI 通信逻辑SPI 的完整逻辑CS 选择从机 ↓ Master 产生 SCK ↓ CPOL 决定空闲电平 ↓ CPHA 决定采样和改变数据的边沿 ↓ MOSI / MISO 同时交换数据 ↓ 一个周期交换 1 bit ↓ 按照 MSB / LSB 顺序组成完整数据5.2 SPI 优缺点优点速度快支持全双工协议简单同步通信适合高速板级设备通信缺点占用引脚较多每增加一个从机通常需要增加一根 CS没有 ACK 应答没有自带错误检测没有流控机制SPI 可以概括为主机通过 CS 选择从机通过 SCK 提供同步时钟主从双方通过 MOSI 和 MISO 在规定的时钟边沿同步交换数据。嗟食如果小编写的内容对佬有帮助还请大佬点点三连加关注哦佬的支持就是我前进的最大动力~期待与佬的再次相遇~