STM32之SPI_FLASH

来源:互联网 发布:怎么在淘宝上找同款 编辑:程序博客网 时间:2024/05/16 10:38

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

SPI信号线:
SPI总线包含4条总线,分别是为SS(PS:这里用SS代替,起始还有一个非号—在顶上),SCK,MOSI,MISO。
SS(Slave select):片选信号线,当有多个SPI设备与MCU相连时,每个设备的这个片选信号线是与MCU单独的引脚相连的,而其他的SCK,MOSI,MISO线则为多个设备并联到相同的SPI总线上
这里写图片描述
当SS信号线为低电平时,片选有效,开始SPI通讯.

SCK(Serial Clock):时钟信号线,由主通讯设备产生,不同的设备支持的时钟不一样(这个要根据外设数据手册了解,如STM32的SPI时钟频率最大为Fpclk/2)

MOSI(Master Output,Slave Input):主设备输出/从设备输入引脚.主机的数据从这条信号线输出,从机由这条信号线读入数据(即这条线上的数据方向为主机到从机)

MISO(Master Input,Slave Output):主设备输入/从设备输出引脚,主机从这条信号线读入数据,从机的数据从这条信号线输出(即这条信号线上的数据方向为从机到主机)

SPI模式:
根据SPI时钟极性(CPOL)和时钟相位(CPHA)配置的不同,可以分为四种SPI模式.
时钟极性:是SPI通讯设备处于空闲状态时(也可以认为这是SPI通讯开始时,即SS为低电平),SCK信号线的电平信号.CPOL = 0时,SCK在空闲状态时为低电平,CPOL = 1时,SCK在空闲状态时为高电平.
时钟相位:是指数据的采样时刻,当CPHA = 0时,MOSI或MISO数据线上的信号将会在SCK时钟线的奇数边沿被采样.当CPHA = 1时,数据线在SCK的偶数边沿采样.

这里写图片描述
这是一个CPHA = 0的时序图.
片选信号:由主机把片选信号线SS拉低(就是图中的SS(0)时序),意为主机输出,SS(I)时序也是SS线信号,SS(I)时序表示从机接收到SS片选被拉低的信号.
SCK信号(CPHA=0):在SS被拉低的时刻,SCK分成两种情况,如果设置CPOL = 0,则SCK时序在这个时刻为低电平,如果设置CPOL = 1,则SCK时序在这个时刻为高电平.
采样时刻:因为设置为CPHA=0,所以采样时刻都是在SCK的奇数边沿(注意奇数边沿有时为下降沿,有时为上升沿).
因此,MOSI和MISO数据线的有效信号在SCK的奇数边沿保持不变,这个信号将在SCK奇数边沿时刻被采样,在非采样时刻,MOSI和MISO的有效信号才会发生切换.

这里写图片描述
这是一个CPHA = 1的时序图(情况是类似的,就是数据信号的采样时刻为偶数边沿)

PS:
使用SPI通讯时,主机和从机的时序要保持一致,就是两者都选择相同的SPI模式.

STM32的SPI特性:
STM32的小容量产品有1个SPI接口,中容量有2个,大容量的则有3个,特性如下:
1,单词传输可选择为8位或16位.
2,波特率于分频系数(最大为 Fpclk/2).
3,时钟极性(CPOL)和相位(CPHA)可编程设置.
4,数据顺序的传输顺序可进行编程选择,MSB在前或LSB在前.
5,可触发终端的专用发送和接收标志.
6,可以使用DMA进行数据传输操作.

STM32的SPI架构:
这里写图片描述
**接收:**MISO数据线接收到的信号经以为寄存器处理后,把数据转移到接收缓冲区,然后这个数据就可以由软件从接受缓冲区读出.
发送:要发送数据时,把数据写入到发送缓冲区,硬件会把它用以为寄存器处理后输出到MOSI数据线.
**SCK:**SCK的时钟信号则是由波特率发生器产生,我们可以通过波特率控制位(BR)来控制他输出的波特率.
CR1和CR2:控制寄存器CR1掌管着主控制电路,STM32的SPI模块的协议设置(时钟极性,相位等)就是由他来制定的,控制寄存器CR2则是用于设置各种中断使能.
NSS引脚:这个引脚是SPI协议中SS片选信号线,如果把NSS引脚配置为硬件自动控制,SPI模块能够自动判别它能否成为SPI的主机,或自动进入SPI从机模式.但实际用的更多的是由软件控制某些GPIO引脚单独作为SS信号,这个GPIO引脚可以随便选择.

PS:后续放上FLASH实例

1 0
原创粉丝点击