一文认识 SPI - 学习笔记

学习笔记中大部分是看 B 站江科大自化协后进行总结的,仅供学习交流,如有错误麻烦指正


目录

一、SPI 概述

二、SPI 特点

三、SPI 总线的连接方式

四、SPI 通信的过程

五、SPI 的数据交换模式

1、模式0(最常用):

2、模式1:

3、模式2:

4、模式3:

五、SPI 协议

1、SPI 时序的基本组成单元

1)起始条件(开始使用 SPI)

2)主机和从机交换一个字节

3)终止条件


一、SPI 概述

SPI(Serial Peripheral Interface),是一种通用数据总线,有四根通信线:SCK(时钟线)、MOSI(数据线)、MISO(数据线)、SS(从机选择线,主机选择哪个从机作为通信对象,根据需求可以同时具备多根)


二、SPI 特点

同步(说明有时钟线)、全双工(说明有2根数据线,一根用于发送一根用于接收)、支持总线挂载多设备(一主多从)


三、SPI 总线的连接方式

        所有的 SPI 设备的 SCK、MOSI(主发 从接)、MISO(主接 从发) 分别连接在一起。设备输出引脚配置成推挽输出,输入引脚配置成浮空或上拉输入。

        主机引出多条 SS 控制线,分别接到各从机的 SS 引脚,主机端的 SS 引脚是输出引脚,从机是输入。SS 低电平有效,主机想指定谁作为通信对象,就把对应的 SS 输出线置低电平,最开始的所有 SS 线为高电平。当某个从机的 SS 线为高电平时,从机的 MISO 引脚必须切换为高阻态,高阻态相当于引脚断开,不输出任何电平,这样就可以防止 MISO 线上有多个从机进行输出,而导致的电平冲突问题。只有 SS 为低电平时,从机的 MISO 引脚才允许变为推挽输出。


四、SPI 通信的过程

SPI 通信,是以主机和从机进行数据交换的形式进行通信,如下图

主机的波特率发生器产生时钟信号,驱动主从的移位寄存器的数据位进行移位

主机的 MOSI 和 MISO 都共用一个移位寄存器,从机也是同理。具体的通信过程如下(以 模式1 为例。模式1是什么下面会介绍)

1、SCK 的第一个跳变沿,主从移出移位寄存器的最高位 B7 的数据,把数据放到通信线上

2、SCK 的第二个跳变沿,主从会采样接收通信线上的数据,放入各自的移位寄存器的最低位 B0

SPI 的通信是以这种数据交换的形式来进行通信,如果主机(或从机)不想发送,只想接收数据,则可以随便编写要发送的无价值内容,只要能接收到对方发送过来的数据,目的就达成,同理,如果只想发送,不想接收数据,只要数据能够成功发送给对方,目的就达成,无所谓对方发过来了什么数据


五、SPI 的数据交换模式

SPI 有两个可以配置(初始化)的位,分别是 CPOL 和 CPHA,都可配置 0 或 1

CPOL 时钟极性:代表时钟 SCK 空闲时的电平,即SPI空闲时,时钟信号SCLK的电平(0:空闲时低电平,1:空闲时高电平)

CPHA 时钟相位:代表读取数据和发送数据的时钟沿,即SPI在SCLK第几个边沿开始采样(0:第一个边沿开始,1:第二个边沿开始)

根据配置方式的不同,SPI 总共有四种数据交换模式:

1、模式0(最常用):

CPOL = 0:SCK 空闲时是低电平,第一个电平跳变是上升,第二个电平跳变是下降

CPHA = 0:数据在第一个电平跳变时采样

2、模式1:

CPOL = 0:SCK 空闲时是低电平,第一个电平跳变是上升,第二个电平跳变是下降

CPHA = 1:数据在第二个电平跳变时采样

3、模式2:

CPOL = 1:SCK 空闲时是高电平,第一个电平跳变是下降,第二个电平跳变是上升

CPHA = 0:数据在第一个电平跳变时采样

4、模式3:

CPOL = 1:SCK 空闲时是高电平,第一个电平跳变是下降,第二个电平跳变是上升

CPHA = 1:数据在第二个电平跳变时采样


五、SPI 协议

SPI 协议,是对要传输数据的格式的约定、标准、规范,通信双方都遵循这些规范才能正常的收发数据。那么这些约定、标准或者说规范具体是什么样的?如下

1、SPI 时序的基本组成单元

(以 模式1 为例)

1)起始条件(开始使用 SPI)

SS 从高电平切换到低电平,表示主机选择某个从机开始通信。SS 处于低电平期间就表示正在通信中

2)主机和从机交换一个字节

起初,还未开始通信,所有 SS 线处于高电平,MISO 处于高阻态(图中用中间的一条线表示高阻态。高阻态相当于引脚断开,不输出任何电平,这样就可以防止 MISO 线有多个从机进行输出,而导致的电平冲突问题。只有 SS 为低电平时,从机的 MISO 引脚才允许变为推挽输出)

SS 下降沿,允许通信,表示通信开始,从机的 MISO 引脚脱离高阻态,开启输出,切换为推挽输出模式(恢复正常的状态,可能是低电平或高电平)

SCK 的第一个边沿,主机 MOSI 和从机 MISO 都各自移出移动数据寄存器的最高位 B7(高电平 / 低电平)

SCK 的第二个边沿,主机的 MISO 和 从机的 MOSI 接收通信上的 B7,把 B7 移入到自己的移动数据寄存器的最低位存放

后面同理...

最终,如果想要结束通信,则 SS 线置高电平,之后从机的 MISO 会变回高阻态

3)终止条件

SS 从低电平切换到高电平,表示主机与某个从机的通信结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值