当前位置: 首页 > news >正文

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 信号,函数本身仅处理数据收发。
http://www.jsqmd.com/news/320195/

相关文章:

  • 2026年热门的刮板结晶蒸发器/工业废水蒸发器TOP实力厂家推荐榜
  • 工欲善其事,必先利其器:你的2026远程办公工具箱更新了吗?
  • 【开题答辩全过程】以 基于Spring Boot的化妆品销售系统的设计与实现为例,包含答辩的问题和答案
  • 快来解锁新春技能!巧用ToDesk把“远程”变成“团圆”的温馨助力
  • 【开题答辩全过程】以 基于Spring Boot的旅游推荐系统的设计与实现为例,包含答辩的问题和答案
  • 【开题答辩全过程】以 基于spring boot的国学诗词网站设计与实现--为例,包含答辩的问题和答案
  • 【开题答辩全过程】以 基于spring boot的老年人相亲管理系统为例,包含答辩的问题和答案
  • 2026年比较好的杭州金蝶软件技术/杭州金蝶软件哪家强
  • 真实身份,可溯可验:人脸核身技术推动网约车行业身份认证智能化升级
  • 2026年口碑好的焊接型打包箱房/华辉打包箱房厂家实力及用户口碑排行榜
  • 【开题答辩全过程】以 河环院快递服务系统为例,包含答辩的问题和答案
  • 2026年知名的吨包机/自动吨包机最新TOP品牌厂家排行
  • 2026年知名的精密部件视觉点数包装机/O型圈视觉点数包装机厂家推荐及采购指南
  • 2026年质量好的杭州服务业财务软件/杭州金蝶财务软件哪家专业
  • 超越降维:主成分分析组件的工程化实现与深度解析
  • 机器学习中都有哪些经典的模型调优方法?
  • 推理赋能售后:AI淘宝客服与电商智能客服破解复杂问题困局
  • 2026年热门的缠绕加热带/工业加热带厂家推荐及选购指南
  • 2026年热门的圆形电梯/别墅电梯厂家推荐及选购参考榜
  • Python pymodbus模块详解
  • 蓝桥杯JAVA--启蒙之路(七)继承多态
  • 2026年江苏光伏支架钢管实力厂家五强推荐与选型指南
  • 【软件测试】9_性能测试实战 _性能测试监控
  • 【软件测试】10_性能测试实战 _性能分析和调优
  • 2026年口碑好的布袋除尘器/低压长布袋除尘器行业内知名厂家排行榜
  • 【总结】25年最常用的10个AI工具推荐
  • 2026年靠谱的糖苷/癸基葡糖苷厂家最新推荐排行榜
  • 2026年热门的海上疏浚浮吊/港口浮吊最新TOP厂家排名
  • 2026年知名的木浆棉复合百洁布/压缩木浆棉源头厂家
  • 2026年知名的端氨基聚醚/环氧基封端烯丙基聚醚厂家最新用户好评榜