原文链接与标题如下 ,本文仅转载学习阅读使用,讲通信总线非常精简明了的一位大佬;
通信总线协议之SPI通信详解
通信协议与接口知识参考文章:
【通信理论知识】数据传送的方式:串/并行;传输方向:单工、半/全双工;传输方式:同步/异步
【串口通信详解】USART/UART、RS232、RS485标准接口与协议特点解析
【同步串行通信接口】IIC(Inter-Integrated Circuit)通信总线协议详解
【通信总线协议】SPI串行外设接口通信详解
【CAN总线协议】CAN通信入门总览:常见协议优劣、CAN应用、协议组成与标准、传输原理的实现、仲裁机制、传输与时序初探
进阶:
【通信模块】简单玩转WiFi模块(ESP32、ESP8266)
【通信模块】WiFi&Bluetooth简介与对比
【通信模块】LoRa与LoRaWAN简介
【通信协议】硬件通信协议速率对比
文章目录
引言:I2C与SPI异同
SPI总线简介
SPI寻址方式
SPI通信过程
SPI设备时钟
SPI 4种工作模式
SPI通信的优缺点
引言: I2C与SPI异同
相同
串行、同步; TTL电平,传输距离不长; 主从方式;
不同
通信:
2C为半双工 SPI全双工
寻址:
I2C有应答 SPI无应答
I2C通过向总线广播从机地址寻址 SPI通过使能不同CS引脚寻址
极性和相位:
I2C时钟极性和相位固定 SPI极性和相位有4种模式
总结
I2C一般几百kbps,超高速模式下能5Mbp;
SPI无应答、快速寻址等优势,所以SPI速率比I2C快很多,几M到几十Mbps。
1. SPI总线简介
面试真题:谈一谈SPI总线的实现原理?
答: SPI总线是一种四线式串行通信总线,包括一个主机和多个从设备。
主机通过时钟线(SCLK)控制通信的速率,并使用MOSI线和MISO线分别进行数据的发送和接收;
-
SPI是
串行外设接口
(Serial Peripheral Interface)的缩写,是美国摩托罗拉公司(Motorola)最先推出的一种同步串行传输规范,也是一种单片机外设芯片串行扩展接口,是一种高速、全双工、同步
通信总线,所以可以在同一时间发送和接收数据,SPI没有定义速度限制,通常能达到甚至超过10M/bps。 -
SPI采用
主从方式
工作,一般有一个主机和一个从机或者一个主机和多个从机通信,不支持多主机。其中提供时钟的为主设备
(Master),接收时钟的设备为从设备
(Slave),SPI接口的读写操作,都是由主设备发起,当存在多个从设备时,通过各自的片选信号进行管理。 -
特点:
Serial Peripheral Interface(SPI),串行外设接口
高速、全双工、同步
一个主机,若干个从机
-
SPI至少需要4根线:
-
SCLK
: 时钟线MOSI
: 主设备输出,从设备输入,主机发送从机接收MISO
: 主设备输入,从设备输出,从机发送主机接收CS
:片选(chip slelce),用于寻址,多个从设备可为多条
2. SPI寻址方式
- 当主设备要和从设备进行通信时,主设备需要先将对应的从设备的
片选线CS上发送使能信号
,即将对应从设备连接的CS管脚拉高或者拉低,表示选中的该从设备。 - 使能信号为高电平还是低电平根据从机而定。
3. SPI通信过程
-
通信原理:SPI主设备和从设备都有一个
串行移位寄存器
,主设备通过向它的SPI串行寄存器写入一个字节来发起一次传输 -
SPI数据传输时
先发高位后发低位
,例如发送0xAA (10101010B),先发送高位1,发送顺序为 :1 0 1 0 1 0 1 0
-
数据线的
高电平表示逻辑 1,低电平表示逻辑 0
-
SPI一个字节传送完成后,
无需应答
即可开始下一个字节的发送 -
SPI采用
同步方式工作
,时钟线在上升沿或者下降沿时发送器向数据线上发送数据,紧接着在下降沿或者上升沿时接收器从数据线上读取数据,完成一个数据的传输,8个时钟周期完成一个字节的数据传输。
4. SPI设备时钟
- SPI时钟特点主要包括:
时钟速率
、时钟极性
和时钟相位
三方面。 时钟速率
:SPI总线上的主设备必须在通信开始时候配置并生成相应的时钟信号。从理论上讲,只要实际可行,时钟速率就可以为任何速率,当然这个速率受限于每个系统能提供多大的系统时钟频率,以及最大的SPI传输速率。时钟极性
:根据硬件制造商的命名规则不同,时钟极性通常写为CKP
或CPOL
。时钟极性和相位共同决定读取数据的方式,比如信号上升沿读取数据还是信号下降沿读取数据。时钟相位
:根据硬件制造商的不同,时钟相位通常写为CKE
或CPHA
。顾名思义,时钟相位/边沿,也就是采集数据时是在时钟信号的具体相位或者边沿;
5. SPI 4种工作模式
-
SPI总线有4种工作模式,取决于
极性CPOL
和相位CPHA
的设置 -
CPOL表示SCLK空闲是的状态
-
- CPOL = 0, 空闲时SCLK为低电平
-
- CPOL = 1, 空闲时SCLK为高电平
-
CPHA表示采样时刻
-
- CPHA = 0,每个周期的第一个时钟沿采样
-
- CPHA = 1,每个周期的第二个时钟沿采样
- CPHA = 1,每个周期的第二个时钟沿采样
-
四种SPI模式下的通信示例如下图,
数据显示在MOSI和MISO线上,传输的开始和结束用绿色虚线表示,采样边沿用橙色虚线表示,移位边沿用蓝色虚线表示
1. SPI模式0,CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。
2. SPI模式1,CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出
3. SPI模式2,CPOL = 1,CPHA = 1:CLK空闲状态 = 高电平,数据在下降沿采样,并在上升沿移出
4. SPI模式3,CPOL = 1,CPHA = 0:CLK空闲状态 = 高电平,数据在上升沿采样,并在下降沿移出
-
对于一个特定的从设备来说,一般在出厂时就会将其工作模式确定,使用该设备时需要将主设备模式设置成从设备模式,否则无法进行通信。
6. SPI通信的优缺点
-
优点
-
- 无起始位和停止位,因此数据位可以连续传输而不会被中断;
- 没有像I2C这样复杂的从设备寻址系统;
- 数据传输速率比I2C更高(几乎快两倍);
- 分离的MISO和MOSI信号线,因此可以同时发送和接收数据;
- 极其灵活的数据传输,不限于8位,它可以是任意大小的字;
- 非常简单的硬件结构,从站不需要唯一地址(与I2C不同)。
- 从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。
- 不需要收发器(与CAN不同)。
-
缺点
-
- 使用四根信号线(I2C和UART使用两根信号线);
- 无法确认是否已成功接收数据(I2C拥有此功能);
- 没有任何形式的错误检查,如UART中的奇偶校验位;
- 只允许一个主设备;
- 没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
- 没有定义硬件级别的错误检查协议;
- 与RS-232和CAN总线相比,只能支持非常短的距离;