学习日记——W25Q64 FLASH—QSPI

article/2025/8/22 1:41:58

W25Q64串行FLASH基础知识

大小:8M(Byte)(128块(Block),每块64K字节,每块16个扇区(Sector),每个扇区4K字 节,每个扇区16页,每页256个字节)
特点:Flash芯片内的数据只能由1变0,不能由0变1。
W25Q64Flash工作方式
1)W25Q64 SPI数据传输时序 W25Q64支持SPI数据传输时序模式0(CPOL = 0、CPHA = 0)和模式3(CPOL = 1、CPHA = 1), 模式0和模式3主要区别是当SPI主机硬件接口处于空闲状态时,SCLK的电平状态是高电平或者是 低电平。对于模式0来说,SCLK处于低电平;对于模式3来说,SCLK处于高电平。不过,在这两种 模式下,芯片都是在SCLK的上升沿采集输入数据,下降沿输出数据。
2)W25Q64数据格式 W25Q64数据格式为数据长度8位大小,先发高位,再发低位。 3)W25Q64传输速度 W25Q64在标准模式下支持80M bit/s速度,快速模式下支持160M bit/s速度,高速模式下支持 320M bit/s速度。

查看串行FLASH芯片

CE:CE为片选管脚,低电平有效。上电之后,在执行一条新的指令之前,必须让/CE管脚先有 一个下降沿。
SO(MISO):SO为串行数据输出引脚,在CLK(串行时钟)管脚的下降沿输出数据。 WP:WP为写保护管脚,有效电平为低电平。高电平可读可写,低电平仅仅可读。 SI(MOSI):SI为串行数据输入引脚,数据、地址和命令从SI引脚输入到芯片内部,在CLK (串行时钟)管脚的上升沿捕获捕获数据。
CLK(SLCK):CLK为串行时钟引脚。SPI时钟引脚,为输入输出提供时钟脉冲。 HOLD:HOLD为保持管脚,低电平有效。当CE为低电平,并且把HOLD拉低时,数据输出管脚 将保持高阻态,并且会忽略数据输入管脚和时钟管脚上的信号。把HOLD管脚拉高,器件恢复 正常工作。
VCC:电源2.7V~3.6V。
GND:地

W25Q64操作原理

通过SPI接口,用标准的SPI协议发送相应指令给flash,然后flash根据命令进行各种相关操作。
① 写使能:06H
② 读状态寄存器指令:05H
③ 写状态寄存器指令:01H
④ 读数据:03H ⑤ 页写:02H
⑥ 扇区擦除指令:20H
⑦ 块擦除指令:D8H
⑧ 芯片擦除指令:07H
⑨ 掉电指令:B9H
⑩ 读ID指令:90H

QSPI基础知识

QSPI是Quad SPI的简写,是Motorola公司推出的SPI接口的扩展,比SPI应用更加广泛。在SPI协议的基础上,Motorola公司对其功能进行了增强,增加了队列传输机制,推出了队列串行外围接口协议(即QSPI协议)。QSPI 是一种专用的通信接口,连接单、 双或四(条数据线) SPI Flash 存储介质。
该接口可以在以下三种模式下工作:
间接模式:使用 QSPI 寄存器执行全部操作
状态轮询模式:周期性读取外部 Flash 状态寄存器,而且标志位置 1 时会产生中断 (如擦除或烧写完成,会产生中断)
内存映射模式:外部 Flash 映射到微控制器地址空间,从而系统将其视作内部存储器采用双闪存模式时,将同时访问两个 Quad-SPI Flash,吞吐量和容量均可提高二倍。

QSPI功能简介

• QSPI 可以使用 6 个信号连接Flash,分别是四个数据线BK1_IO0~BK1_IO3,一个时钟输出CLK, 一个片选输出(低电平有效)BK1_nCS,
它们的作用介绍如下:
• BK1_nCS:片选输出(低电平有效),适用于 FLASH 1。如果 QSPI 始终在双闪存模式下工作, 则其也可用于 FLASH 2从设备选择信号线。QSPI通讯以BK1_nCS线置低电平为开始信号,以 BK1_nCS线被拉高作为结束信号。
• CLK:时钟输出,适用于两个存储器,用于通讯数据同步。它由通讯主机产生,决定了通讯的 速率,不同的设备支持的最高时钟频率不一样,如STM32的QSPI时钟频率最大为fpclk/2,两个 设备之间通讯时,通讯速率受限于低速设备。
• BK1_IO0:在双线 / 四线模式中为双向 IO,单线模式中为串行输出适用于FLASH 1。
• BK1_IO1:在双线 / 四线模式中为双向 IO,单线模式中为串行输入适用于FLASH 1。
• BK1_IO2:在四线模式中为双向 IO,适用于 FLASH 1。
• BK1_IO3:在四线模式中为双向 IO,适用于 FLASH 1。

查看引脚

① QUADSPI_BK1_IO1为PB0引脚
② QUADSPI_BK1_IO0为PB1引脚
③ QUADSPI_CLK为PB10引脚
④ QUADSPI_BK1_NCS为PB11引脚
⑤ LED为PC13引脚
⑥ UART1发送为PA9引脚
⑦ UART1接收为PA10引脚
⑧ 按键KEY1为PB2引脚
⑨ 按键KEY2为PB3引脚

配置引脚

在这里插入图片描述

配置时钟

采用内部时钟(默认)配置系统时钟最高80MHZ
在这里插入图片描述

配置QSPI

//预分频因子
//FIFO中的阀值
//采样移位
//Flash大小
//片选高电平时间
//时钟模式
在这里插入图片描述
在这里插入图片描述

生成QSPI工程

1、自定义工程名称。
2、选择英文路径,否则会丢 失启动文件而无法编译通过, 需要手动添加启动文件: startup_stm32l431xx.s
3、选择MDK-ARM V5开发软件, 即KEIL5软件。

代码编写说明

1、移植QSPI驱动。
2、按键KEY1按下时,擦除一个扇区,并在一个位置写入数据1。
3、按键KEY2按下时,擦除相同扇区,并在另一个位置写入数据2。
4、按复位键,查看两个位置写入的数据。
调用函数
1、QSPI_CommandTypeDef;
2、HAL_QSPI_Transmit(QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout);
3、HAL_QSPI_Receive(QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout);
4、HAL_QSPI_Command(QSPI_HandleTypeDef hqspi, QSPI_CommandTypeDef cmd, uint32_t Timeout);
5、调用QSPI驱动的读取芯片ID函数,擦除写入函数,读取数据函数。
6、HAL_GPIO_ReadPin(GPIO_TypeDef
GPIOx, uint16_t GPIO_Pin);//检测按键 7、void HAL_Delay(uint32_t Delay);//延时
8、HAL_GPIO_TogglePin(GPIO_TypeDef
GPIOx, uint16_t GPIO_Pin);//点亮和熄灭LED
9、printf();//打印数据到串口函数 需要重新定义函数fputc();才能正常使用printf();
重写fputc()实现打印数据到串口

int fputc(int ch,FILE*f)
{uint8_t temp[1]={ch};HAL_UART_Transmit(&huart1,temp,1,2);return HAL_OK;
}

代码编写实现

定义变量:

 uint32_t location1=0; uint32_t location2=100; uint32_t W25xID; uint16_t ReadData[]={0}; uint16_t ReadData_1[]={0}; uint8_t writeData[]={"welcome to IoT"}; uint8_t writeData_1[]={"第一个QuadSPI实验"};

while(1)循环外

hal_spi_flash_read(ReadData,sizeof(writeData),0);//读0位的数据 printf("ReadFlashData:%s\r\n",(char*)ReadData);//打印读出的数据 hal_spi_flash_read(ReadData_1,sizeof(writeData_1),100);;//读100位的数据 printf("ReadFlashData_1:%s\r\n",(char*)ReadData_1);//打印读出的数据 W25xID=hal_spi_flash_get_id();//读取芯片ID

代码编写实现

while(1)循环内 代码编写实现 if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==GPIO_PIN_RESET) 
{ HAL_Delay(100);if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==GPIO_PIN_RESET){ printf("KEY1 Press \r\n"); printf("W25xID:%x\r\n",W25xID); /*最小擦除为4096,所以一次就要擦除0-4096位置,然后在0-4096的任意位置写入数据*/ hal_spi_flash_erase_write(writeData, sizeof(writeData),0); } 
}
if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==GPIO_PIN_RESET)
{ HAL_Delay(100); if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==GPIO_PIN_RESET) { printf("KEY2 Press \r\n"); printf("W25xID:%x\r\n",W25xID); /*最小擦除为4096,所以一次就要擦除0-4096位置,然后在0-4096的任意位置写入数据*/ hal_spi_flash_erase_write(writeData_1, sizeof(writeData_1),location2);} 
}

http://chatgpt.dhexx.cn/article/OuimVGDG.shtml

相关文章

(STM32)W25Q64存储模块

1bit表示一个二进制位,1Byte表示8个二进制位。 每一个字节需要一个地址,所以24位地址,2^24次方最大寻址范围是16M。 W25Q256是特殊型号,切换4字节寻址模式才能使用后面的16M空间。 HOLD:芯片正常读写数据时&#xff…

SPIW25Q64(精华版)

1. SPI总线 1.1 W25Q64 1.1 W25Q64简介 W25Q64 是一种具有SPI接口的FlASH存储器,具有32768个可编程页(Page256B),2048个可擦除扇区(Sector16*Page),128个可擦除块(Block16*Sector),容量为128*16*16*256B8MB(64bit),…

W25Q64简介(译)

W25Q64是华邦公司推出的大容量SPI FLASH产品,其容量为64Mb。该25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件。W25Q64将8M字节的容量分为128个块,每个块大小为64K字节,每个块又分为16个扇区,每个扇区4K个字节。W25Q…

W25Q64Flash芯片

W25Q64Flash芯片STM32操作 通讯方式:SPI通讯 大小:64是bit 换算字节是8M(Byte)(128块(Block),每块16个扇区(Sector),每个扇区4K字节(…

SPI通讯介绍 以及读写W25Q64(块,扇区,页的区别)

附工程百度网盘链接 链接:https://pan.baidu.com/s/1nCgNb5OyGpABAL657-gX0A?pwd6666 提取码:6666 介绍:摩托罗拉开发的一种通用数据总线, 四根通讯线SCK(串行时钟总线),MOSI(主机输出从机输入),MISO(主机输入从机输出),SS(从机选择)而且是同步全双…

W25Q64调试

简介 W25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件。W25Q64将8M字节的容量分为128个块,每个块大小为64K字节,每个块又分为16个扇区,每个扇区4K个字节。 引脚介绍 串行数据输入、输出和 IOs(DI、DO 和 IO0、IO1、…

软件SPI读写W25Q64硬件SPI读写W25Q64

目录 软件SPI读写W25Q64 MySPI W25Q64 主函数 硬件SPI读写W25Q64 软件SPI读写W25Q64 程序整体框架: SPI模块包含通信引脚封装,初始化,SPI三个基本时序单元(起始,终止,交换一个字节) W2…

W25Q64Flash芯片STM32操作

1、W25Q64Flash芯片介绍 通讯方式:SPI通讯 大小:8M(Byte) (128块(Block),每块64K字节,每块16个扇区(Sector),每个扇区4K字节&…

STM32学习笔记(十一)丨SPI通信(W25Q64芯片简介,使用SPI读写W25Q64存储器芯片)

本篇文章包含的内容 一、SPI的通信协议及其原理1.1 SPI简介1.2 SPI通信的硬件连接1.3 SPI的时序基本单元1.3.1 起始条件和终止条件1.3.2 交换字节(模式0,先移入,再移出)1.3.3 交换字节(模式1,先移出&#x…

看单片机原理图-外部FLASHW25Q64

系列文章目录 看单片机原理图-最小系统 看单片机原理图-最小系统电源电路 看单片机原理图-输入输出电路LED指示、按键输入 看单片机原理图-红外遥控、EEPROM 看单片机原理图-FLASH 文章目录 系列文章目录前言一、FLASH 前言 硬件:百问网100ASK_STM32F103_MINI开发…

W25Q64 Flash芯片原理与应用方案(含W25Q64中文数据手册)

W25Q64是华邦公司推出的大容量SPI FLASH产品,其容量为64Mb(8MB),应用较为广泛。 W25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件。W25Q64将8M字节的容量分为128个块,每个块大小为64K字节,每个…

cortex_m3_stm32嵌入式学习笔记(二十一):SPI实验(通信总线)

SPI 是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口。是 Motorola首先在其 MC68HCXX 系列处理器上定义的。 SPI 接口主要应用在 EEPROM, FLASH,实时时钟, AD 转换器,还有数字信号处理器和数…

STM-32:SPI通信协议/W25Q64简介—软件SPI读写W25Q64

目录 一、SPI简介1.1电路模式1.2通信原理1.3SPI时序基本单元1.3.1起始和终止1.3.2交换字节 二、W25Q642.1W25Q64简介2.2W25Q64硬件电路2.3W25Q64框图2.4Flash操作注意事项 三、软件SPI读写W25Q643.1接线图3.2程序代码 一、SPI简介 SPI是串行外设接口(Serial Periph…

STM32CubeMx之硬件SPI驱动W25Q64

STM32CubeMx之硬件SPI驱动W25Q64 1.SPI简介 SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚&a…

SPI读写串行FLASH(W25Q64)

文章目录 1、SPI协议1、硬件连接2、通讯时序3、不同的通信模式 2、W25Q64介绍3、SPI读写驱动编写4、源码 1、SPI协议 SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它被广泛地…

STM32入门开发: 介绍SPI总线、读写W25Q64(FLASH)(硬件+模拟时序)

一、环境介绍 编程软件: keil5 操作系统: win10 MCU型号: STM32F103ZET6 STM32编程方式: 寄存器开发 (方便程序移植到其他单片机) SPI总线: STM32本身支持SPI硬件时序,本文示例代码里同时采用模拟时序和硬件时序两种方式读写W25Q64。 模拟时序更加方便移植到…

树莓派系统介绍

树莓派是一个微型计算机,和普通的电脑没有什么区别,只是体积更小,只有卡片大小,存储能力和计算能力会差一点,主要用于学习,实验所用。 是电脑就要安装操作系统,树莓派官方推荐了两种系统&#…

树莓派 zero linux,树莓派 zero基本调试

回家之前就从网上购买了一堆设备,回去也不能闲着,可以利用家里相对齐全的准备安装调试。结果人还没回来,东西先到了。 购买的核心装备是树莓派zero w,虽然已经知道它比家族大哥树莓派小不少,但拿到手里还是惊奇它的小巧…

树莓派c语言访问mariadb,树莓派之MariaDB

8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 安装MariaDB MariaDB是MySQL的一个分支 直接命令行敲入:1sudo apt-get install mariadb-server 即可完成安装。 一开始安装完成后不知道是需要初始化…

python树莓派_树莓派python

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 最初拿到树莓派的时候测试过,没成功,后来发现一张华丽丽的说明图,顿时醒悟了.. 记录下来,主要学习自 :htt…