0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深入剖析SPI协议

FPGA设计论坛 来源:CSDN技术社区 2025-08-21 15:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、什么是SPI协议

SPI,全称(Serial Peripheral interface)是由摩托罗拉公司首先定义的协议,中文名为串型外围设备接口。SPI是一种高速全双工的总线协议

Serial(串型):与并型相对应,单向数据通路只需要一根线,而同样常见的AMBA则为并型总线

Peripheral(外围):指此总线多用来连接如“AD转换、EEPROM、PWM”等外围设备,即对应于AMBA的APB部分

Interface(总线接口):很好理解,不再赘述。

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

通信协议可以按照通信方式分为单工,半双工,全双工三种。

单工:发射端和接收端固定,有一条数据通路,通路上数据单向流动。

半双工:发射端和接收端可变,有一条数据通路,通路上数据双向流动。

全双工:发射端和接收端,有两条数据通路,一条从TX到RX,另一条从RX到TX。

一张形象的图片表示如下

2f3b6b3c-7bfd-11f0-a18e-92fbcf53809c.png

比如说我们在从零开始的Verilog UART设计中所实现的就是一个单工UART

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

三、SPI的信号线

SPI需要四条线才能完成数据的发送,分为3条总线和1条片选线

2f51dc0a-7bfd-11f0-a18e-92fbcf53809c.png

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上面的信号,使能从设备进行数据转换

2f64a24a-7bfd-11f0-a18e-92fbcf53809c.png

4.2 菊花链形式

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

2f80c13c-7bfd-11f0-a18e-92fbcf53809c.png

五、SPI可配置变量

5.1 时钟极性(CPOL)

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

2f98b7b0-7bfd-11f0-a18e-92fbcf53809c.png

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

5.2 时钟相位(CPHA)

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

2fab4f42-7bfd-11f0-a18e-92fbcf53809c.png

举例:假如CPOL = 0时,CPHA=0,对应1,3,5处采样,即为上升沿采样,CPHA=1,对应2,4,6处采样,即为下降沿采样。

2fb87d16-7bfd-11f0-a18e-92fbcf53809c.png

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

5.3 CPOL和CPHA组合出四种情况

2fc9b5cc-7bfd-11f0-a18e-92fbcf53809c.png

根据这个图,我们可以发现

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位)

2fe30626-7bfd-11f0-a18e-92fbcf53809c.png

5.5 波特率分频系数

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

5.6 其他参数

以上参数可以保证SPI的基本功能,但一个更为完善的SPI当然不仅限于以上参数,以下参数仅作基本梳理,感兴趣的同学可自行了解相关内容。

SPI_FirstBit,决定SPI是MSB还是LSB的传输形式

SPI_CRCPolynomial,决定SPI是否采用CRC校验的形式进行数据传输

SPI_Direction; 传输方向,两向全双工或单向接收

原文链接

https://blog.csdn.net/weixin_43698385/article/details/124928101

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信协议
    +关注

    关注

    28

    文章

    1073

    浏览量

    41866
  • 接口
    +关注

    关注

    33

    文章

    9443

    浏览量

    156109
  • 总线
    +关注

    关注

    10

    文章

    3014

    浏览量

    91287
  • SPI协议
    +关注

    关注

    0

    文章

    23

    浏览量

    8785

原文标题:理解SPI协议

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深入剖析I2C协议

    I2C是由Philips开发的简单的双向两线总线,在深入浅出理解SPI协议中,我们区分了单工,半双工,全双工协议数据流向的区别,根据特征,I2C协议
    的头像 发表于 08-21 15:10 3260次阅读
    <b class='flag-5'>深入</b><b class='flag-5'>剖析</b>I2C<b class='flag-5'>协议</b>

    深入最经典的电容剖析

    本帖最后由 eehome 于 2013-1-5 10:07 编辑 最深入最经典的电容剖析
    发表于 08-02 21:52

    深入最经典的电容剖析

    `最深入最经典的电容剖析PCB打样找华强 http://www.hqpcb.com/3 样板2天出货`
    发表于 10-17 10:50

    STM32 单片机C语言课程4-C语言预处理深入剖析1

    本帖最后由 张飞电子学院张角 于 2021-9-13 11:42 编辑 大家上午好!今天为大家讲解C语言预处理深入剖析,请持续关注,会持续进行更新!前期回顾:STM32 单片机C语言课程3-C
    发表于 09-10 08:31

    STM32 单片机C语言课程5-C语言预处理深入剖析2

    大家上午好!今天为大家讲解C语言预处理深入剖析,请持续关注,会持续进行更新!前期回顾:STM32 单片机C语言课程4-C语言预处理深入剖析1STM32 单片机C语言课程3-C语言“函数
    发表于 09-13 11:40

    STM32 SPI通信协议的相关资料分享

    特性及架构4.1、STM32的SPI外设简介4.2、STM32的SPI架构剖析4.2.1、通信引脚4.2.2、时钟控制逻辑4.2.3、数据控制逻辑4.2.4、整体控制逻辑4.2.5、通信过程(一)
    发表于 02-11 06:10

    ITIL 3.0深入剖析

    ITIL 3.0深入剖析 作为全球范围内认可的国际标准,ISO 20000正引领全球IT服务管理市场进入新时代。与ISO 20000如日中天相比,ITIL这一I
    发表于 04-13 17:03 1450次阅读

    深入剖析Android消息机制

    深入剖析Android消息机制
    发表于 01-22 21:11 11次下载

    深入剖析火花塞

    本文将深入剖析火花塞,详细介绍火花塞作用与结构,热值与间隙,电极类型与材料,沿面点火及故障现象分析。
    发表于 01-17 16:27 2746次阅读

    STM32 SPI通信协议详细讲解—小白入门

    特性及架构4.1、STM32的SPI外设简介4.2、STM32的SPI架构剖析4.2.1、通信引脚4.2.2、时钟控制逻辑4.2.3、数据控制逻辑4.2.4、整体控制逻辑4.2.5、通信过程(一)
    发表于 12-07 18:36 12次下载
    STM32 <b class='flag-5'>SPI</b>通信<b class='flag-5'>协议</b>详细讲解—小白入门

    STM32 SPI配置及深入解析

    SPI分析平时会使用硬件SPI,但是只用于应用没有具体深入了解SPI的执行流程,此处我采用抓取波形的方式对SPI进行了一下
    发表于 12-22 19:16 4次下载
    STM32 <b class='flag-5'>SPI</b>配置及<b class='flag-5'>深入</b>解析

    SPI协议

    目录SPI协议简介SPI物理层SPI协议SPI协议
    发表于 12-22 19:17 37次下载
    <b class='flag-5'>SPI</b><b class='flag-5'>协议</b>

    spi协议介绍

    文章目录前言一、SPI介绍1.SPI总线2.寻址方式二、通信原理1.通信过程2.极性和相位3.四种工作模式三、SPI与I2C的异同1.相同点2.不同点总结前言spi
    发表于 12-22 19:21 19次下载
    <b class='flag-5'>spi</b><b class='flag-5'>协议</b>介绍

    一文看懂SPI协议

    作者:王超首发:电子电路开发学习都有哪些内容?SPI协议简介4线还是3线?4种工作模式多种传输速率SPI协议的时序SPI
    发表于 01-25 18:35 38次下载
    一文看懂<b class='flag-5'>SPI</b><b class='flag-5'>协议</b>

    深入剖析高速SiC MOSFET的开关行为

    深入剖析高速SiC MOSFET的开关行为
    的头像 发表于 12-04 15:26 2097次阅读
    <b class='flag-5'>深入</b><b class='flag-5'>剖析</b>高速SiC MOSFET的开关行为