w25q32 内存分布

article/2025/11/7 13:47:08

说明

ESP826612F/E里面使用w25q32作为了flash存储.

提前说下哈,bit代表位 也就是 0 1 0 1 , Bit代表字节 ,一字节就是8位

w25q32的容量是32Mbit 也就是  32/8 = 4MB字节  = 4*1024 = 4096KB字节

然后 w25q32 这个芯片规定每 64KB字节作为一个块

所以呢w25q32总共分成了  4096/64 = 64个块,不要问我,块是神么.....就是一块一块的区域,所以就是块...

然后 w25q32 这个芯片还规定每 4KB字节作为一个扇区.每256字节作为一页.

所以所有的扇区个数是 64*16 = 1024个

然后,为啥做这个芯片的要规定 块,扇区和页这些东西呢????

因为哈,擦除的时候规定要么擦除某个扇区要么擦除某个块

这是最小擦除的单位....

然后写数据的时候呢是页写....也就是只能写某一页,所以最多写256字节

假设咱需要把数据写到第一个块里面的第一个扇区里面的第一页里面

那么咱呢可以直接写命令擦除第一个块里面的第一个扇区

然后把数据写到里面.

或者也可以擦除第一个块,然后把数据写到里面

然后看看ESP8266里面怎么规定的

芯片是4096KB字节 = 4096*1024 = 4194304字节 = 0x400000

eagle.flash.bin  从flash的最开始的地址开始存储

eagle.irom0text.bin (0x10000 = 65536) 偏移了65536字节即64KB

esp_init_data_default.bin  (0x3FC000)  从倒数第4个扇区开始存储 (注:0x400000 - 4096-4096-4096-4096 = 0x3FC000)

blank.bin (0x3FE000)从倒数第2个扇区开始存储 (注:0x400000 - 4096-4096 = 0x3FE000)

注意,未使用区域是变化的...咱编译完程序会显示eagle.irom0text.bin 大小

随着程序量的增加eagle.irom0text.bin 大小也在增加

其实呢咱使用上面的未使用区域的时候一般可以从0x3FC000地址往前推,

(提醒:以一个扇区4KB作为最小使用哈,因为擦除的时候最小擦除是4KB)

假设咱感觉存储咱自己的数据只使用4KB就可以了,那么就是在 0x3EB000地址开始存储咱自己的数据.

0x3FC000 - 4KB = 0x3EB000 即从倒数第5个扇区开始存储数据

其实从0x3FC000 到 0x3FE000 总共有8KB,所有中间有两个扇区

因为esp_init_data_default.bin 的大小是固定的哈不会超过4KB,

所以0x3FE000 左面的那个4KB的扇区也是可以使用的

开始的地址是 0x3FD000 即从倒数第三个扇区存储数据

然后呢看下提供的API函数

1.擦除某个扇区 

总共1024个扇区,扇区号从0开始,所以是  0 - 1023

列如擦除上面的倒数第5个扇区 就是 spi_flash_erase_sector (1019)

2.往扇区里面写数据

3.从flash里面读取数据

4.SDK还封装了一套交替存储API

就是使用3个扇区保存数据,第一个扇区和第三个扇区来回的保存数据

第二个扇区只保存一个标志位,标志当前数据是存储在第一个扇区还是第二个扇区(程序内部实现)

API函数的第二个参数假设是  1017

那么就是使用第1017和1018扇区来回的保存数据,1018扇区保存标志位

 

注意:关于4字节对齐

如果你存储数据,存储的数据个数是4的倍数就可以.

一般咱都会把数据放到一个数组里面,所以咱把数组长度定义为4的倍数就可以

我上面说的是char型的数组

如果是u16型的数组,数组长度定义为2的倍数就可以

如果是u32的就随意啦....

开始实践(普通)

好像啥都说明白了....用户自己实践就可以了

复制代码

//设置扇区地址
#define flash_save_sector 1019
//设置写入flash的起始地址
#define flash_save_addr  flash_save_sector*4*1024 //(该扇区的起始地址)
//存储的数据
char flash_data[16] = "test flash data";
/**
* @brief   system_done
* @param   None
* @param   None
* @retval  None
* @warning None
* @example
**/
void system_done(void)
{char temp[16];//擦除扇区spi_flash_erase_sector (flash_save_sector);//写入数据spi_flash_write(flash_save_addr,(uint32 *)flash_data,sizeof(flash_data));//读取数据spi_flash_read(flash_save_addr,(uint32 *)temp,sizeof(temp));os_printf("\r\n save data =%s \r\n",temp);
}void ICACHE_FLASH_ATTR user_init(void){uart_init_2(BIT_RATE_115200,BIT_RATE_115200);//注册系统初始化完成回调函数system_init_done_cb(system_done);
}

复制代码

开始实践(写保护)

1.官方给了例子

注意  priv_param_start_sec  参数是这个参数

咱使用的时候也这样就可以

 


http://chatgpt.dhexx.cn/article/8ajcO6H6.shtml

相关文章

基于STM32+SPI+W25Qxx存储芯片指令,时序和函数讲解

前言 本次我们学习一下STM32F103关于SPI对存储芯片的读写,介绍W25QXX芯片和对芯片内部讲解和代码解读,学习W25QXX芯片的各种读写指令,操作芯片读写,认识底层驱动,本篇内容主要目的是教会大家看手册写代码&#xf…

ButterKnife9.0.0-rc2 配置

升级了AndroidStudio到3.4之后,发现项目中的很多依赖库都不能用,原因是随着AS升级之后,Gradle随之升级到3.4.1,很多第三方库也需要更高版本的支撑,今天遇到ButterKnife失效的问题,原本是8.5.1的版本&#x…

How to install Bromine3 RC2

When I install Bromine RC2, I met bellow issues: “Server could not contact itself at the specified address: 127.0.0.1:80” “Error: Database table jobs for model job was not found.” etc. Now I show my exact way to install RC2 successfully: 1. Downl…

fabric1.4.0-rc2快速入门

软件环境 VMware 10.0.4 CentOS-7-x86_64-Minimal-1708 搭建过程 go安装 docker安装 docker-compose安装 一、fabric的编译和安装 1. 创建目录(GOPATH变量在安装go的时候就配置好了) mkdir -p $GOPATH/src/github.com/hyperledger 2. 下载fabri…

Cocos2d-JS v3.0 RC2发布说明

Cocos2d-JS是Cocos2d-x的Javascript版本,融合了Cocos2d-html5和Cocos2d-x JavaScript Bindings。它支持Cocos2d-x的所有特性并提供更简单易用的Javascript风格API。 核心特性 极大改进了ccui控件布局库的性能和稳定性,ccui在RC0中被大幅度重构&#xff0…

【GCC】1: RTCP RR接收端生成

m79 代码。参考bytewoods 大神的以下文章:WebRTC 基于GCC的拥塞控制(上) WebRTC 基于GCC的拥塞控制(下)虽然可以拿到估算的带宽但是rtcp 总是malformed packet个 有必要带着问题跟进下整个过程 RR报文 基于丢包率的码率控制运行在发送端,依靠RTCP RR报文进行工作。* report b…

STM32之RCC

STM32 RCC复位与时钟配置,我首先忽略掉复位,首先学习时钟配置,复位以后用到再学习 STM32有多个时钟源,分别是 HSI:上电默认启动,因精度不高所以先不采用,以后如果需要再使用 HSE:外部高速时钟&…

Apache ShardingSphere 4.0.0-RC2发布

处暑无三日,新凉直万金。处暑之日,Apache ShardingSphere 4.0.0-RC2已经发布,欢迎测试使用! 本次发布的4.0.0-RC2版本将前不久发布的4.0.0-RC1版本的核心功能不断打磨优化,修复社区反馈的问题,且持续进行微内核重构打磨;在社区建设…

macOS Ventura 13.4 RC2(22F63)发布

系统介绍 根据黑果魏叔官网提供:5 月 12 日消息,苹果今天面向开发人员,发布了 macOS Ventura 13.4 的第 2 个候选 RC 版本(内部版本号 22F63),距离上个候选版本相隔数天时间。 macOS Ventura 带来了台前调…

.NET 6 RC2 版本发布

原文:bit.ly/3FS9xm7作者:Richard日期:2021-10-12翻译:精致码农-王亮说明:文中有大量的超链接,这些链接在公众号文章中被自动剔除,一部分包含超链接列表的小段落被我删减了,如果你对…

c#加密:三、对称加密 AES、DES、RC2、Rijndael

一、c#中的对称加密概述 对称加密算法在加密和解密时使用相同的密钥。Framework提供了四种对称加密算法。AES、DES、Rijndael、RC2。 DES:全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美…

MFC的.rc 和.rc2文件

一、介绍 rc和rc2都是资源文件,包含了应用程序中用到的所有的资源。它们两指向的是同一个资源。 两者不同在于:rc2文件中的资源可以直接在VS集成环境中以可视化的方法进行编辑和修改; 而rc中的资源是根据需要手工地进行编辑。 二、实例 工程 rc文件 #include …

SEO搜索引擎优化方式

SEO搜索引擎优化方式 SEO搜索引擎优化方式 文章目录 SEO搜索引擎优化方式[TOC](文章目录) 前言一、黑帽SEO1、关键字的堆叠2、隐藏文本3、门页 二、白帽SEO1、 TDK2、 提高网站语义化的html标签占比3、 SSR 总结 前言 利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名&…

seo搜索引擎优化-SEO优化教程附关键词工具以及文章采集软件

seo搜索引擎优化,什么是SEO搜索引擎优化。简单点来说就是用户通过搜索引擎搜索想要的结果第一时间找到你的网站。那我们怎么做好搜索引擎优化呢?要做好搜索引擎优化首先我们得了解首页引擎。怎么才能快速的了解搜索引擎。不管是百度/360/谷歌/搜狗等搜索…

抖音seo搜索排名,源码开发部署/seo排名系统源码分析。

前言:抖音seo搜索排名,源码开发部署/seo排名系统源码分析。抖音seo源码搭建部分代码 抖音seo是什么?其实seo它是搜索引擎优化,不仅这样,抖音里也有搜索引擎优化,抖音seo其实就是优化抖音的搜索结果&#xf…

SEO -- 搜索引擎优化

文章目录 1、SEO简介2、SEO基本介绍3、SEO优化方法分类4、SEO优化策略5、SEO优化的优势6、SEO优化的发展问题7、SEO优化的意义 1、SEO简介 SEO(Search Engine Optimization):汉译为搜索引擎优化。是一种方式:利用搜索引擎的规则提…

前端开发之SEO(搜索引擎优化)

前端开发之SEO(搜索引擎优化) 文章目录 前言一、突出重要内容合理的title、description和keywords语义化书写HTML代码,符合W3C标准利用布局,把重要内容HTML代码放在最前重要内容不要用JS输出尽少使用iframe框架为图片加上alt属性需…

SEO优化之147SEO搜索引擎推送工具

什么是推送? 对于SEO人员应该都不陌生吧,推送就是把网站的链接主动提交给搜索引擎, 确保新的链接可以尽快被收录,同时保护原创(防止别人抄袭,以及转载后导致自己的网站没收录) 为什么我们要去…

百度搜索排名优化和SEO搜索引擎优化

文章目录 一、前文二、原理和简介三、站内优化3.1 网站地图生成3.2 关键字密度检测 四、站外优化4.1 百度收录4.2 实名实网认证(免费)4.3 官网认证(3000元/年)4.4 其他 五、购买服务与付费六、站长工具 一、前文 年前给公司做了几…

SEO搜索引擎优化-引擎排名

SEO搜索引擎优化 引擎排名 SEO是指通过采用易于搜索引擎索引的合理手段,使网站各项基本要素适合搜索引擎检索原则并且对用户更友好(Search Engine Friendly),从而更容易被搜索引擎收录及优先排序从属于SEM(搜索引擎营销)。 SEO的中文意思是搜索引擎优化。…