SPI通信:
SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线
四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)主机输出从机输入、MISO(Master Input Slave Output)、SS(Slave Select)
同步,全双工
支持总线挂载多设备(一主多从)
硬件电路:
所有SPI设备的SCK、MOSI、MISO分别连在一起
主机另外引出多条SS控制线,分别接到各从机的SS引脚
6输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入
移位示意图:
SPI时序基本单元
起始条件:SS从高电平切换到低电平
终止条件:SS从低电平切换到高电平
交换一个字节(模式0)
CPOL=0:空闲状态时,SCK为低电平
CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据
交换一个字节(模式1)
CPOL=0:空闲状态时,SCK为低电平
CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据
交换一个字节(模式2)
CPOL=1:空闲状态时,SCK为高电平
CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据
交换一个字节(模式3)
CPOL=1:空闲状态时,SCK为高电平
CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据
SPI时序:
发送指令
向SS指定的设备,发送指令(0x06)
指定地址写
向SS指定的设备,发送写指令(0x02),
随后在指定地址(Address[23:0])下,写入指定数据(Data)
指定地址读
向SS指定的设备,发送读指令(0x03),
随后在指定地址(Address[23:0])下,读取从机数据(Data)
W25Q64简介
W25Qxx系列是一种低成本、小型化、使用简单的非易失性存储器,常应用于数据存储、字库存储、固件程序存储等场景
存储介质:Nor Flash(闪存)
时钟频率:80MHz / 160MHz (Dual SPI) / 320MHz (Quad SPI)
存储容量(24位地址):
W25Q40: 4Mbit / 512KByte
W25Q80: 8Mbit / 1MByte
W25Q16: 16Mbit / 2MByte
W25Q32: 32Mbit / 4MByte
W25Q64: 64Mbit / 8MByte
W25Q128: 128Mbit / 16MByte
W25Q256: 256Mbit / 32MByte
64KB为1块,一共128块。xx0000-xxFFFF
每一块分为多个扇区Sector,每个扇区为4KB,每块一共是16个扇区。xxx000-xxxFFF.
一页内的地址变化范围是xxxx00,到xxxxFF。
写入操作时:
写入操作前,必须先进行写使能
每个数据位只能由1改写为0,不能由0改写为1。例如某存储单元存储0xAA(1010 1010)
在这个存储单元里写入新的数据0x55(0101 0101) 就变成0x00了。
写入数据前必须先擦除,擦除后,所有数据位变为1
擦除必须按最小擦除单元进行(全部,块、扇区)最少4096个字节一起擦。
连续写入多字节时,最多写入一页的数据,超过页尾位置的数据,会回到页首覆盖写入
写入操作结束后,芯片进入忙状态,不响应新的读写操作
读取操作时:
直接调用读取时序,无需使能,无需额外操作,没有页的限制,读取操作结束后不会进入忙状态,但不能在忙状态时读取。
这个芯片可以支持SPI模式0和SPI模式3 。
SPI外设:
STM32内部集成了硬件SPI收发电路,可以由硬件自动执行时钟生成、数据收发等功能,减轻CPU的负担
可配置8位/16位数据帧、高位先行/低位先行 (串口是地位先行,I2C和SPI是高位先行)
时钟频率: fPCLK / (2, 4, 8, 16, 32, 64, 128, 256)
支持多主机模型、主或从操作。
可精简为半双工/单工通信。
支持DMA。
兼容I2S协议。
STM32F103C8T6 硬件SPI资源:SPI1(APB2、PCLK72M)、SPI2(APB1、PCLK36M)
图中左上角表示移位寄存器右移,低位先行的模式。LSBFIRST控制位可以控制低位先行还是高位先行。给0先发送高位,给1先发送低位。
接收缓冲区分为TDR和RDR,他俩共用一个地址。 发送寄存器移入到移位寄存器时候,置TXE位为1,检测到TXE位为1时,可以移入发送缓冲区。 移位寄存器完成输出和移入时候,移入的数据会整体的转入到接收缓冲区中,置RXNE为1,检测到为1后就要尽快把数据从RDR中读出来。
SPI是全双工,发送和接收同步进行,所以数据寄存器发送和接收分离。移位寄存器发送和接收可以共用。
BR0、BR1、BR2三位对时钟分频进行控制。
SPE:SPI使能。
CPOL、CPLA:配置SPI的四种模式
SSOE为1时,NSS作为输出引脚,并在当前设备变为主设备时,给NSS输出低电平。当主机结束后,SSOE要清零,NSS变为输入。
SSM位决定右侧中间的数据选择器的选择哪一路,上面一路是硬件NSS模式,即:外部如果输入了低电平,那当前的设备就进入不了主模式,线路中已经有了主模式。下面一路是软件管理NSS输入,NSS是1还是0,由SSI来决定。
主模式全双工连续传输
效率高、程序逻辑复杂。
非连续传输
程序逻辑简单,效率低。
软硬件波形对比