前言
本章可与I2C章节对比阅读,体会两种通讯总线差异。本章主要对SPI协议层进行总结。
一、介绍SPI通讯
基本概念
SPI通讯是一种串行数据传输接口,通常用于在数字系统中通过高速(Mbps)的方式进行短距离通信。它被广泛应用于嵌入式系统、传感器网络、外围设备等领域。
SPI通讯设备之间的常用连接方式见下图。
工作原理
SPI通讯使用3条总线及片选线,3条总线分别为SCK、MOSI、MISO,片选线为NSS ,它们的作用介绍如下:
SCK (Serial Clock):时钟信号线,用于通讯数据同步。
MOSI (Master Output, Slave Input):主设备输出/从设备输入引脚。
MISO(Master Input,Slave Output):主设备输入/从设备输出引脚。
NSS(Slave Select):从设备选择信号线,即有几个从设备就有几个NSS引脚。

二、总线结构
基本通讯过程
这是一个主机的通讯时序。NSS、SCK、MOSI信号都由主机控制产生,而MISO的信号由从机产生。
先发送高位再发送低位,发送完一个字节之后无需应答即可开始下个字节,NSS片选从设备作为起始/终止信号

数据有效性
- 在时钟线SCK上升沿/下降沿(CPOL=0/1)时,MOSI及MISO数据传输一位 数据传输时
- MSB先行或LSB先行并没有作硬性规定,但要保证两个SPI通讯设备之间使用同样的协定
- SPI每次数据传输可以8位或16位为单位,每次传输的单位数不受限制
CPOL/CPHA及通讯模式
SPI一共有四种通讯模式,如图
| CPOL | CPHA | 空闲时SCK时钟 | 采样时刻 |
|---|---|---|---|
| 0 | 0 | 低电平 | 奇数边沿 |
| 0 | 1 | 低电平 | 偶数边沿 |
| 1 | 0 | 高电平 | 奇数边沿 |
| 1 | 1 | 高电平 | 偶数边沿 |
代码分析
- 打开SPI 总线的设备文件
- 设置SPI 工作模式
- 设置SPI通信过程中一个字节所占的位数(8)
- 设置SPI通信的波特率(500K)
static uint32_t mode = SPI_MODE_2; //用于保存 SPI 工作模式
static uint8_t bits = 8; // 接收、发送数据位数
static uint32_t speed = 500000; // 发送速度
/*
* 初始化SPI
*/
void spi_init(void)
{
int ret = 0;
/*-------------------第一部分-------------------------*/
/*打开 SPI 设备*/
fd = open("/dev/spidev2.0", O_RDWR)<

本文详细介绍了SPI物理层的连接方式和功能,包括SCK、MOSI、MISO和NSS的作用。进一步阐述了SPI协议层的基本通讯过程、数据有效性、CPOL/CPHA设置以及与I2C的比较,指出SPI在高速应用中的优势和I2C在低速场景的适用性。
最低0.47元/天 解锁文章
463

被折叠的 条评论
为什么被折叠?



