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

spi总线

一、介绍

SPI总线(Serial Peripheral Interface,串行外设接口)是一种高速全双工同步串行通信总线,核心通过“主从架构+同步时钟”实现设备间数据传输,因结构简单、速率高,广泛用于MCU与传感器、存储芯片、显示模块等外设的短距通信。

 

二、核心架构:

主从控制,4线基础

SPI总线采用“一主多从”模式,所有设备共享时钟和数据线,通过片选信号区分不同从设备,基础通信需4根信号线(部分场景可简化),各线功能如下:

- SCLK(Serial Clock,串行时钟):由主设备(Master) 产生,用于同步主从设备的数据传输节奏,是“同步通信”的核心;

- MOSI(Master Out, Slave In,主出从入):主设备向从设备发送数据的单向信号线;

- MISO(Master In, Slave Out,主入从出):从设备向主设备返回数据的单向信号线;

- SS/CS(Slave Select/Chip Select,从设备选择):主设备通过拉低某一从设备的SS引脚,单独选中该设备(未被选中的从设备SS引脚为高电平,不响应总线通信),是“多从设备区分”的关键。

 

三、通信原理:同步时钟下的“位同步传输”

SPI的核心是“时钟同步数据”,主设备通过SCLK控制每一位数据的传输时机,主从设备在时钟的特定边沿(上升沿/下降沿)采样或发送数据,整个过程可分为3个关键步骤:

 

1. 选中从设备:主设备拉低目标从设备的SS引脚

主设备要与某一从设备通信时,首先将该从设备的SS引脚拉低(低电平有效,部分设备支持高电平有效,需硬件定义),此时其他从设备的SS引脚保持高电平,处于“休眠状态”,不接收总线上的SCLK和MOSI信号。

 

2. 同步传输:时钟边沿触发数据读写

主设备产生SCLK时钟信号,主从设备在时钟的预设边沿(由“时钟极性(CPOL)”和“时钟相位(CPHA)”定义)同步完成数据传输:

 

- 主设备在SCLK的某一边沿(如上升沿)将MOSI线的“1位数据”输出,从设备在同一边沿读取该数据;

- 同时,从设备在SCLK的另一边沿(如下降沿)将MISO线的“1位数据”输出,主设备在同一边沿读取该数据;

- 每一个SCLK周期传输1位数据,8个SCLK周期即可完成1字节(8位)数据的“全双工传输”(主→从、从→主同时进行)。

 

3. 结束通信:主设备拉高SS引脚

数据传输完成后,主设备将该从设备的SS引脚拉高,从设备退出通信状态,总线释放,可准备与下一个从设备通信。

 

四、关键参数:

CPOL与CPHA决定通信时序

SPI的通信时序由“时钟极性(CPOL)”和“时钟相位(CPHA)”两个参数定义,共4种组合(即4种“SPI模式”),主从设备必须使用相同的模式才能正常通信:

 

- CPOL(时钟极性):定义SCLK在“空闲状态”(无数据传输时)的电平:

- CPOL=0:空闲时SCLK为低电平;

- CPOL=1:空闲时SCLK为高电平。

- CPHA(时钟相位):定义“数据采样”发生在SCLK的第几个边沿:

- CPHA=0:数据在SCLK的“第一个边沿”(CPOL=0时为上升沿,CPOL=1时为下降沿)采样;

- CPHA=1:数据在SCLK的“第二个边沿”(CPOL=0时为下降沿,CPOL=1时为上升沿)采样。

 

五、核心特性:优势与局限

 

1. 优势:高速、灵活、全双工

- 高速传输:无起始位/停止位(区别于UART),仅需时钟同步,速率可达几Mbps到几十Mbps(取决于硬件支持);

- 全双工:MOSI和MISO独立,主从可同时收发数据,适合需要双向高速通信的场景(如SD卡、SPI Flash);

- 多从扩展:通过增加SS引脚,主设备可连接多个从设备,硬件结构简单(无需地址线,仅需1根SS对应1个从设备)。

 

2. 局限:短距、无硬件校验

- 传输距离短:因采用单端信号(无差分抗干扰设计),抗干扰能力弱,通常传输距离不超过10米,仅适合板内或板间短距通信;

- 无硬件校验:总线本身不自带奇偶校验或CRC校验,数据可靠性需通过软件协议(如添加校验位)保障;

- 主从依赖:从设备无法主动发起通信,必须由主设备控制,不适合需要从设备主动上报数据的场景(如传感器实时报警)。

 

六、总结

SPI总线的本质是“主设备主导的同步串行通信”,通过SCLK实现数据同步,用SS区分从设备,凭借高速全双工的优势成为短距外设通信的主流选择。实际应用中,需重点匹配主从设备的SS电平极性和SPI模式(CPOL/CPHA),同时通过软件校验弥补硬件无校验的不足,确保数据传输可靠。

http://www.xdnf.cn/news/19303.html

相关文章:

  • Python 实战:内网渗透中的信息收集自动化脚本(6)
  • 【Unity3D实例-功能-切换武器】切换武器(一)动画配置
  • FPGA CIC抽取滤波器设计
  • HarmonyOS 应用开发:基于API 12及以上的新特性与实践
  • TensorFlow 面试题及详细答案 120道(81-90)-- 其他框架/工具
  • 内核Sched调度关于find_idlest_cpu选核逻辑
  • OpenCV 图像处理实战与命令行参数配置:从轮廓检测到模板匹配
  • AI 重构内容创作:从文案生成到视频剪辑,创作者该如何与 AI 协同共生?
  • 一个投骰子赌大小的游戏
  • H264几个参数说明
  • Maya基础:烘焙动画
  • 网络爬虫是自动从互联网上采集数据的程序
  • VSCode的launch.json配置文件在C++项目调试中的全面应用
  • VB.NET 多次添加字符串数据,再转换成一个数组
  • 设计模式概述:为什么、是什么与如何应用
  • 【开题答辩全过程】以 纳雍县咚咚屋服装租赁管理系统为例,包含答辩的问题和答案
  • Java全栈开发面试实录:从基础到微服务的实战解析
  • 路由控制(二):路由策略和策略路由
  • CICD实战(1) - 使用Arbess+GitPuk+Docker快速实现项目打包构建、docker部署
  • 订餐后台管理系统-day06菜品分类模块
  • C++算法学习专题:前缀和
  • 动规一些理解
  • 【MySQL】练习12-4:启用GTID并配置循环复制
  • YUV格式详解
  • Unity笔记(九)——画线功能Linerenderer、范围检测、射线检测
  • 算法之链表
  • 电科金仓KingbaseES V9数据库:国产数据库的自主创新与行业实践深度解析
  • C#异步编程
  • 深度学习量化双雄:PTQ 与 QAT 的技术剖析与实战
  • 异步编程以及promise的一些拓展