STM32F103C8T6 SPI通信读写W25Q64
1 W25Q64简介
W25Qxx系列是一种低成本、小型化且易于使用的非易失性存储器(NOR Flash),它广泛应用于需要持久化存储数据的各种场景,如数据存储、字库存储以及固件程序存储等。该系列存储器采用Nor Flash存储介质,这种类型的存储器以其快速读取速度和易于编程而受到青睐,特别适合需要频繁读写操作的应用。
W25Qxx系列提供不同的时钟频率选项以适应不同的性能需求,包括80MHz的标准SPI模式、160MHz的双SPI模式以及320MHz的四SPI模式。这些高速模式允许更快的数据传输速率,从而提高系统的整体性能。特别是Quad SPI模式,它通过使用四条数据线同时传输数据,显著提高了数据吞吐量,非常适合对速度要求较高的应用。
总的来说,W25Qxx系列存储器以其可靠性、灵活性和成本效益而受到青睐,是嵌入式系统、物联网设备和消费电子产品中理想的存储解决方案。
存储容量(24位地址):
W25Q40: 4Mbit / 512KByte
W25Q80: 8Mbit / 1MByte
W25Q16: 16Mbit / 2MByte
W25Q32: 32Mbit / 4MByte
W25Q64: 64Mbit / 8MByte
W25Q128: 128Mbit / 16MByte
W25Q256: 256Mbit / 32MByte
2 硬件电路
引脚 |
功能 |
VCC、GND |
电源(2.7~3.6V) |
CS(SS) |
SPI片选 |
CLK(SCK) |
SPI时钟 |
DI(MOSI) |
SPI主机输出从机输入 |
DO(MISO) |
SPI主机输入从机输出 |
WP |
写保护 |
HOLD |
数据保持 |
3 W25Q64 框图
这张图展示了W25Q64BV串行闪存(Serial Flash Memory)的内存块结构,其中存储器被划分为128个64KB的块,每个块进一步细分为16个4KB的扇区,地址从0x0000h到0xFFFFh映射到这些块和扇区,每一个扇区又可以分成16页(xx0000-xx00FF),每一页256个字节。
图中还描绘了SPI接口、命令和控制逻辑(执行指令、读写数据)、状态寄存器(与忙状态、写使能、写保护等功能有关)、页地址锁存器/计数器、字节地址锁存器/计数器、写控制逻辑、高电压生成器、页缓冲区(对一次性写入的数据量限制)以及块保护逻辑等组件,这些组件协同工作以实现数据的读取、写入、擦除和保护等功能,确保数据的完整性和安全性,同时支持高速数据传输。
4 Flash操作注意事项
写入操作时:
写入操作前,必须先进行写使能
每个数据位只能由1改写为0,不能由0改写为1
写入数据前必须先擦除,擦除后,所有数据位变为1
擦除必须按最小擦除单元(扇区)进行
连续写入多字节时,最多写入一页的数据,超过页尾位置的数据,会回到页首覆盖写
写入操作结束后,芯片进入忙状态,不响应新的读写操作
读取操作时:
直接调用读取时序,无需使能,无需额外操作,没有页的限制,读取操作结束后不会进入忙状态,但不能在忙状态时读取
5 SPI外设简介
SPI(Serial Peripheral Interface)是一种同步串行通信协议,广泛应用于微控制器和外围设备之间的数据传输。STM32微控制器系列,如STM32F103C8T6,内置了硬件SPI模块,这些模块能够自动处理时钟信号的生成和数据的发送与接收,从而减轻中央处理器(CPU)的工作负担,提高系统的整体效率。
STM32的SPI模块具有以下特点:
数据帧配置:可以配置为8位或16位数据帧,以适应不同应用的需求。
位顺序:支持高位先行(MSB First)或低位先行(LSB First)的数据传输方式。
时钟频率:SPI时钟频率可配置为总线时钟频率(fPCLK)的1/2、1/4、1/8、1/16、1/32、1/64、1/128或1/256分频,提供灵活的速率选择以匹配不同速度的外围设备。
多主机支持:STM32的SPI模块支持多主机模型,允许多个SPI主设备与一个或多个从设备通信。
主/从模式:SPI模块可以配置为主模式或从模式,主模式下SPI模块生成时钟信号,从模式下SPI模块作为从设备响应主设备的时钟信号。
通信模式:SPI可以配置为全双工、半双工或单工通信模式,以适应不同的通信需求。
DMA支持:SPI模块支持直接内存访问(DMA),允许数据在内存和外设之间直接传输,无需CPU干预,进一步提高数据传输的效率。
协议兼容性:STM32的SPI模块兼容I2C协议,这是一种常用的串行通信协议,广泛应用于各种电子设备中。
STM32F103C8T6微控制器提供了两个硬件SPI资源:SPI1和SPI2,这使得该微控制器能够同时与两个外设设备进行通信,增加了系统的扩展性和灵活性。这些SPI资源可以用于连接各种外围设备,如传感器、显示器、存储器等,实现数据的快速传输和处理。
6 SPI框图
STM32微控制器中的SPI模块是一种高效的同步串行通信接口,用于实现主设备与一个或多个从设备之间的数据交换。该模块包括主控电路、波特率发生器、移位寄存器、发送和接收缓冲区等关键组件,它们协同工作以支持全双工或半双工通信模式。SPI模块通过MOSI和MISO线传输数据,并通过SCK线提供同步时钟信号。通信参数如时钟频率、数据帧格式和通信模式可通过SPI_CR1和SPI_CR2寄存器进行配置,以适应不同的通信需求。此外,SPI模块支持通过NSS引脚选择从设备,以及通过DMA减轻CPU负担,实现高速数据传输。该模块的设计使得STM32能够灵活地与外围设备如传感器、显示器和存储器等进行通信,广泛应用于嵌入式系统中。
7 SPI基本结构
这张图展示了一个基于微控制器的串行通信模块的简化框架图。图中包含以下关键组件:
- 波特率发生器:负责生成用于同步数据传输的时钟信号,该时钟信号通过GPIO(通用输入输出端口)输出。
- 数据控制器:管理数据传输的逻辑,控制数据的发送和接收过程。
- 发送数据寄存器(TDR):存储即将通过串行接口发送的数据。
- 移位寄存器:用于在发送和接收过程中暂存单个数据位,以便按位串行传输。
- 接收数据寄存器(RDR):存储从串行接口接收到的数据。
- GPIO(通用输入输出端口):用于连接到外部设备,进行数据的发送和接收。
- 开关控制:可能用于控制数据传输的启动和停止,或其他相关的控制信号。
整个流程如下:
数据控制器将数据写入发送数据寄存器(TDR)。
数据从TDR寄存器移动到移位寄存器,然后逐位发送到外部设备。
同时,接收到的数据从外部设备通过GPIO进入接收数据寄存器(RDR)。
波特率发生器生成的时钟信号用于同步发送和接收操作。
GPIO端口用于实际的串行数据传输,连接到外部设备的相应引脚。
8 主模式全双工连续传输
在主模式、全双工模式下(BIDIMODE=0且RXONLY=0)连续传输时,SPI通信过程中TXE(发送使能)、RXNE(接收使能)和BSY(发送缓冲区空)标志的变化示意图,其中SCK是时钟线,MISO/MOSI是数据线,图中显示了连续发送三个数据(0xF1、0xF2、0xF3)的过程,每个数据发送前TXE由硬件设置并由软件清除,而每个数据接收后RXNE由硬件设置并由软件清除,BSY标志则在发送缓冲区为空时由硬件设置,指示可以发送下一个数据。
9 非连续传输
这张图是关于SPI(串行外设接口)在非连续传输发送模式下的TXE/BSY变化示意图,其中BIDIMODE=0表示单向通信模式,RXONLY=0表示接收功能被禁用,仅进行发送操作。图中展示了在CPOL=1和CPHA=1的配置下,数据通过MOSI(主设备输出从设备输入)线以SPI模式发送的过程。图中显示了连续发送三个数据(0xF1, 0xF2, 0xF3)的过程:
软件首先将数据0xF1写入SPI_DR寄存器。
然后等待TXE标志变为高电平,表示SPI控制器准备好发送数据。
数据0xF1被发送后,TXE标志被硬件清除。
接着软件将数据0xF2写入SPI_DR,但需等待TXE标志再次变为高电平。
数据0xF2发送后,同样的过程适用于数据0xF3。
整个过程展示了SPI在非连续传输模式下,如何通过软件控制和硬件标志的协作来实现数据的发送。这种模式下,每次发送数据前都需要软件检查TXE标志,确保数据正确发送。
关注我:
CSDN博客:小程同学>o<-CSDN博客