单片机学习小组
登录
直播中
cherry1989
12年用户
958经验值
擅长:嵌入式技术
私信
关注
什么是SPI? SPI的通信过程是怎样的?
开启该帖子的消息推送
MCUs
什么是SPI?SPI的
通信
过程是怎样的?
回帖
(1)
卢鉴冰
2022-2-10 11:10:13
1. 杂谈
快两个月没有写博文了,前段时间确实很忙,以至于天天跟我妈抱怨说快累死了,可是最近才知道我妈的工时变成了早五晚8,却从来没有听到她的抱怨,对比我妈,我真的是差的远,不仅行动上懒惰,在时间规划上也差一大截,所以接下来要多行动少抱怨,享受当下,毕竟好的坏的都是你曾经的一部分。
2.什么是SPI?
SPI(Serial Peripheral Interface)是一种串行同步接口,最早由motorola公司提出,用在ADC,flash等与控制器之间通信的场合。同步是它的特点,意思是它在通信时由时钟控制,而不像UART由通信协议规定。
SPI总线一般有四根线,MISO(主输入从输出),MOSI(主输出从输入),SCK(串行移位时钟),NSS(/SS)(片选)。
SPI采用主从方式进行通信,有一个主机,可以跟随多个从机,采用全双工的通信方式,下图是主机和从机的连接方式,注意,不同于UART,发送和接收在两个设备中要交叉连接,这里是主机的MISO和从机的MISO相连,主机的MOSI和从机的MOSI相连,在硬件连接调试时可别弄错了。
下面针对STM32中SPI的四根线进行介绍。
NSS:从片选
低有效。包括两种模式,软件NSS和硬件NSS,两者共同决定了内部片选的输入。
软件NSS:NSS的电平由软件进行控制,主要是通过写SPI 控制寄存器的SS位进行实现。
硬件NSS:分为两种情况,一种是NSS内部输出被使能,作为主SPI时,SSOE被使能,使得NSS使能,所有与NSS相连的设备自动变成从设备;另一种情况是。NSS内部输出被禁止,只能由外部决定,当NSS被拉低时,说明是从设备了。
SCK:时钟信号,主输出,从输入
用于通讯数据的同步。由主机产生,最大的通讯速率为fpclk/2,可以通过配置控制寄存器的BR寄存器设置.
APB(advanced peripheral bus):外围设备总线。
MOSI:主输出从输入
数据方向从主机到从机,当作为主机时,数据从这条线发送,而作为从机,从这条线接收数据。
MISO:主输入从输出
数据传输方向跟MOSI刚好相反。
SPI的内部原理如下图所示。
图中3部分是数据控制逻辑部分。MISO和MOSI直接与移位寄存器相连。
->发送数据时,数据移位寄存器以“发送缓冲区”为数据源,把数据一位一位地通过数据线发送出去。发送缓冲区的数据来自于数据总线。
-> 接收数据时,数据移位寄存器把数据一位一位存储到“接收缓冲区”中。
部分4是整体控制逻辑部分,用来协调整个 SPI 外设。控制参数包括配置SPI 模式、波特率的选择、主从模式选择等。
3. SPI的通信过程
3.1 通讯时序
下图是SPI作为主机时的通讯时序图。
上图包括以下几个信号;
1)起始信号和停止信号
当从机的NSS被拉低时,开始与主机进行通信,当NSS从低变为高后,停止与主机进行通信。
2)触发信号
表示数据变化时刻。
3)采样信号
表示数据的有效传输时刻。这里值得说明的是,采样方式,有四种,由CPOL/CPHA 决定。
CPOL:时钟极性。指 SPI 通讯设备处于空闲状态(不进行数据传输)时, SCK 信号线的电平信号,为0时SCK空闲时为低电平,为1时是高电平。
CPHA:时钟相位。为0时,在SCK的奇数边沿采样,为1时,在SCK的偶数边沿采样。
四种方式总结如下表:
下图是SCK偶数边沿采样,而这个边沿是上升沿还是下降沿取决于SCK空闲时低电平还是高电平,为低电平即CPOL为0时是下降沿采样,反之为上升沿采样。
3.2 数据收发过程
上图是某一种采样模式下,主机的数据收发过程。
1)发送数据时
把要发送的数据写到数据寄存器中,即数据总线上,然后放在发送缓冲器中,通过总线,并行传到移位寄存器里,然后串行从MOSI引脚移出。
当发送完一帧数据的时候,“状态寄存器 SR”中的“TXE 标志位”会被置 1,表示传输完一帧,发送缓冲区已空。注意要发送数据之前,必须往缓冲器里写数据才能发送,所以TXE要先清零再置位。
等待到“TXE标志位”为 1时,若还要继续发送数据,则再次往“数据寄存器 DR”写入数据即可
2)接收数据时
把MISO接收到的数据串行放在移位寄存器中,然后通过总线并行移到接收缓冲器里,然后放在数据总线上。
当接收完一帧数据的时候,“RXNE标志位”会被置 1,表示传输完一帧,接收缓冲区非空
“RXNE 标志位”为 1 时,通过读取“数据寄存器 DR”可以获取接收缓冲区中的内容。
4. STM32里SPI的配置
参考代码如下:
2)SPI的模式初始化
包括SPI的方向,主从选择,数据长度,时钟极性和相位,NSS的选择,波特率的设置,高/低位先行等.
参考代码如下:
之后需要使能SPI外设
3) 数据收发
根据前面SPI的通信过程,在发送数据时,需要等TXE置1才能发送,在发送时把数据存在发送缓冲器里,当RXE置1表示发送一帧完成,接收缓冲器里非空了,可以将接收缓冲器的数据取出。
参考代码如下:
1. 杂谈
快两个月没有写博文了,前段时间确实很忙,以至于天天跟我妈抱怨说快累死了,可是最近才知道我妈的工时变成了早五晚8,却从来没有听到她的抱怨,对比我妈,我真的是差的远,不仅行动上懒惰,在时间规划上也差一大截,所以接下来要多行动少抱怨,享受当下,毕竟好的坏的都是你曾经的一部分。
2.什么是SPI?
SPI(Serial Peripheral Interface)是一种串行同步接口,最早由motorola公司提出,用在ADC,flash等与控制器之间通信的场合。同步是它的特点,意思是它在通信时由时钟控制,而不像UART由通信协议规定。
SPI总线一般有四根线,MISO(主输入从输出),MOSI(主输出从输入),SCK(串行移位时钟),NSS(/SS)(片选)。
SPI采用主从方式进行通信,有一个主机,可以跟随多个从机,采用全双工的通信方式,下图是主机和从机的连接方式,注意,不同于UART,发送和接收在两个设备中要交叉连接,这里是主机的MISO和从机的MISO相连,主机的MOSI和从机的MOSI相连,在硬件连接调试时可别弄错了。
下面针对STM32中SPI的四根线进行介绍。
NSS:从片选
低有效。包括两种模式,软件NSS和硬件NSS,两者共同决定了内部片选的输入。
软件NSS:NSS的电平由软件进行控制,主要是通过写SPI 控制寄存器的SS位进行实现。
硬件NSS:分为两种情况,一种是NSS内部输出被使能,作为主SPI时,SSOE被使能,使得NSS使能,所有与NSS相连的设备自动变成从设备;另一种情况是。NSS内部输出被禁止,只能由外部决定,当NSS被拉低时,说明是从设备了。
SCK:时钟信号,主输出,从输入
用于通讯数据的同步。由主机产生,最大的通讯速率为fpclk/2,可以通过配置控制寄存器的BR寄存器设置.
APB(advanced peripheral bus):外围设备总线。
MOSI:主输出从输入
数据方向从主机到从机,当作为主机时,数据从这条线发送,而作为从机,从这条线接收数据。
MISO:主输入从输出
数据传输方向跟MOSI刚好相反。
SPI的内部原理如下图所示。
图中3部分是数据控制逻辑部分。MISO和MOSI直接与移位寄存器相连。
->发送数据时,数据移位寄存器以“发送缓冲区”为数据源,把数据一位一位地通过数据线发送出去。发送缓冲区的数据来自于数据总线。
-> 接收数据时,数据移位寄存器把数据一位一位存储到“接收缓冲区”中。
部分4是整体控制逻辑部分,用来协调整个 SPI 外设。控制参数包括配置SPI 模式、波特率的选择、主从模式选择等。
3. SPI的通信过程
3.1 通讯时序
下图是SPI作为主机时的通讯时序图。
上图包括以下几个信号;
1)起始信号和停止信号
当从机的NSS被拉低时,开始与主机进行通信,当NSS从低变为高后,停止与主机进行通信。
2)触发信号
表示数据变化时刻。
3)采样信号
表示数据的有效传输时刻。这里值得说明的是,采样方式,有四种,由CPOL/CPHA 决定。
CPOL:时钟极性。指 SPI 通讯设备处于空闲状态(不进行数据传输)时, SCK 信号线的电平信号,为0时SCK空闲时为低电平,为1时是高电平。
CPHA:时钟相位。为0时,在SCK的奇数边沿采样,为1时,在SCK的偶数边沿采样。
四种方式总结如下表:
下图是SCK偶数边沿采样,而这个边沿是上升沿还是下降沿取决于SCK空闲时低电平还是高电平,为低电平即CPOL为0时是下降沿采样,反之为上升沿采样。
3.2 数据收发过程
上图是某一种采样模式下,主机的数据收发过程。
1)发送数据时
把要发送的数据写到数据寄存器中,即数据总线上,然后放在发送缓冲器中,通过总线,并行传到移位寄存器里,然后串行从MOSI引脚移出。
当发送完一帧数据的时候,“状态寄存器 SR”中的“TXE 标志位”会被置 1,表示传输完一帧,发送缓冲区已空。注意要发送数据之前,必须往缓冲器里写数据才能发送,所以TXE要先清零再置位。
等待到“TXE标志位”为 1时,若还要继续发送数据,则再次往“数据寄存器 DR”写入数据即可
2)接收数据时
把MISO接收到的数据串行放在移位寄存器中,然后通过总线并行移到接收缓冲器里,然后放在数据总线上。
当接收完一帧数据的时候,“RXNE标志位”会被置 1,表示传输完一帧,接收缓冲区非空
“RXNE 标志位”为 1 时,通过读取“数据寄存器 DR”可以获取接收缓冲区中的内容。
4. STM32里SPI的配置
参考代码如下:
2)SPI的模式初始化
包括SPI的方向,主从选择,数据长度,时钟极性和相位,NSS的选择,波特率的设置,高/低位先行等.
参考代码如下:
之后需要使能SPI外设
3) 数据收发
根据前面SPI的通信过程,在发送数据时,需要等TXE置1才能发送,在发送时把数据存在发送缓冲器里,当RXE置1表示发送一帧完成,接收缓冲器里非空了,可以将接收缓冲器的数据取出。
参考代码如下:
举报
更多回帖
rotate(-90deg);
回复
相关问答
MCUs
SPI
通信
协议的
通信
过程
是
怎样
的?
2022-02-17
965
SD卡的
spi
配置
过程
是
怎样
的?
2022-02-17
1194
SPI
库函数配置
过程
是
怎样
的?
2022-02-17
412
SPI
在
通信
的
过程
中如果设备地址错误还能正常
通信
吗?
2023-10-13
189
怎样
使用i2c
通信
与
spi
去扩展uart呢
2022-01-17
630
怎样
在两个Arduino之间实现
SPI
通信
并进行仿真呢
2022-01-24
1690
SPI
通信
过程
中片选信号可以一直设置为低电平吗 ?
2023-10-12
491
SPI
与eSPI分别是什么意思
2021-09-23
2780
SPI
在
通信
的
过程
中怎么实现环形缓冲区读取?
2023-10-11
269
如何使用
SPI
与蓝牙模块NRF2401进行
通信
?
2021-12-20
1168
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分