【通信协议】一文搞懂SPI

SPI总线简介

SPI(Serial Peripheral Interface)是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。

接口定义

图片

SPI接口共有4根信号线,分别是:片选信号、时钟信号、串行输出信号、串行输入信号。

  • MOSI:Master数据输出,Slave数据输入

  • MISO:Master数据输入,Slave数据输出

  • SCLK :时钟信号,由Master产生

  • SS:片选信号,由Master控制

时钟极性和时钟相位

在SPI操作中,最重要的两项设置就是时钟极性(CPOL)和时钟相位(CPHA)。

时钟极性: 时钟空闲时的电平。

时钟相位: 采样数据的时钟沿。

SPI模式

CPOL CPHA
模式0 0 0
模式1 0 1
模式2 1 0
模式3 1 1

CPOL: SPI空闲时的时钟信号电平(1:高电平, 0:低电平)

CPHA: SPI在时钟第几个边沿采样(1:第二个边沿开始, 0:第一个边沿开始)

  • 模式0

图片

空闲状态CLK为低电平,CLK上升沿采样(这时候数据不能改变)。

  • 模式1

图片

空闲状态CLK为低电平,CLK下降沿采样(这时候数据不能改变)。

  • 模式2

图片

空闲状态CLK为高电平,CLK下升沿采样(这时候数据不能改变)。

*注意: 上图的第一个CLK下降沿应该往右移动一点更准确,因为采样时数据不应该改变。

  • 模式3

图片

空闲状态CLK为高电平,CLK上降沿采样(这时候数据不能改变)。

注意:

当CPHA为0时,采集数据发生在时钟周期的前边沿(第一个边沿,可能是上升沿也可能是下降沿,由CPOL决定);

当CPHA为1时,采集数据发生在时钟周期的后边沿(第二个边沿,可能是上升沿也可能是下降沿,由CPOL决定);

所以不能说CPHA=0就是上升沿或下降沿采集数据,要根据CPOL才能确定。

总结

当我们写某SPI芯片的驱动时,主要要关注外设芯片的SPI模式(时钟极性和时钟相位),以及寄存器,这些在datasheet中都会体现。

往期推荐:

嵌入式到底应该选择驱动开发,还是应用开发?

【通信协议】一文搞懂I2C

如何实现一个Linux命令

推荐几款串口监控软件

一文搞懂UART

版权声明:本文为CSDN博主「曼巴精神传承人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012041204/article/details/122270005

SPI总线简介

SPI(Serial Peripheral Interface)是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。

接口定义

图片

SPI接口共有4根信号线,分别是:片选信号、时钟信号、串行输出信号、串行输入信号。

  • MOSI:Master数据输出,Slave数据输入

  • MISO:Master数据输入,Slave数据输出

  • SCLK :时钟信号,由Master产生

  • SS:片选信号,由Master控制

时钟极性和时钟相位

在SPI操作中,最重要的两项设置就是时钟极性(CPOL)和时钟相位(CPHA)。

时钟极性: 时钟空闲时的电平。

时钟相位: 采样数据的时钟沿。

SPI模式

CPOL CPHA
模式0 0 0
模式1 0 1
模式2 1 0
模式3 1 1

CPOL: SPI空闲时的时钟信号电平(1:高电平, 0:低电平)

CPHA: SPI在时钟第几个边沿采样(1:第二个边沿开始, 0:第一个边沿开始)

  • 模式0

图片

空闲状态CLK为低电平,CLK上升沿采样(这时候数据不能改变)。

  • 模式1

图片

空闲状态CLK为低电平,CLK下降沿采样(这时候数据不能改变)。

  • 模式2

图片

空闲状态CLK为高电平,CLK下升沿采样(这时候数据不能改变)。

*注意: 上图的第一个CLK下降沿应该往右移动一点更准确,因为采样时数据不应该改变。

  • 模式3

图片

空闲状态CLK为高电平,CLK上降沿采样(这时候数据不能改变)。

注意:

当CPHA为0时,采集数据发生在时钟周期的前边沿(第一个边沿,可能是上升沿也可能是下降沿,由CPOL决定);

当CPHA为1时,采集数据发生在时钟周期的后边沿(第二个边沿,可能是上升沿也可能是下降沿,由CPOL决定);

所以不能说CPHA=0就是上升沿或下降沿采集数据,要根据CPOL才能确定。

总结

当我们写某SPI芯片的驱动时,主要要关注外设芯片的SPI模式(时钟极性和时钟相位),以及寄存器,这些在datasheet中都会体现。

往期推荐:

嵌入式到底应该选择驱动开发,还是应用开发?

【通信协议】一文搞懂I2C

如何实现一个Linux命令

推荐几款串口监控软件

一文搞懂UART

版权声明:本文为CSDN博主「曼巴精神传承人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012041204/article/details/122270005

生成海报
点赞 0

曼巴精神传承人

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

【通信协议】一文搞懂SPI

SPI总线简介 SPI(Serial Peripheral Interface)是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。 接口定义 SPI接口共有

IIC协议的SPI协议的对比

相同点 均采用串行、同步的方式。均采用TTL电平,传输距离短。均采用主从方式工作。 不同点 IIC为半双工,SPI为全双工。IIC有应答机制,SPI无应答机制。IIC通过总线广播从机地址来寻址&#

pwm电机调速的原理介绍与代码实现

1、pwm实现调速的原理与介绍 PWM(Pulse Width Modulation)脉冲宽度调制。 1)占空比 pwm占空比就是一个脉冲周期内有效电平在整个周期所占的比例。 通过调节PWM的占空比就能调节IO口上电压的持续

【STM32Cube笔记】2-STM32Cube安装教程

【STM32Cube笔记】系列文章目录 1-基于STM32的VSCode入门级教程前言 2-STM32Cube安装教程 3-STM32CubeIDE汉化 4-STM32Cube配置时钟设置 5-跑马灯引脚配置 6-Cortex-M7内核基本配