news 2026/3/1 10:48:30

SPI通信协议详解:从基础概念到硬件配置与编程实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SPI通信协议详解:从基础概念到硬件配置与编程实现

一、SPI概念

SPI(Serial Peripheral Interface,串行外设接口)是一种同步、全双工、高速的串行通信总线协议,广泛用于微控制器(MCU)与各种外围设备(如传感器、存储器、显示屏、ADC/DAC 等)之间的短距离通信。

二、SPI 的四根基本信号线

信号线全称方向功能
SCLKSerial Clock主 → 从时钟信号,由主设备生成
MOSIMaster Out Slave In主 → 从主设备发送数据给从设备
MISOMaster In Slave Out从 → 主从设备发送数据给主设备
CS / SSChip Select / Slave Select主 → 从片选信号,低电平有效,用于选中某个从设备

三、SPI 的工作模式:CPOL 与 CPHA

SPI ,由两个参数决定:

  1. CPOL(Clock Polarity,时钟极性)
    • CPOL = 0:SCLK 空闲时为低电平
    • CPOL = 1:SCLK 空闲时为高电平
  2. CPHA(Clock Phase,时钟相位)
    • CPHA = 0:在第1个时钟边沿采样数据
    • CPHA = 1:在第2个时钟边沿采样数据
四种模式时序图

三、硬件连接

ECSPI3 信号复用源(ALT5)对应 GPIO
MISOUART2_RTS_BGPIO1_IO14
MOSIUART2_CTS_BGPIO1_IO15
SCLKUART2_RX_DATAGPIO1_IO16
SS0 (CS)——(未使用硬件 SS0)GPIO1_IO20(软件控制)

四、驱动代码

1. 引脚复用与电气特性配置

//复用功能 IOMUXC_SetPinMux(IOMUXC_UART2_RTS_B_ECSPI3_MISO, 0); IOMUXC_SetPinMux(IOMUXC_UART2_CTS_B_ECSPI3_MOSI, 0); IOMUXC_SetPinMux(IOMUXC_UART2_RX_DATA_ECSPI3_SCLK, 0); IOMUXC_SetPinMux(IOMUXC_UART2_TX_DATA_GPIO1_IO20, 0); 、 //电气特性 IOMUXC_SetPinConfig(IOMUXC_UART2_RTS_B_ECSPI3_MISO, 0x10B1); IOMUXC_SetPinConfig(IOMUXC_UART2_CTS_B_ECSPI3_MOSI, 0x10B1); IOMUXC_SetPinConfig(IOMUXC_UART2_RX_DATA_ECSPI3_SCLK, 0x10B1); IOMUXC_SetPinConfig(IOMUXC_UART2_TX_DATA_GPIO1_IO20, 0x10B1);
  • 将 UART2 相关引脚复用为 ECSPI3 的 MISO、MOSI、SCLK 功能,CS 保留为 GPIO。
  • 0x10B1配置引脚为高速、100K 上拉、施密特触发,适用于稳定高速 SPI 通信。

2.片选(CS)GPIO 初始化

//片选信号线闲时为高 GPIO1->GDIR |= (1 << 20); GPIO1->DR |= (1 << 20);
  • GPIO1_IO20 配置为输出,默认高电平,符合 SPI 器件“低电平有效”的片选逻辑。
  • 实际通信时需软件手动拉低/拉高 CS 控制传输起止。

3.ECSPI3 核心寄存器配置

(1)CONREG(控制寄存器)

ECSPI3->CONREG = 0; ECSPI3->CONREG |= (7 << 20) | (0x0E << 12) | (2 << 8) | (1 << 4) | (1 << 3) | (1 << 0);
  • 设置数据宽度为 8 位,SCLK 分频为 15(约 4.4 MHz),工作在 SPI Mode 0。
  • 启用 TX/RX FIFO 并激活 ECSPI 模块。

(2)CONFIGREG(配置寄存器)

ECSPI3->CONFIGREG = 0; ECSPI3->CONFIGREG |= (1 << 20) | (1 << 4) | (1 << 0);

4.全双工数据收发函数

unsigned int spi3_ch0_write_and_read(unsigned int data) { unsigned int ret = 0; ECSPI3->CONREG &= ~(3 << 18); while((ECSPI3 ->STATREG & (1 << 0)) == 0); ECSPI3->TXDATA = data; while((ECSPI3 ->STATREG & (1 << 3)) == 0); ret = ECSPI3->RXDATA; return ret; }
  • 采用轮询方式等待 FIFO 状态,实现同步发送与接收。
  • 调用者需自行管理 CS 信号,函数本身仅处理数据收发。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/28 5:22:55

告别低效办公|5 款高性价比低代码工具,覆盖全场景

有没有小伙伴跟我一样&#xff0c;每天上班一半时间都在做无用功&#xff1f; 重复填表单、手动走审批、整理杂乱的业务数据&#xff0c;明明是简单的事&#xff0c;却要反复折腾&#xff0c;耗时间又耗精力&#xff0c;忙到下班还没做完核心工作&#xff0c;越忙越低效&#…

作者头像 李华
网站建设 2026/2/27 12:45:02

ZBrush 细节优化:笔刷组合与拓扑重构避坑指南

ZBrush角色雕刻的核心的是“从粗到细”&#xff0c;而细节优化则是决定作品质感与可用性的关键环节——笔刷组合决定细节的真实度&#xff0c;拓扑重构决定模型的实用性。很多新手在雕刻后期&#xff0c;容易陷入“细节杂乱、笔刷滥用、拓扑混乱”的误区&#xff0c;导致作品看…

作者头像 李华
网站建设 2026/3/1 2:54:23

python基于微信小程序的宠物领养追踪平台

目录 摘要概述核心功能技术实现应用价值 开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 摘要概述 基于微信小程序的宠物领养追踪平台旨在通过数字化手段优化宠物领养流程&#xff0c;结合…

作者头像 李华
网站建设 2026/2/26 10:03:22

YOLOE训练成本低3倍?真实数据对比告诉你答案

YOLOE训练成本低3倍&#xff1f;真实数据对比告诉你答案 1. 开门见山&#xff1a;不是营销话术&#xff0c;是实测结果 你可能已经看过不少“XX模型训练快、效果好”的宣传&#xff0c;但真正敢把训练耗时、显存占用、收敛轮次这些硬指标摊开来说的&#xff0c;不多。 YOLOE…

作者头像 李华
网站建设 2026/2/24 9:19:56

Clawdbot代理网关惊艳效果:Qwen3:32B驱动Agent完成‘根据用户画像生成营销文案→A/B测试→ROI预测’闭环

Clawdbot代理网关惊艳效果&#xff1a;Qwen3:32B驱动Agent完成‘根据用户画像生成营销文案→A/B测试→ROI预测’闭环 1. 什么是Clawdbot&#xff1f;一个让AI代理真正“活起来”的统一平台 Clawdbot不是又一个模型调用工具&#xff0c;也不是简单的API转发层。它是一个真正意…

作者头像 李华