SPI通信机制深入解析

SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI是一种高速的、全双工、同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,只是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议,如NRF24L01、VS1053、SD卡等等。



那么何为高速?串口是不是高速?串口的波特率一般是多少?

115200bps是吧,那么SPI的最高速率是10Mbps,比串口快多少?

115200bps就是115.2kbps对吧那么乘以10也就是1.152Mbps对吧?这样也就说明SPI的速度比串口快了差不多100倍的速度。



那么何为全双工呢?

全双工通信:发送数据的同时也可以接收数据,接收数据的同时也可以发送数据。而且通信的同时是可以同步的。

那么同步是什么意思呢?

同步:发送数据的同时,并且要发送数据给我。

假如有两个模块:

SPI通信原理介绍_SPI通信原理

XX芯片给SPI Flash发送数据的同时,同时SPI Flash也要发送数据给我;

就像买卖关系一样,我给你钱的时候,你必须把东西给我。

并且同时在芯片上只需要占用四根线就可以达到10Mbps。(10Mbps是非常快的)

10Mbps也就是说在1秒内能传输多少字节?是不是要除以8?

那么SPI是总线关系,什么是总线?总线有什么用? 其实就像路由器一样,可以连接很多电脑。

就是说XX芯片可以用四根线连接很多设备。

在平时对SPI的利用是非常广泛的,所以必须的懂,为什么要必须懂?我们可以想一想,我们使用的手机,照相机之类的设备是不是离不开SD卡?还有一些音频啊之类的都是利用SPI协议,所以不懂也得花时间把它弄明白。


SPI协议中有四根线,SCLK、MISO、MOSI、SS;

在SPI通信中分为两个角色,有SPI Msater和SPI Slave;什么意思呢?

SPI Msater:是主机(主机模式)

SPI Slave:是从机(从机模式)

在主机和从机当中有什么区别?

谁发起通信谁就是主机;发起通信的时候SCLK作为时钟线,它是由主机来发起的。

那么接下来说一下总共有四根线:

SCLK:串行时钟线;

MOSI:主机输出数据,从机接收数据;

MISO:主机接收数据,从机发送数据;

SS:我们一般称之为片选信号,也就是说只有这根线输出低电平信号的时候,才能开始工作。


接下来很多人会想为什么要有SS(片选信号)来连接两个设备呢?

其实最主要的就是它是一个总线的关系;


我们看一个图:SPI通信原理介绍_SPI通信原理_02

那么通过以上这张图,就能说明为什么要有SS(片选信号),主要是为了防止数据紊乱,所以要用片选引脚来控制是哪一个设备工作,在我们工作当中,只能有一个设备工作,也就是说SPI通信的时候只能控制一个设备工作,其他设备是不能工作的。

片选信号:用于控制从机设备,而同时这三根引脚只能有一根作为低电平,其他必须为高电平。因为工作的时候,只允许其中一个设备工作,其它设备是不能工作的。原因是为了防止数据出现紊乱的一个现象。



那么接下来就说一下同步通信与传输:

因为今天主要介绍的是SPI协议,是全双工(具有高速的优势),所以就先了解下全双工:

全双工通信:发送数据的同时可以接收数据;接收数据的同时可以发送数据。

半双工通信:发送数据的同时不可以接收数据;接收数据的同时不能发送数据。

SPI是一种全双工的通信方式;

再来了解下同步和异步的区别:

同步通信:发送数据的同时,必须接收数据;

异步通信:发送数据的同时,可以接收数据也可以不接收数据。

接下来画一个图来简单的了解下:SPI通信原理介绍_SPI通信原理_03

根据上面这张图来看,SCLK通信开始和结束必须是高电平;

假如单片机芯片发送给SPI Flash一个命令,然后读取一个字节。


对照上图来一起看下面的两段话:

XX芯片 发送的假如是:0xF4 ( 1 1 1 1  0 1 0 0 )二进制数,因为它是串行通信,MSB(最高有效位优先的方式)。发送第一个Bit的时候先发送一个1,再发送一个1,一直重复8次发送完成。如上图;SPI的通信都是以字节传输的。


SPI Flash 同时要给XX芯片返回 假如返回:假如是0x74 ( 0 1 1 1  0 1 0 0 )二进制数, MBS(最高有效位优先的方式)。返回一个Bit 的时候先返回一个0,再返回一个1,一直重复8次。如上图;


注意:还有一点在通信开始的时候必须是由高到低;通信结束的时候必须是由低到高。


很多时候:

通信开始前SS(片选信号)引脚变为低电平,SPI Flash才工作;

通信结束后SS(片选信号)引脚变为高电平,SPI Flash不工作,同时腾出更多的机会给其他设备工作,不能独占它这一根引脚的低电平对吧。

最后要记住如果有人要问到MSB的话,要知道它和LSB是对应的;

MSB:高有效位优先

LSB:低有效位优先


附上扩展知识:

SPI相对IIC来说有优点也有缺点

优点:

IIC一次需要连续传输8位数据,而SPI允许一位一位的传输,还可以暂停,因为SCK是由我们主设备产生的,所以没有时钟跳变的时候,特别是不采集,或者说传输数据,也就是说主设备通过对SCK时钟线的控制可以完全的对通讯的控制,如果说我们是这个一对一通信,SPI还不需要进行寻址的操作,而且是全双工的通信,就变得非常的简单高效,在多设备的设备当中,每个设备都需要独立的使能,在硬件上看来就会比IIC稍微复杂一点,因为它每一个设备都有有一个独立的IO口进行使能的;

相当于SPI来说IIC的缺点:

没有指定的控制没有应答机制来确认它是否收到数据。


今天的SPI总结到此结束,我把它分享给大家,希望大家能够给些意见,哪里还有欠缺的地方多多指教。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空