-
SPI通信协议
2019-06-28 13:58:54目录 SPI通信协议1. 1、什么是SPI?2. 2、SPI优点3. 3、缺点4. 4、特点5. 5、协议通信时序详解6. 6、内部工作机制 SPI通信协议 SPI协议及其工作原理浅析 1. 1、什么是SPI? SPI是串行外设接口(Serial Peripheral...SPI通信协议
1. 1、什么是SPI?
SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线。
2. 2、SPI优点
4. 4、特点
- 高速、同步、全双工、非差分、总线式
- 主从机通信模式
5. 5、协议通信时序详解
1). 通信原理
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多 个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共 有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。
- SDO/MOSI – 主设备数据输出,从设备数据输入;
- SDI/MISO – 主设备数据输入,从设备数据输出;
- SCLK – 时钟信号,由主设备产生;
- CS/SS – 从设备使能信号,由主设备控制。当有多个从设备的时候,因为每个从设
备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需
要将从设备对应的片选引脚电平拉低或者是拉高。
2). SPI通信模式
需要说明的是,我们SPI通信有4种不同的模式,不同的从设备可能在出厂是就是配 置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们 可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来 控制我们主设备的通信模式时钟极性CPOL: 是用来配置SCLK的电平出于哪种状态时是空闲态或者有效态 时钟相位CPHA : 是用来配置数据采样是在第几个边沿: CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时 CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时 CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿 CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿
具体如下:
图:spi时序 需要注意的是:我们的主设备能够控制时钟,因为我们的SPI通信并不像UART或者IIC通信 那样有专门的通信周期,有专门的通信起始信号,有专门的通信结束信号;所以我们的 SPI协议能够通过控制时钟信号线,当没有数据交流的时候我们的时钟线要么是 保持高电平要么是保持低电平。
6. 6、内部工作机制
图:SPI Data Transfer -
SPI 通信协议
2020-12-17 16:21:37SPI 通信协议一、串行通信 VS. 并行通信二、SPI 如何工作1.1.SPI信号列表1.2.SPI工作模式1.3.SPI特点——同步、串行、全双工、主从结构三、SPI数据传输步骤3.1.时钟极性CPOL与时钟相位CPHA3.2.时序图3.3. SPI数据...SPI 通信协议
SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外设接口。
SPI协议主要作为主控芯片去配置外围芯片的接口协议
。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI是一种高速的,全双工,同步,串行,主从结构通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。一、串行通信 VS. 并行通信
数据位可以通过并行或串行的形式传输。在
并行通信
中,数据位的所有比特位同时发送,每一个比特链接一根独立的导线。下图显示了二进制中字母“ C”(01000011)的并行传输:在
串行通信
中,所有比特位通过单根导线逐一发送。下图显示了二进制中字母“C”(01000011)的串行传输:#二、SPI通信简介
SPI总线的
传输速率
需要自定义,没有具体的规定,一般为:400KHz~10MHz(AHB:100MHz,APB:50MHz)。SPI的一个独特优势是
可以无中断传输数据。可以在连续流中发送或接收任意数量的位。使用I2C和UART,数据以数据包的形式发送,限制为特定位数。开始和停止条件定义了每个数据包的开始和结束,因此数据在传输过程中被中断。主要功能
:实现MCU与各种外接设备连接(芯片与芯片之间的连接),以串行的方式进行数据交换(串并转换
)。拓扑结构
:一个SPI Master可以通过共享数据线的方式可以连接多个SPI Slave(一主多从);接口配置
:作为芯片与芯片之间互连的接口,通过配置寄存器实现主控芯片(SPI Master)对外围芯片(SPI Slave)的配置;
二、SPI 如何工作
1.1.SPI信号列表
信号名 含义 描述 SCLK Serial Clock、时钟信号线 Master 设备往 Slave 设备传输时钟信号, 同步控制数据交换的时机以及速率 MOSI Master Ouput Slave Input、主设备输出从设备输入数据线 在 Master 上面也被称为 Tx-Channel, 作为数据的出口, 用于SPI主设备发送数据 MISO Master Input Slave Ouput、主设备输入从设备输出数据线 在 Master 上面也被称为 Rx-Channel, 作为数据的入口, 主要用于SPI从设备接收数据 SS/CS Slave Select/Chip Select
、从机选择线,低电平有效Master 设备片选 Slave 设备, 使被选中的 Slave 设备能够被 Master 设备所访问 SS、SCLK、MOSI信号均由主设备产生,MISO信号由从设备产生。在SS为低电平的前提下,MOSI和MISO信号才有效,在每个时钟周期MOSI和MISO传输一位数据。
1.2.SPI工作模式
SPI通讯需要使用4条线:3条总线和1条片选,物理连接如下:
SPI还是遵循主从结构,SPI协议适用于一主 多从的两种工作场景:
如果仅存在一个CS / SS引脚,则可以通过菊花链将多个从设备连接到主设备:
1.3.SPI特点——同步、串行、全双工、主从结构
- 同步方式(Synchronous)传输数据
Master设备会根据将要交换的数据来产生相应的时钟脉冲(Clock Pulse), 时钟脉冲组成了时钟信号(Clock Signal) , 时钟信号通过时钟极性 (CPOL) 和 时钟相位 (CPHA) 控制着两个 SPI 设备间何时数据交换以及何时对接收到的数据进行采样, 来保证数据在两个设备之间是同步传输的。 - 主-从结构(Master-Slave) 的控制方式
SPI 规定了两个 SPI 设备之间通信必须由主设备 (Master) 来控制次设备 (Slave)。一个 Master 设备可以通过提供 Clock 以及对 Slave 设备进行片选 (Slave Select) 来控制多个 Slave 设备, SPI 协议还规定 Slave 设备的 Clock 由 Master 设备通过 SCK 管脚提供给 Slave 设备, Slave 设备本身不能产生或控制 Clock。 - 串行、全双工方式数据交换(Data Exchanges)
SPI 设备间的数据传输之所以又被称为数据交换(全双工通信)
, 是因为 SPI 协议规定一个 SPI 设备不能在数据通信过程中仅仅只充当一个 “发送者(Transmitter)” 或者 “接收者(Receiver)”. 在每个 Clock 周期内, SPI 设备都会发送并接收一个 bit 大小的数据(串行通信)
(不管主设备好还是从设备),相当于该设备有一个 bit 大小的数据被交换了。
需要说明的是,SPI只有主模式和从模式之分,没有读和写的说法,因为实质上每次SPI是主从设备在交换数据。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。
三、SPI数据传输步骤
3.1.时钟极性CPOL与时钟相位CPHA
SPI 设备在进行通信的过程中, Master 设备和 Slave 设备之间会产生一个数据链路回环(Data Loop)。
SPI接口有四种不同的数据传输时序,取决于时钟极性(CPOL)和时钟相位(CPHA)的组合。- CPOL:表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1;
- CPHA:表示对应着数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿,0对应着第一个边沿,1对应着第二个边沿;
1)、CPHA=0,表示第一个边沿:
对于CPOL=0,idle时候的是低电平,第一个边沿就是从低变到高,所以是上升沿;
对于CPOL=1,idle时候的是高电平,第一个边沿就是从高变到低,所以是下降沿;
2)、CPHA=1,表示第二个边沿:对于CPOL=0,idle时候的是低电平,第二个边沿就是从高变到低,所以是下降沿;
对于CPOL=1,idle时候的是高电平,第一个边沿就是从低变到高,所以是上升沿;3.2.时序图
结合上面的时序图,Bit1为MSB,Bit8为LSB。假设CPOL=0,CPHA=0。在SCK的第一个时钟周期,在时钟的前沿采样数据(上升沿),在时钟的后沿输出数据。先看主器件,主器件的输出口(MOSI)输出数据bit1,在时钟的前沿被从器件采样,那主器件是何时输出bit1的呢?bit1的输出时刻实际上在SCK信号有效以前,比SCK的上升沿还要
早半个时钟周期
,bit1的输出时刻与SS_n信号没有关系。再来看从器件,主器件的输入口MISO同样是在时钟的前沿采样从器件输出的bit1的,那从器件又是在何时输出bit1的呢?从器件实在SS_n信号有效后,立即输出bit1,尽管此时SCK信号还没有生效。3.3. SPI数据传输步骤
1、主设备输出时钟信号:
2、主设备将SS / CS引脚切换到低电压状态,从而激活从设备:
3、主设备使用MOSI信号线每次将1比特数据发送到从设备。从设备读取接收到的数据比特:
4、如果需要响应,则从设备使用MISO信号线每次将1比特数据返回给主设备。主设备读取接收到的数据比特:
可以看出bit1的输出时刻LSB First实际上在SCK信号有效以前,比SCK的上升沿还要
早半个时钟周期
。四、SPI总线的优点与缺点
使用SPI总线有一些优点和缺点,如果要在不同的通信协议之间进行选择,则应根据项目要求来判断何时使用SPI总线:
优点
- 无起始位和停止位,因此数据位可以连续传输而不会被中断
- 没有像I2C这样复杂的从设备寻址系统
- 数据传输速率比I2C更高(几乎快两倍)
- 分离的MISO和MOSI信号线,因此可以同时发送和接收数据
缺点
- 使用四根信号线(I2C和UART使用两根信号线)
- 无法确认是否已成功接收数据(I2C拥有此功能)
- 没有任何形式的错误检查,如UART中的奇偶校验位
- 只允许一个主设备
参考:
https://blog.csdn.net/weixin_46022434/article/details/105624672
-
spi通信协议
2018-11-08 22:24:46下面主要是讲解下个人对于spi通信时序图以及通信协议的理解(有说错的请大指出,小弟也是刚学的有很多不懂)。 下面进入正题: SPI简介 SPI就是串行外围设备接口,它是一种高速的,全双工,同步的通信总线,...学单片机必须要掌握的集中串行通信协议中spi就是其中之一。
下面主要是讲解下个人对于spi通信时序图以及通信协议的理解(有说错的请大指出,小弟也是刚学的有很多不懂)。
下面进入正题:
SPI简介
SPI就是串行外围设备接口,它是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,这四根线的定义分别是:
MISO:主设备数据输入,从设备数据输出;
MOSI:主设备数据输出,从设备数据输入;
SCLK:时钟信号,由主设备产生;
CS:从设备片选信号,由主设备控制;
SPI为了和外设进行数据交换,根据外设工作要求(具体得看外设spi读写时序图,有时序图编写驱动代码),其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
spi内部结构图:
SPI总线数据传输时序图如下图:
总结:spi通信为4线全双工,spi通信由于时钟极性(CPOL)时钟相位(CPHA)的不同可以配置为4种模式。完成一位数据传输是在一个周期两个跳变沿内完成的,一个跳变沿采样(可以理解为:内部移位寄存器读取io值),一个跳变沿数据输出(可以理解为:内部移位寄存器将最高位移动到io口上)。
具体移动过程参考此帖子:http://bbs.elecfans.com/jishu_441914_1_1.html
时钟前沿输出:
时钟后沿采样:
就这样一个周期完成一位数据的交换。
stm32spi主模式下数据的发送与接收:
数据发送过程
当写入数据至发送缓冲器时,发送过程开始。
在发送第一个数据位时,数据字被并行地(通过内部总线)传入移位寄存器,而后串行地移出到MOSI脚上; MSB在先还是LSB在先,取决于SPI_CR1寄存器中的LSBFIRST位的设置。数据从发送缓冲器传输到移位寄存器时TXE标志将被置位,如果设置了SPI_CR1寄存器中的TXEIE位,将产生中断。
数据接收过程
对于接收器来说,当数据传输完成时:
● 传送移位寄存器里的数据到接收缓冲器,并且RXNE标志被置位。
● 如果设置了SPI_CR2寄存器中的RXNEIE位,则产生中断。
在最后采样时钟沿, RXNE位被设置,在移位寄存器中接收到的数据字被传送到接收缓冲器。读SPI_DR寄存器时, SPI设备返回接收缓冲器中的数据。读SPI_DR寄存器将清除RXNE位。
一旦传输开始,如果下一个将发送的数据被放进了发送缓冲器,就可以维持一个连续的传输流。在试图写发送缓冲器之前,需确认TXE标志应该为’1’。总结; 发送端:数据---DR寄存器---->缓冲区----->移位寄存器------>一位一位的发送到主机输出口
接收端:读取miso口数据(从机发来)到移位寄存器---->读取8位后放入缓冲区-----DR寄存器
程序的读写数据都是对缓冲区操作的。发送缓冲寄存器为空TXE=1,接收缓冲寄存器不为空RXNE=1,所以spi读写数据过程:
发送数据时:判断发送缓冲寄存器是否为空为空则发送,
接收数据时:判断接收缓冲寄存器是否非空,是则读取数据。
例如:
u8 SPI1_ReadWriteByte(u8 TxData)
{
u8 retry=0;
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) //检查指定的 SPI
//标志位设置与否:发送缓存空标志位
{
retry++;
if(retry>200)return 0;
}
SPI_I2S_SendData(SPI1, TxData); //通过外设 SPIx 发送一个数据
retry=0;
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET)//检查指定的
SPI 标志位设置与否:接受缓存非空标志位
{
retry++;
if(retry>200)return 0;
}
return SPI_I2S_ReceiveData(SPI1); //返回通过 SPIx 最近接收的数据
}
stm32 spi初始化过程:配置步骤
1. 通过SPI_CR1寄存器的BR[2:0]位定义串行时钟波特率。
2. 选择CPOL和CPHA位,定义数据传输和串行时钟间的相位关系(见图212)。
3. 设置DFF位来定义8位或16位数据帧格式。
4. 配置SPI_CR1寄存器的LSBFIRST位定义帧格式。
5. 如果需要NSS引脚工作在输入模式,硬件模式下,在整个数据帧传输期间应把NSS脚连接
到高电平;在软件模式下,需设置SPI_CR1寄存器的SSM位和SSI位。如果NSS引脚工作
在输出模式,则只需设置SSOE位。
6. 必须设置MSTR位和SPE位(只当NSS脚被连到高电平,这些位才能保持置位)。
在这个配置中, MOSI引脚是数据输出,而MISO引脚是数据输入。
例如:SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //设置 SPI 全双工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //设置 SPI 工作模式:设置为主 SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // 8 位帧结构
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//选择了串行时钟的稳态:时钟悬空高
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //数据捕获于第二个时钟沿
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS 信号由硬件管理
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //预分频 256
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //数据传输从 MSB 位开始
SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC 值计算的多项式
SPI_Init(SPI1, &SPI_InitStructure); //②根据指定的参数初始化外设 SPIx 寄存器
SPI_Cmd(SPI1, ENABLE); //③使能 SPI 外设
-
SPI通信协议的介绍
2020-07-20 16:20:38本文章是关于SPI通信协议的介绍。 -
SPI通信协议笔记
2019-03-01 14:51:15 -
串口通信协议之SPI通信协议
2020-07-01 23:14:23串口通信协议之SPI通信协议 SPI通信协议 什么是SPI? SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线。 SPI优点... -
SPI 通信 协议 中文
2012-02-15 09:52:49SPI 通信 协议 中文