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

通信协议——SPI通信协议

一、SPI 协议简介

SPI(Serial Peripheral interface,串行外围设备接口) 通信协议是 Motorola 公司首先在其MC68HCXX 系列处理器上定义的。SPI 接口是一种高速的全双工同步的通信总线,已经广泛应用在众多 MCU、存储芯片、AD 转换器和 LCD 之间。

功能说明

SPI 总线

IIC 总线

通信方式

同步 串行 全双工

同步 串行 半双工

总线接口

MOSI、MISO、SCL、CS

SDA、SCL

拓扑结构

一主多从/一主一从

多主从

从机选择

片选引脚选择

SDA上设备地址片选

通信速率

一般50MHz以下

100kHz、400kHz、3.4MHz

数据格式

8位/16位

8位

传输顺序

MSB/LSB

MSB

二、SPI 协议应用

SPI 广泛用于连接高速外围设备,如:

  • 数据存储设备(SD卡、闪存)
  • 显示屏(LCD、OLED)
  • 传感器(加速度计、陀螺仪)
  • 数模转换器(DAC)和模数转换器(ADC)

三、SPI 协议接口

MISO(Master In / Slave Out)主设备数据输入,从设备数据输出。

MOSI(Master Out / Slave In)主设备数据输出,从设备数据输入。

SCLK(Serial Clock)时钟信号,由主设备产生。

CS(Chip Select)从设备片选信号,由主设备产生。

四、SPI 协议四种工作模式

主从设备 必须使用相同的工作模式——SCLK、CPOL 和 CPHA,才能正常工作。如果有多个 从设备,并且它们使用了不同的工作模式,那么 主设备 必须在读写不同 从设备 时需要重新修改对应从设备的模式。以上SPI总线协议的主要内容。

1. CPOL

CPOL(Clock Polarity),就是时钟的极性。通信的整个过程分为空闲时刻和通信时刻,如果SCLK在数据发送之前和之后的空闲状态是高电平,那么就是CPOL=1;如果空闲状态SCLK是低电平,那么就是 CPOL=0。

时钟相位(CPHA)定义数据的采集时间:

2. CPHA

CPHA(Clock Phase),就是时钟的相位。同步通信的一个特点就是所有数据的变化和采样都是伴随着时钟沿进行的,也就是说数据总是在时钟的边沿附近变化或被采样。而一个时钟周期必定包含了一个上升沿和一个下降沿。这里将结束空闲状态之后的第一个边沿当作奇数边沿,第二个边沿当作偶数边沿,以此类推,奇偶交替

CPHA=0,在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样,在第2个边沿发送数据

CPHA=1,在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样,在第1个边沿发送数据

3. 工作模式

  • 模式0:CPOL= 0,CPHA=0。空闲状态时 SCLK 串行时钟为低电平;数据采样在 SCLK 时钟的奇数边沿,本模式中,奇数边沿为上升沿;数据更新在 SCLK 时钟的偶数边沿,本模式中,偶数边沿为下降沿。
  • 模式1:CPOL= 0,CPHA=1。空闲状态时 SCK 串行时钟为低电平;数据采样在 SCLK 时钟的偶数边沿,本模式中,偶数边沿为下降沿;数据更新在 SCLK 时钟的奇数边沿,本模式中,偶数边沿为上升沿。
  • 模式2:CPOL= 1,CPHA=0。空闲状态时 SCLK 串行时钟为高电平;数据采样在 SCLK 时钟的奇数边沿,本模式中,奇数边沿为下降沿;数据更新在 SCLK 时钟的偶数边沿,本模式中,偶数边沿为上升沿。
  • 模式3:CPOL= 1,CPHA=1。空闲状态时 SCLK 串行时钟为高电平;数据采样在 SCLK 时钟的偶数边沿,本模式中,偶数边沿为上升沿;数据更新在 SCLK 时钟的奇数边沿,本模式中,偶数边沿为下降沿。

注:理解成 CPOL 同或 CPHA 等于 1 时,SPI 通信在 SCLK 的上升沿采样数据,下降沿发送数据,反之同理。

模式

采样数据时钟边沿

发送数据时钟边沿

CPOL= 0,CPHA=0

上升沿

下降沿

CPOL= 0,CPHA=1

下降沿

上升沿

CPOL= 1,CPHA=0

下降沿

上升沿

CPOL= 1,CPHA=1

上升沿

下降沿

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

相关文章:

  • Go语言中的错误处理
  • CSS:编写位置分类
  • PDF编辑器:Foxit PDF Editor Pro 版功能解析
  • JVM对象存储格式
  • 解决调用Claude 3.7接口 403 Request not allowed问题
  • 贝叶斯优化RF预测模型
  • 轻松实现CI/CD: 用Go编写的命令行工具简化Jenkins构建
  • 处理pdf文件的常用库unstructured和PyPDF2
  • 【PyTorch动态计算图原理精讲】从入门到灵活应用
  • vscode 配置qt
  • WEB漏洞--CSRF及SSRF案例
  • 可靠性工程:加速因子与筛选度计算模型解析
  • 修改输入框选择框颜色
  • jspm老年体检信息管理系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 【论文阅读/复现】RT-DETR的网络结构/训练/推理/验证/导出模型
  • 如何让自己保持一定的神秘感--deepseek
  • k8s部署
  • Vim 中替换字符或文本
  • 水利三维可视化平台怎么做?快速上手的3步指南
  • CMA软件实验室评审政策解读
  • Fortran如何写注释?
  • MySQL下载与安装
  • 电子电器框架 --- 数据连接性和云集成在增强电气/电子架构方面的作用
  • Docker 容器双网卡访问物理雷达网络教程
  • 【强化学习系列】Q-learning——从贝尔曼最优方程谈起
  • IDEA专业版 Springboot连接MySQL保姆级教程 2025
  • hutools工具类中isNotEmpty与isNotBlank区分
  • 【和春笋一起学C++】函数——C++的编程模块
  • 从拒绝采样到强化学习,大语言模型推理极简新路径!
  • JDK 8 函数式接口全集