嵌入式开发之STM32学习笔记day18

发布于:2025-06-05 ⋅ 阅读:(22) ⋅ 点赞:(0)

 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 硬件电路

引脚

功能

VCCGND

电源(2.7~3.6V

CSSS

SPI片选

CLKSCK

SPI时钟

DIMOSI

SPI主机输出从机输入

DOMISO

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模块具有以下特点:

  1. 数据帧配置:可以配置为8位或16位数据帧,以适应不同应用的需求。

  2. 位顺序:支持高位先行(MSB First)或低位先行(LSB First)的数据传输方式。

  3. 时钟频率:SPI时钟频率可配置为总线时钟频率(fPCLK)的1/2、1/4、1/8、1/16、1/32、1/64、1/128或1/256分频,提供灵活的速率选择以匹配不同速度的外围设备。

  4. 多主机支持:STM32的SPI模块支持多主机模型,允许多个SPI主设备与一个或多个从设备通信。

  5. 主/从模式:SPI模块可以配置为主模式或从模式,主模式下SPI模块生成时钟信号,从模式下SPI模块作为从设备响应主设备的时钟信号。

  6. 通信模式:SPI可以配置为全双工、半双工或单工通信模式,以适应不同的通信需求。

  7. DMA支持:SPI模块支持直接内存访问(DMA),允许数据在内存和外设之间直接传输,无需CPU干预,进一步提高数据传输的效率。

  8. 协议兼容性: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标志,确保数据正确发送。

关注我


网站公告

今日签到

点亮在社区的每一天
去签到