【数字IC】深入浅出理解SPI协议

article/2025/8/26 21:02:28

深入浅出理解SPI协议

    • 一、什么是SPI协议
    • 二、什么是全双工通信协议
    • 三、SPI的信号线
    • 四、SPI的连接方式
      • 4.1 多NSS形式
      • 4.2 菊花链形式
    • 五、SPI可配置变量
      • 5.1 时钟极性(CPOL)
      • 5.2 时钟相位(CPHA)
      • 5.3 CPOL和CPHA组合出四种情况
      • 5.4数据大小
      • 5.5 波特率分频系数
      • 5.6 其他参数
    • 六、写在最后
    • 七、其他协议解读
      • 7.1 UART协议
      • 7.2 SPI协议
      • 7.3 I2C协议
      • 7.4 AXI协议

一、什么是SPI协议

SPI,全称(Serial Peripheral interface)是由摩托罗拉公司首先定义的协议,中文名为串型外围设备接口。SPI是一种高速全双工的总线协议
Serial(串型):与并型相对应,单向数据通路只需要一根线,而同样常见的AMBA则为并型总线
Peripheral(外围):指此总线多用来连接如“AD转换、EEPROM、PWM”等外围设备,即对应于AMBA的APB部分
Interface(总线接口):很好理解,不再赘述。

二、什么是全双工通信协议

通信协议可以按照通信方式分为单工,半双工,全双工三种。
单工:发射端和接收端固定,有一条数据通路,通路上数据单向流动。
半双工:发射端和接收端可变,有一条数据通路,通路上数据双向流动。
全双工:发射端和接收端,有两条数据通路,一条从TX到RX,另一条从RX到TX。

一张形象的图片表示如下
在这里插入图片描述
比如说我们在从零开始的Verilog UART设计中所实现的就是一个单工UART

因为SPI是全双工总线协议,因此SPI的数据通路上存在从主设备到从设备的数据通道和从从设备到主设备的数据通道

三、SPI的信号线

SPI需要四条线才能完成数据的发送,分为3条总线和1条片选线
在这里插入图片描述

SCK:Serial Clock, 串行时钟信号,SPI需要依靠着这个信号的边沿进行数据的传递
MOSI:Master output Slave input,对于主设备来说,是发送数据的端口,对于从设备来说,是接收数据的端口。
MISO:Master input Slave output,对于从设备来说,是接收数据的端口,对于主设备来说,是发送数据的端口。
NSS: N Slave connect,一般情况下是由主机发送,从机接收,表示哪一个从设备有效的信号

因为MOSI和MISO的存在,因此SPI才是一个全双工的协议(即分别对于主设备和从设备来说,既可以发送数据,又可以接收数据)

四、SPI的连接方式

根据从设备之间是否存在联系,我们可以将SPI的连接方式分为“多NSS形式”和”菊花链形式”。

4.1 多NSS形式

SPI的第一种连接方式是“多NSS形式”的连接,比如说从设备1是一个AD转换模块,从设备2是一个比较器,设备3是一块液晶,他们之间没有联系,主设备需要操控哪个从设备,就拉低对应NSS上面的信号,使能从设备进行数据转换
在这里插入图片描述

4.2 菊花链形式

SPI协议的第二种形式是菊花链的形式,比如说从设备1是一块EEPROM,从设备2是一个DSP,从设备3是一个比较器,三个从设备之间存在联系,当来自主设备的地址信号到来时,先从EEPROM中读出数据,数据放到DSP中进行处理,处理后的数据,最终在从设备3中进行比较
在这里插入图片描述

五、SPI可配置变量

5.1 时钟极性(CPOL)

时钟极性(CPOL)指通讯设备处于空闲状态(SPI开始通讯前、nSS线无效)时,SCK的状态

CPOL对应电平
0SCK在空闲时为低电平
1SCK在空闲时为高电平

这里的CPOL实际上对应于状态机IDLE状态时的SCK的值是0是1,即三段式状态机IDLE时的输出

5.2 时钟相位(CPHA)

时钟相位(CPHA)指数据的采样时刻位于SCK的偶数边沿采样还是奇数边沿采样。

CPHA对应电平
0MOSI或MISO数据线上的信号在“奇数边沿”被采样
1MOSI或MISO数据线上的信号在”偶数边沿”被采样

举例:假如CPOL = 0时,CPHA=0,对应1,3,5处采样,即为上升沿采样,CPHA=1,对应2,4,6处采样,即为下降沿采样。
在这里插入图片描述

这里的CPHA也同样能在状态机的跳变中得到体现,即对应某些状态的采样行为

5.3 CPOL和CPHA组合出四种情况

在这里插入图片描述

根据这个图,我们可以发现
Case1:CPOL=0, CPHA=0
Case2:CPOL=1, CPHA=1,Case1和Case2都对应上升沿触发
Case3:CPOL=0, CPHA=1
Case4:CPOL=1, CPHA=0,Case3和Case4都对应下降沿触发

为了保证采样的时候数据稳定,我们还需要做些什么?
我们需要保证采样的时候数据是稳定的,才不会发生建立时间和保持时间的违例,因此,当我们在上升沿的时候进行采样,我们可以在前一个相差半个时钟周期的下降沿,切换数据
同样,当我们在下降沿的时候进行采样,我们也可以在前一个相差半个时钟周期的上升沿,切换数据,以此来保证采样时的数据稳定性。

5.4数据大小

有一张非常形象的图片来形容SPI的数据发送与接收,即每当Master发送一位数据的时候,他还会接收到一位数据,因此对于SPI来说,数据传输的本质其实是两个寄存器的移位操作,寄存器的位宽,就是我们所说的数据大小,一般情况下,SPI的数据大小是一个字节或者两个字节(8位或16位)
在这里插入图片描述
图片引用自《SPI Block Guide, motorola Inc,14 JUL 2004》

5.5 波特率分频系数

对于全局时钟来讲,频率可能会很高,比如常见的CPU是GHz级别,常见的MCU也有近百MHz级别,但是对于所连接的外设,受限于建立时间和保持时间的限制,可能没有办法跑到MCU主频的级别,因此我们可能需要波特率分频系数来对高速全局时钟进行处理,以此来确保不发生data的violation。

参考作者之前的文章,我们可以获知分频电路的设计方法

【数字IC手撕代码】Verilog奇数分频|题目|原理|设计|仿真
【数字IC手撕代码】Verilog偶数分频|题目|原理|设计|仿真
【数字IC手撕代码】Verilog半整数分频|题目|原理|设计|仿真
【数字IC手撕代码】Verilog小数分频|题目|原理|设计|仿真

5.6 其他参数

以上参数可以保证SPI的基本功能,但一个更为完善的SPI当然不仅限于以上参数,以下参数仅作基本梳理,感兴趣的同学可自行了解相关内容。
SPI_FirstBit,决定SPI是MSB还是LSB的传输形式
SPI_CRCPolynomial,决定SPI是否采用CRC校验的形式进行数据传输
SPI_Direction; 传输方向,两向全双工或单向接收

六、写在最后

接下来的文章,我们将从零开始使用Verilog设计一个SPI出来,并进行不那么充分的验证工作,其中SPI具体满足的参数如下

  • 一个主设备,一个从设备的SPI全双工通信,从设备是一个寄存器组
  • 全局时钟100Mhz
  • CPOL = 0,CPHA = 1
  • 可支持波特率2,4,8,16分频四种状态
  • 数据传输为MSB(高位优先)
  • 数据位宽固定8位
    收藏并关注作者,获取最新的更新动态

七、其他协议解读

7.1 UART协议

  • 【数字IC】深入浅出理解UART
  • 【数字IC】从零开始的Verilog UART设计

7.2 SPI协议

  • 【数字IC】深入浅出理解SPI协议
  • 【数字IC】从零开始的Verilog SPI设计

7.3 I2C协议

  • 【数字IC】深入浅出理解I2C协议

7.4 AXI协议

  • 【AXI】解读AXI协议双向握手机制的原理
  • 【AXI】解读AXI协议中的burst突发传输机制
  • 【AXI】解读AXI协议事务属性(Transaction Attributes)
  • 【AXI】解读AXI协议乱序机制
  • 【AXI】解读AXI协议原子化访问
  • 【AXI】解读AXI协议的额外信号
  • 【AXI】解读AXI协议的低功耗设计
  • 【数字IC】深入浅出理解AXI协议
  • 【数字IC】深入浅出理解AXI-lite协议

http://chatgpt.dhexx.cn/article/Sfb3rsq9.shtml

相关文章

通信协议(二)——SPI协议

1、基础知识 1.1 概念 SPI(Serial Peripheral Interface,串行外围设备接口),是Motorola公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输&am…

SPI协议代码

软件模拟SPI程序代码 文章目录 SPI协议简介●SPI接口介绍●SPI数据传输方向●SPI传输模式 通过两个单片机模拟SPI来加深理解※硬件连接方式✯SPI模式✯程序思路✯主机C代码波形✯从机C代码波形 概述:    通过两个MCU(STM32F103)来模拟SPI…

SPI协议讲解与总结

1.SPI通讯协议 SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线 1.1 SPI引脚与工作过程 SPI的通信原理很简单,它以主从方式工作,这种模式通常有一…

【STM32】SPI协议通信详解

目录 一.SPI协议简介二.SPI物理层三.SPI协议层 1.通讯的起始和停止信号2.数据有效性3.时钟信号的相位和极性(重点) 四.SPI 特性及架构(重点) 1.通信引脚2.时钟控制逻辑3.数据控制逻辑(非常重要)4.全双工发…

FPGA实现的SPI协议(一)----SPI驱动

写在前面 SPI协议系列文章: FPGA实现的SPI协议(一)----SPI驱动 FPGA实现的SPI协议(二)----基于SPI接口的FLASH芯片M25P16的使用 1、什么是SPI协议 SPI(Serial Peripheral Interface,串行外围设备…

SPI总线协议概述

一.概述 SPI(serial peripheral interface)是一种同步串行通信协议,由一个主设备和一个或多个从设备组成,主设备启动与从设备的同步通信,从而完成数据的交换。SPI是一种高速全双工同步通信总线,标准的SPI仅仅使用4个引脚&#xff…

SPI协议详解(总结)

关于SPI协议 1)SPI是串行外设接口(Serial Peripheral Interface)的缩写; 2)是一种高速的,全双工,同步的通信总线; 3)在芯片的管脚上只占用四根线,节约了芯片的…

SPI通讯协议介绍

来到SPI通讯协议了。废话两句,“SPI很重要”,这是我在学校时候听那些单片机开发工程师说的。出来实习,到后来工作,确实如此,SPI的使用很常见,那么自然重要咯。 SPI(Serial peripheral interface)即串行外围…

spi协议及工作原理分析

说明.文章摘自:SPI协议及其工作原理浅析 http://bbs.chinaunix.net/thread-1916003-1-1.html 一、概述. SPI, Serial Perripheral Interface, 串行外围设备接口, 是 Motorola 公司推出的一种同步串行接口技术. SPI 总线在物理上是通过接在外围设备微控制器(PICmicro…

SPI总线协议介绍

SPI总线协议介绍 一、技术性能 SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave模式应用,一般仅支持单Master。时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI接…

SPI 协议的解析

目录 1、SPI 的硬件层 1.1、SPI接口的信号线 1.2、SPI通信常见的连接方式 2、SPI的通信协议 2.1、起始信号 2.2、停止信号 2.3、数据有效性 2.4、时钟的同步 3、SPI的四种工作模式 SPI协议是由摩托罗拉公司提出的一种串行外围设备通信接口,是一种高速全双工…

SPI协议详解

1.SPI协议简介 1.1.SPI协议概括 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器&a…

一文看懂SPI协议

文章目录 SPI协议简介4线还是3线?4种工作模式多种传输速率SPI协议的基本时序SPI协议的升级版FPGA实现SPI协议SPI和IIC的对比总结 SPI协议简介 板卡内不同芯片间通讯最常用的三种串行协议:UART、I2C、SPI,之前写过串口协议及其FPGA实现&#…

SPI协议简单介绍

导言 SPI是串行扩展总线。 串行总线技术可以使系统的硬件设计大大简化、系统的体积减小、可靠性提高。同时系统的更改和扩充极为容易。 常用的串行扩展总线有:I2C(Inter IC Bus)总线、单总线(1-WIRE BUS)、SPI(Serial Peripher…

SPI通信协议详解

SPI协议基本概念 SPI接口 (1)SPI(Serial Peripheral interface)是一种同步串行传输规范,也是单片机外设芯片串行外设扩展接口,该接口是一种高速,全双工,同步的通信总线,…

SPI 协议详解

SPI 协议详解 1、SPI 简介2、SPI四线3、SPI四种工作模式4、SPI时序图 1、SPI 简介 SPI 全称是 Serial Perripheral Interface,也就是串行外围设备接口。 SPI 是 Motorola 公司推出的一种同步串行接口技术,是一种高速、全双工的同步通信总线,…

SPI协议简介—学习笔记

SPI协议简介—学习笔记 1、SPI百度百科 SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚&…

一文搞懂SPI通信协议

目录 1、简介 2、通信原理 3、通信特性 3.1、设备选择 3.2、设备时钟 3.2.1、时钟速率 3.2.2、时钟极性 3.2.3、时钟相位 3.3、四种模式 4、多从机模式 5、SPI优缺点 1、简介 SPI是串行外设接口(Serial Peripheral Interface)的缩写&#xf…

SPI协议详解(图文并茂+超详细)

加入技术交流群 领取资料 文章目录 先说串口SPI通讯协议SPI特性时钟频率时钟极性 CKP/Clock Polarity时钟相位 CKE /Clock Phase (Edge)时钟配置总结 模式编号多从机模式优缺点SPI通讯的优势SPI的缺点 编程实现 先说串口 因为之前写过一篇UART,通用串行异步通讯协…

Xms Xmx Xss 释义

Xms 是指设定程序启动时占用内存大小。一般来讲,大点,程序会启动的快一点,但是也可能会导致机器暂时间变慢。 Xmx 是指设定程序运行期间最大可占用的内存大小。如果程序运行需要占用更多的内存,超出了这个设置值,就会…