STM32的SPI相关知识

STM32的SPI相关知识

一、前言
本人使用的是stm32f103的开发板,Flash芯片是W25Q64。本章介绍SPI的相关通讯知识,后续篇章会有SPI实现简单的读写Flash的代码。

二、简介
SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它被广泛地使用在 ADC、 LCD 等设备与 MCU 间,要求通讯速率较高的场合。

1.SPI物理层
STM32的SPI相关知识_第1张图片
SPI 通讯使用 3 条总线及片选线,3 条总线分别为 SCK、 MOSI、MISO,片选线为SS(也称为NSS、CS)。

①SCK:时钟信号线,用于通讯数据同步 。

②SS:从设备选择信号线,也称为片选线。SPI与I2C协议不同,I2C通过设备地址来寻址,而SPI协议中没有设备地址,他是通过设备的片选信号线来寻址,当主机与设备相连时,即将设备的NSS片选信号线置低电平,即片选有效,所以当置高电平时为结束片选。通常我们通过普通的GPIO,控制高低电平的软件模拟的方式来产生通讯起始和停止信号 ,更方便。

③MOSI:主设备输出/从设备输入。(Master Output, Slave Input)

④MISO:主设备输入/从设备输出。(Master Input,, Slave Output)

2.SPI协议层
STM32的SPI相关知识_第2张图片
这是SPI的通讯时序,NSS、 SCK、 MOSI 信号都由主机控制产生,而 MISO 的信号由从机产生,主机通过该信号线读取从机的数据。 MOSI 与 MISO 的信号只在 NSS 为低电平的时候才有效,在 SCK 的每个时钟周期 MOSI 和 MISO 传输一位数据。

①CPHA: 时钟相位,决定了SPI数据的“奇偶边沿采样当CPHA=0时,MOSI或MISO在数据线上的信号将会在SCK时钟线上的“奇数边沿”被采样;当CPHA=1时,MOSI或MISO在数据线上的信号将会在SCK时钟线上的“偶数边沿”被采样;

②CPOL: 时钟极性,意思是当SPI通讯设备处于空闲的状态(NSS线为高电平)时,SCK信号线的电平信号。当CPOL=0时,SCK在空闲状态时为低电平;当CPOL=1时,SCK在空闲状态时为高电平。

(由CPHA和CPOL两种特性使SPI有四种通讯模式,模式的选择需通过查阅相关FLASH芯片手册的功能介绍中得知,实际中模式0和模式3使用的比较多,如下图
STM32的SPI相关知识_第3张图片
—————————————————————————————————
三、STM32的SPI内部架构
STM32的SPI相关知识_第4张图片
SPI 的 MOSI 及 MISO 都连接到数据移位寄存器上 ,当外部发送数据时,数据移位寄存器以“发送缓冲区”为数据源,将数据一位一位地发送出去;当外部接收数据时,数据移位寄存器将数据线上接收到地数据一位一位地发送到“接收缓冲区”中。
—————————————————————————————————
四、SPI地通讯过程
STM32的SPI相关知识_第5张图片
相关过程解析:
1.控制NSS线,开启通讯;

2.将要发送地数据发送到“数据寄存器”中,其会发送到“发送缓存区”中;

3.通讯开始, SCK 时钟开始运行。 MOSI 把发送缓冲区中的数据一位一位地传输出去;MISO 则把数据一位一位地存储进接收缓冲区中 ;

4.等待发送完一帧数据时,“状态寄存器”中的TXE(发送缓存区为空)标志位会置1,表示发送缓存区为空;当接收完一帧数据时,“状态寄存器”中的RXNE标志位会置1,表示接收缓存区为非空,已接收到数据的意思。
————————————————————————————————
以上就是STM32的SPI相关的内容,若有错误的地方,请尽情斧正。

你可能感兴趣的:(STM32的SPI相关知识)