干货总结:SPI总线详细要点
[导读] 前面总结了UART/I2C的技术要点,SPI相对I2C而言,比较简单。本文来总结一下SPI总线个人认为比较重要的一些技术要点。
什么是SPI?
SPI(Serial Peripheral Interface) 是一种嵌入式系统中应用广泛的同步串行通信、主从架构式总线接口。80年代由摩托罗拉开发,已成为事实标准。
这句话里有几个关键要点:
同步
串行
通信
主从
总线
要理解这些要点,先上图,一图胜千言:
常见的SPI接口有这样几个引脚:
SCLK: 串行时钟,总是主端负责输出(Master)。总是由主端控制该信号,从端为输入采样。
MOSI:主出从入(Master Output Slave Input)。总是由主端控制该信号,从端为输入采样。
MISO:主入从出(Master Input Slave Output)。总是由从端控制该信号,主端为输入采样。
:从选择信号(Slave Select)。总是由主端控制该信号,从端为输入采样。
要理解上面这几个信号引脚的内涵,结合时序图,就比较容易理解了:
数字电路中,同步电路是一种通过时钟信号同步存储元件状态变化的数字电路。
主端>从端:
:主端发送低电平先选通从芯片,上面加帽表示低有效。啥意思呢?就是这个脚低电平期间选中从设备,主设备发送的时序报文对选中的从设备有效,其他挂载在总线上的设备忽略总线报文。
SCLK/SCK:发送同步移位时钟。
MOSI:将数据按照SCLK移位时钟周期,将数据移位发送至该引脚。被选中的从设备依照SCLK/SCK上升沿或者下降沿,按位采样,一般字节的高位在前,具体须遵从芯片手册时序定义。从端依赖SCK/SCLK对MOSI上的信号逐位采样,采样的位依次进入接收移位寄存器,完成对字节的重组。当字节接收完成,再由后续数字电路进行处理。后续处理芯片实现各异,如是一个单片机则可能引发中断请求,如是特定功能数字芯片,则依据接收报文完成相应的功能处理。
从端>主端:
:主芯片发送低电平先选通从芯片。
SCLK/SCK:发送同步移位时钟。
MISO: 类似MOSI发送位流,依赖SCLK/SCK将位流依次发送至引脚上,主设备在同步时钟的跳变边沿采样该引脚,进而移位接收位流。
采样沿:SPI采用边沿触发采样,对MOSI/MISO上的位序列进行采样,实际芯片有下面两种方式:
CPHA=0,表示上升沿采样
CPHA=1,表示下降沿采样
经过这些描述,解释了串行、同步、主从的概念。
什么是通信?
众所周知,计算机是一个二进制系统,所有的信息都是基于0/1进行编码、进行运行管理的。由0/1编码进而表示字符、文本、文件。那么SPI实现了底层的0/1码流的传递机制,能传递0/1,通过应用控制、很自然就能交换信息。
这是否有种一生二、二生三、三生万物的意思呢?
所以在研究各种通信总线的物理层时,就其本质而言都是界定如何对信息流的基本单元0/1进行编码、解码、收发的。
什么是SPI总线呢?
对于SPI总线而言,有两种拓扑:
独立片选拓扑:总线拓扑需要更多片选引脚,但通信效率高。信息直接在主从间传递
菊花链拓扑:节省引脚,但效率较低,数据信息传递需要级联传递。
独立片选拓扑
如上图:
每个从设备都有独立的片选引脚,主机同一时间段内,与一个从设备进行通信,也即选中一个从设备。
MOSI/MISO/SCLK并联在一起
MISO须是三态门,当从设备未选中时,该脚须设置为高阻态,而不能是输出态,否则会影响总线,这句话对于多从设备应用而言,请重点理解。尤其当用GPIO模拟SPI应用而言,须特别注意这一点!
对于MOSI/SCLK,虽然并联在一起,但是由于仅一个输出,多输入。输入引脚的阻抗本来就是高阻,所以不会有问题。
菊花链拓扑
有的芯片支持菊花链拓扑连接,这是何意呢?啥是菊花链呢?在电气和电子工程中,雏菊链是一种布线方案,其中多个设备按顺序或按环连接在一起,类似于雏菊的花环。其信息传递在链中流转。
那么对于SPI总线而言,具体是如何连接的呢?
其本质就是主从级联:
共用SCLK/,这两根线并联在一起
主MOSI连次级MOSI,次级MISO连次次级的MOSI....,然后由最后一级的MISO再送回到主设备的MISO。
某级从设备在第N组时钟周期用MISO发送第N-1组时钟周期接收到位给下级设备,同时把本组时钟周期期间前级设备通过MISO移位进来的数据保存按位序保存进接收寄存器中。其实在底层是按照位进行流转的。这个传递过程当变为高电平时则停止,各从设备当前寄存器中内容锁定了。具体应用时,如果要将某一字节传递到某个设备,则需要组织好传递的码流,以及时钟控制。
对于菊花链数据传递过程,其实类似于击鼓传花游戏。鼓点的作用就是同步时钟,花则是要传递的信息数据,鼓点的起停则类似于片选控制,唯一不同的是,击鼓传花传的是一朵花,而菊花链总线传递的是二进制流,至于从设备究竟要怎么应用这些数据流,则具体实现各异。
其实熟悉数据结构的同学可能会想,这个拓扑咋很像首尾相连的环形链表呢?确实很像,虽然没啥直接关系。
引脚的别名
对于SPI的引脚,不同的芯片厂商在DATASHEET上定义的引脚名字可能不同,这里将常见的别名整理一下:
MOSI主出从入:
SIMO, MTSR
SDI, DI, DIN, SI
SDO, DO, DOUT, SO
MISO主入从出
SOMI, MRST
SDO, DO, DOUT, SO
SDI, DI, DIN, SI
片选
S̅S̅, SSEL, CS, C̅S̅, CE, nSS, /SS, SS
很多功能芯片可能没有MISO引脚,也即无法支持读操作,仅仅支持写入操作。
SPI优缺点
优势:
传输速度高,SPI并未限定最高速度。有的应用甚至高达10Mbps。
全双工,但有的芯片没有MISO,则不支持。
相较于I2C而言,SPI简单一些,编程容易,控制简单
信号为单向信号,易于电隔离。尤其在工业产品中电气隔离在抗干扰方面、以及本质安全方面要求比较高。
没有复杂的总线仲裁机制,相对健壮。
劣势:
无寻址机制,需要额外的片选信号
SPI总线对于多从模式支持不好,两种拓扑都无法支持很多从设备,而且系统中也仅有一个主设备
没有定义错误检测机制
事实上的标准,但无正式标准
与I2C一样也只是芯片间总线,无法长距离通信
总结一下
或许有人会说I2C比SPI更好更为优越,SPI则相对简单粗暴。事实上做这样的对比,个人认为是没什么意义。
这两种协议在鲁棒性方面都比较好。I²C之所以优雅,是因为它在极简的基础架构(两线SDA/SCL)上提供了非常先进的功能,例如自动多主机冲突处理和内置地址管理。但是它相对却非常复杂,在性能上或许有所欠缺。
另一方面,SPI非常易于理解和实施,并且为扩展提供了很大的灵活性。SPI的优雅之处在于简单性。SPI应该被视为构建用于IC之间通信的自定义协议栈的良好接口。因此,尽管使用SPI可能需要做更多的工作,但可以提供更高的数据传输性能和灵活的自由度。
如果一定要比较,则SPI和I2C都为低速设备的通信提供了良好的接口支持,但是SPI更适合点对点传输数据流的应用,而I²C则更适合于多主机“寄存器访问”应用。
正确使用这两种协议可提供相同级别的鲁棒性,芯片厂商对两种接口都广泛支持。市面上提供了大量的外围芯片,比如 EEPROM,ADC,DAC,RTC,微控制器,传感器,LCD控制器,这些芯片主要提供I²C,SPI或同时支持这2个接口。
-END-
猜你喜欢干货总结:I2C总线详细要点IIC与SPI,这两种通讯方式该怎么选?
“I2C”通信的那些坑,新手必看!最 后 若觉得文章不错,转发分享,也是我们继续更新的动力。5T资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、单片机、等等!在公众号内回复「更多资源」,即可免费获取,期待你的关注~长按识别图中二维码关注
干货总结:SPI总线详细要点相关推荐
- 干货总结:I2C总线详细要点
[导读] 前文总结了单片机串口个人认为值得注意的一些要点,本文来梳理一下 I2C 总线的一些要点.这个题目有点大,本文对于 I2C 其实很多地方也没整清楚,只为了与前文形成系列,如果大家有补充欢迎留言 ...
- spi四种工作模式时序图_还没学会SPI总线协议?干货都在这里
SPI总线基本概念 SPI是一种高速.全双工.同步的串行通信总线,全称是Serial Peripheral Interface,使用时在芯片的管脚上只占用三根或者四根线(如果单向传输的话只需三根线就可 ...
- 基于I2C/SPI总线的温湿度采集与OLED显示
实验一 实验目的 学习I2C总线通信协议,使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出.具体任务: 1)解释什么是"软件I2 ...
- I2C与SPI总线对比
最近2周一直在调试IIC和SPI总线设备,这里记录一下2种总线,以备后忘. 一 IIC总线 I2C--INTER-IC串行总线的缩写,是PHILIPS公司推出的芯片间串行传输总线.它以1根串行数据线( ...
- stm32h7高速通信_【STM32H7教程】第75章 STM32H7的SPI总线应用之驱动DAC8501(双路输出,16bit分辨率,0-5V)...
第75章 STM32H7的SPI总线应用之驱动DAC8501(双路输出,16bit分辨率,0-5V) 本章节为大家讲解标准SPI接线方式驱动模数转换器DAC8501,制作了中断和DMA两种 ...
- LINUX SPI设备驱动模型分析之二 SPI总线模块分析
上一篇文章我们简要介绍了SPI驱动模块,本章我们详细说明一下spi总线.设备.驱动模块的注册.注销以及这几个模块之间的关联. SPI总线的注册 spi模块也是基于LINUX设备-总线-驱动模型进行开发 ...
- 【STM32F429开发板用户手册】第33章 STM32F429的SPI总线应用之驱动DAC8563(双通道,16bit分辨率,正负10V)
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第33章 STM32F429的SPI总线应用之驱动DA ...
- FPGA——SPI总线控制flash(3)含代码
前面几篇详细 介绍了SPI的原理,并且实现了对flash芯片的写使能,读状态,擦除,页读,页写 FPGA--SPI总线详解(概念)_居安士的博客-CSDN博客_fpga芯片 FPGA--S ...
- 【STM32H7教程】第72章 STM32H7的SPI总线基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第72章 STM32H7的SPI总线基础知识和HA ...
最新文章
- mysql 执行计划 什么用_简述MySQL的执行计划的作用及使用方法
- 研究人员测试27个黑客服务 结果仅三个完成任务
- tcp和udp多线程的epoll服务器+客户端源代码 - brucema的个人空间 - 开源中国社区
- 类型与通用语言运行时
- Spring Web Flow 入门demo(二)与业务结合 附源码
- 这个回答让我错失offer!成功收获美团,小米安卓offer
- 网站程序安全分析器 VB源码
- 【官方搭建入门】JEEWX 捷微开发环境搭建必读
- 如何将链接的服务器从SQL Server“调试”到Oracle数据库实例
- 编程珠玑是基于c语言写的吗,编程珠玑:变位词集
- ipv6overipv4+linux,IPv4 over IPv6 的配置
- 关于数据安全中一些概念的学习——容灾备份
- 怎样挖掘搜索关键词?
- [相机原理]单反与手机是如何实现对焦的?——反差对焦的原理
- html适应不同的分辨率,css如何适应不同分辨率?
- CAPL创建与语法简介
- SurfaceGo_BMR_41_1.011.2.zip恢复镜像网盘满速下载地址
- Scratch中的坐标系
- Java对dat文件内容进行查询_java读写dat文件
- BCG Visual Manager
热门文章
- note header initialization discussion
- 怎么判断当前的os类型,手机类型
- Tomcat 是怎么处理js file access request的
- IBASE and ES change pointer
- Database specific hint in One order search
- HANA Calculation View
- 通过configuration隐藏product overview page上某些区域
- 直接调用支持ACE的product search API
- 检测custom settype assign的UI view name
- 避免CRM_IB 013 error message