SPI通讯

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



前言

本章可与I2C章节对比阅读,体会两种通讯总线差异。本章主要对SPI协议层进行总结。

一、介绍SPI通讯

基本概念

SPI通讯是一种串行数据传输接口,通常用于在数字系统中通过高速(Mbps)的方式进行短距离通信。它被广泛应用于嵌入式系统、传感器网络、外围设备等领域。
SPI通讯设备之间的常用连接方式见下图。

工作原理

SPI通讯使用3条总线及片选线,3条总线分别为SCKMOSIMISO,片选线为NSS ,它们的作用介绍如下:
SCK (Serial Clock):时钟信号线,用于通讯数据同步。
MOSI (Master Output, Slave Input):主设备输出/从设备输入引脚。
MISO(Master Input,Slave Output):主设备输入/从设备输出引脚。
NSS(Slave Select):从设备选择信号线,即有几个从设备就有几个NSS引脚。
在这里插入图片描述

二、总线结构

基本通讯过程

这是一个主机的通讯时序。NSS、SCK、MOSI信号都由主机控制产生,而MISO的信号由从机产生。

先发送高位再发送低位,发送完一个字节之后无需应答即可开始下个字节,NSS片选从设备作为起始/终止信号

在这里插入图片描述

数据有效性

  1. 在时钟线SCK上升沿/下降沿(CPOL=0/1)时,MOSI及MISO数据传输一位 数据传输时
  2. MSB先行或LSB先行并没有作硬性规定,但要保证两个SPI通讯设备之间使用同样的协定
  3. SPI每次数据传输可以8位或16位为单位,每次传输的单位数不受限制

CPOL/CPHA及通讯模式

SPI一共有四种通讯模式,如图

CPOL CPHA 空闲时SCK时钟 采样时刻
0 0 低电平 奇数边沿
0 1 低电平 偶数边沿
1 0 高电平 奇数边沿
1 1 高电平 偶数边沿

代码分析

  1. 打开SPI 总线的设备文件
  2. 设置SPI 工作模式
  3. 设置SPI通信过程中一个字节所占的位数(8)
  4. 设置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)<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值