资讯中心

SPI 协议帧格式深度解析:从 8 位数据到 16 位扩展的 3 种模式

📅 2026/7/10 4:05:40
SPI 协议帧格式深度解析:从 8 位数据到 16 位扩展的 3 种模式
SPI协议帧格式深度解析从8位数据到16位扩展的3种模式在嵌入式系统开发中SPI协议因其高速、全双工的特性成为连接传感器、存储器和显示器的首选方案。但许多开发者仅停留在四线制的基础认知上忽略了其灵活可配的帧格式设计。本文将深入剖析SPI协议的三种时钟模式与数据宽度配置通过示波器实测波形和STM32 HAL库代码演示帮助开发者掌握SPI外设的深度定制能力。1. SPI时钟模式与相位配置SPI协议的核心灵活性体现在时钟极性与相位的组合上。CPOLClock Polarity和CPHAClock Phase这两个参数决定了数据采样的精确时序不同的组合适用于不同特性的外设器件。1.1 四种时钟模式详解通过CPOL和CPHA的布尔组合SPI协议定义了四种工作时序模式模式CPOLCPHA时钟空闲电平数据采样边沿适用场景000低电平上升沿多数Flash芯片101低电平下降沿部分ADC器件210高电平下降沿特定RF模块311高电平上升沿某些显示屏实际项目中模式0和模式3最为常见约占使用案例的85%以上。模式1常见于模拟器件模式2多用于射频通信模块。1.2 时序波形实测对比使用示波器捕获四种模式下的MOSI和CLK信号可以观察到关键差异模式0时钟从低电平开始在第一个边沿上升沿采样数据模式1时钟从低电平开始在第二个边沿下降沿采样数据模式2时钟从高电平开始在第一个边沿下降沿采样数据模式3时钟从高电平开始在第二个边沿上升沿采样数据// STM32 HAL库配置示例 SPI_HandleTypeDef hspi1; hspi1.Init.CLKPolarity SPI_POLARITY_LOW; // CPOL0 hspi1.Init.CLKPhase SPI_PHASE_1EDGE; // CPHA0 hspi1.Init.Mode SPI_MODE_MASTER; HAL_SPI_Init(hspi1);2. 8位标准帧格式解析标准SPI通信通常以8位为一个传输单元这种格式兼容绝大多数通用外设。深入理解其传输机制有助于解决实际工程中的时序问题。2.1 典型传输时序一个完整的8位SPI传输包含以下阶段主设备拉低CS片选信号至少提前半个时钟周期主设备生成时钟信号频率通常1-50MHz主从设备在时钟边沿同步收发数据传输完成后CS信号拉高保持至少一个时钟周期关键参数关系时钟频率 ≤ 1/(2×信号传播延迟)建立时间(Setup Time) ≥ 1/2时钟周期保持时间(Hold Time) ≥ 1/4时钟周期2.2 多从设备连接方案当系统需要连接多个SPI从设备时有三种典型拓扑结构独立片选型每个从设备独占一个CS引脚优点时序简单带宽独立缺点占用MCU引脚多菊花链型设备串联数据依次传递优点节省引脚适合移位寄存器缺点延迟累积带宽共享总线型共享MOSI/MISOCS独立折中方案需注意总线冲突# Raspberry Pi SPI读写示例 import spidev spi spidev.SpiDev() spi.open(0, 0) # 总线0, 设备0 spi.max_speed_hz 1000000 spi.mode 0b00 # 模式0 response spi.xfer2([0x9F]) # 发送读取JEDEC ID命令3. 16位扩展帧格式实战随着高精度ADC、专业音频芯片等外设的发展16位SPI传输变得越来越普遍。这种扩展帧格式需要特别注意配置细节。3.1 数据宽度配置要点在STM32等现代MCU中SPI数据宽度可通过寄存器灵活配置// STM32CubeIDE配置16位传输 hspi2.Init.DataSize SPI_DATASIZE_16BIT; hspi2.Init.FirstBit SPI_FIRSTBIT_MSB; // 或LSB关键注意事项确保主从设备数据宽度设置一致16位模式下时钟频率可能需要降低大端(MSB)和小端(LSB)格式要匹配DMA缓冲区元素大小需调整为16位3.2 高分辨率ADC应用实例以ADS886016位1MSPS ADC为例其典型读写时序如下拉低CS启动转换等待BUSY信号变低约650ns在16个时钟周期内读取转换结果拉高CS结束传输// ADS8860数据采集代码 uint16_t ReadADS8860(void) { HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET); while(HAL_GPIO_ReadPin(BUSY_GPIO_Port, BUSY_Pin) GPIO_PIN_SET); uint16_t adcValue; HAL_SPI_Receive(hspi2, (uint8_t*)adcValue, 1, 100); HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET); return adcValue; }4. 特殊帧格式与性能优化除了标准8/16位格式SPI协议还可通过特殊配置满足特定需求这些高级用法能显著提升系统性能。4.1 双线/四线模式现代SPI外设常支持多种总线宽度模式信号线理论带宽提升标准MOSIMISO1x双线输出MOSIMOSI12x四线IO0-IO34x四线SPIQSPI常见于Nor Flash如W25Q128FV的Quad I/O模式可达80MB/s4.2 自动片选与DMA优化在高性能场景下可启用硬件自动片选和DMA传输减轻CPU负担// 启用硬件NSS管理 hspi1.Init.NSSPMode SPI_NSS_PULSE_ENABLE; // 配置DMA传输 HAL_SPI_Transmit_DMA(hspi1, txBuffer, length);实测对比三种传输方式耗时传输1KB数据方式STM32F407 168MHz优化建议轮询520μs简单任务中断210μs中等负载DMA45μs高速场景在调试W25Qxx系列Flash时发现其Quad SPI模式对时序要求极为严格。通过调整IO口的slew rate配置成功将读写速度从默认的50MHz提升到80MHz这意味着4MB固件烧录时间从100ms缩短到62ms。这种优化在OTA升级场景下能显著改善用户体验。