SPI总线协议需要了解哪些知识点?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SPI总线协议需要了解哪些知识点?相关的知识,希望对你有一定的参考价值。

参考技术A 串行外围设备接口SPI(serial
peripheral
interface)总线技术是Motorola公司推出的一种同步串行接口,现在市面上大部分MCU(微控制器)都配有SPI硬件接口,如i.MX、TI系列MCU。SPI
用于CPU与各种外围器件进行全双工、同步串行通讯。SPI可以同时发出和接收串行数据。它只需四条线就可以完成MCU与各种外围器件的通讯,这四条线是:串行时钟线(CSK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)、低电平有效从机选择线CS。这些外围器件可以是简单的TTL移位寄存器,复杂的LCD显示驱动器,A/D、D/A转换子系统或其他的MCU。
当SPI工作时,在移位寄存器中的数据逐位从输出引脚(MOSI)输出(高位在前),同时从输入引脚(MISO)接收的数据逐位移到移位寄存器(高位在前)。发送一个字节后,从另一个外围器件接收的字节数据进入移位寄存器中。主SPI的时钟信号(SCK)使传输同步。其典型系统框图如下图所示。
SPI主要特点有:
可以同时发出和接收串行数据;
可以当作主机或从机工作;
提供频率可编程时钟;
发送结束中断标志;
写冲突保护;
总线竞争保护等。

图2示出SPI总线工作的四种方式,其中使用的最为广泛的是SPI0和SPI3方式(实线表示):
SPI
模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果
CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设音时钟相位和极性应该一致。SPI总线接口时序如图所示。
其实,如果你想了解更好的话,可以去【致远电子】那了解的。

SPI总线详解

SPI总线详解

一、SPI简介

SPI英文全称(Serial Perripheral Interface),即串行外围设备接口,是一种同步全双工串行接口,MCU可以通过SPI方式与各种外围设备进行高速数据通信

二、SPI协议

2.1 软件协议

SPI是四线通讯协议,有4条逻辑线,这四根线功能如下:

连线功能
CS用于 Master 设备片选 Slave设备, 使被选中的 Slave 设备能够被 Master 设备所访问
SCK主要的作用是 Master 设备往 Slave 设备传输时钟信号, 控制数据交换的时机以及速率
MISOMaster Out Slave Input 主机输入数据,从机输出数据
MOSIMaster InputSlave Out 主机输出数据,从机输入数据

4线SPI进行通讯时首先拉低CS片选信号选中目标从机,因为SPI可以进行多机通讯,然后SCK要产生连续的脉冲信号,在每个SCK信号的边沿MISO线上的数据(高电平为1,低电平为0,电平由Slave控制)传输到主机Master而MOSI线上的数据(高电平为1,低电平为0,电平由Master控制)传输到从机Slave,参考协议图如下:CS拉低后,在SCK边沿MISO发送1到主机,MOSI发送0到从机

以上就是SPI通讯大致流程,除此之外SPI通讯协议根据SCK空闲电平的高低时钟脉冲的第一个边沿还是第二个边沿传数据可以分为4种,四种模式我列在下表:

模式特点
模式1SCK空闲电平为低电平,数据传输在SCK的第一个边沿
模式2SCK空闲电平为低电平,数据传输在SCK的第二个边沿
模式3SCK空闲电平为高电平,数据传输在SCK的第一个边沿
模式4SCK空闲电平为高电平,数据传输在SCK的第二个边沿

2.2 硬件SPI

SPI通讯一般是基于硬件SPI收发器进行通讯的,主机和从机间都有一个SPI收发器,收发器的简图如下:

简图上主要描述了3个寄存器类别:

寄存器功能
SSPBUF(Synchronous Serial Port Buffer)指SPI设备里面的内部缓冲区, 一般以FIFO(先进先出)方式临时存储数据
SSPSR(Synchronous Serial Port Register)指SPI 设备里面的移位寄存器(Shift Regitser),它的作用是根据设置好的位宽把数据移入或者移出SSPBUF
Controller指控制寄存器组,配置SPI总线的传输模式

使用流程: 用户配置控制寄存器组,装载数据到SSPBUF缓冲区,拉低CS,启动SCK电平后,在SCK产生边沿信号是,通过移位寄存器将0/1信号传输到主机或者从机,硬件SPI通讯用户只需要配置速率,位宽,拉低片选传入数据就行,具体的协议传输过程则有收发器自己完成,减少CPU的负担,传输稳定且方便,缺点就是需要借助硬件资源,成本较高

2.3 软件SPI

SPI的实现除了通过硬件SPI来实现,也可以通过软件SPI进行实现,软件SPI就是用IO口模拟SPI端口的协议,这总方向代码编写比较麻烦,但是对硬件资源要求不高,可扩展性强

如果要编写软件SPI代码可以参考这篇文章: 软件模拟SPI接口程序代码(4种模式)

三、SPI协议特点

3.1 采用主- 从控制模式

两个SPI 设备之间通信必须由主设备 (Master) 来控制从设备(Slave),一个 Master 设备可以通过提供 SCK信号进而控制是否数据传输,并且在多从机控制时,与IIC通过地址选择从机不同,SPI协议使用片选CS对 Slave 设备进行选择,达到多从机选择通信的目的

3.2 同步通信

SPI通信方式属于同步通信,首先了解一下同步和异步通信区别

  • 同步通信: 同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息,在没有信息要传输时,要填上空字符进行传输,而不是选择停止通信,因为同步传输不允许有间隙

  • 异步通信: 异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的,因为每一个字符的开始和结束的地方都有设置标志位,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来

参考文章:同步通信与异步通信区别

3.3 全双工通信

SPI通信时是全双工通信,双工指的是主机与从机可以进行双向通信全双工指双向通信可以同时进行,半双工指的是双向通信不能同时进行,以其他方式比如一发一回的形式进行,此处SPI通信在每个时钟边沿到来时进行了双向数据交换,交换是同时进行的,所以SPI是全双工、而IIC通信不能同时进行双向通信,所以他是半双工通信

四、其他文章推荐

你和PID调参大神之间,就差这篇文章!

神器!200元开发板运行神经网络模型,吊打OpenMV!(保姆级教程)

51单片机多线程神器:Tiny-51操作系统

用树莓派做服务器运行博客网页

以上是关于SPI总线协议需要了解哪些知识点?的主要内容,如果未能解决你的问题,请参考以下文章

SPI通信协议(SPI总线)学习

spi总线协议

spi总线协议

spi总线协议

SPI总线协议理解

SPI总线详解