W25Q256被写保护如何修改

news2024/11/15 13:54:22

W25Q256被写保护如何修改

  • 1、 W25Q256数据读不到
    • 1.1 打印的寄存器的值
    • 1.2 可能原因
    • 1.3 解决办法
    • 1.4 用到的函数

1、 W25Q256数据读不到

能够正确的读到ID,但是读到的数据不正确

1.1 打印的寄存器的值

状态寄存器1

0x2

BUSY :只读, 指令正在执行

WEL (1) :只读,写使能锁定,在写禁止后清零

BP0 - 3:区块保护位

TB :顶层/底层块保护

状态寄存器2

0x7e (0b0111 1110)

CMP :CMP设置为1时,先前由TB、BP3、BP2、BP1和BP0设置的阵列保护将被反转,也就是说原本被保护的现在不保护了,不保护的被保护了

SRP1, SRP0 :状态寄存器保护

SUS :(只读)暂停状态位是状态寄存器, 在执行擦除/程序暂停(75h)指令后被设置为1。通过Erase/Program Resume (7Ah)指令以及下电、上电周期,SUS状态位被清除为0。

LB1 - 3 :安全寄存器锁位,为安全寄存器提供写保护控制和状态,LB3-1默认状态为0,安全寄存器未锁定。LB3-1可以通过Write Status Register指令单独设置为1。LB3-1是一次可编程(OTP),一旦设置为1,相应的256字节安全寄存器将永久变为只读。

EQ :QSPI使能位,想要从非qspi的模式转化位spi时,在切换模式之前一定要先将标志位置一,否则切换模式的命令将会被忽略;当在QSPI模式下不能将QE从0改为1

警告:如果/WP或/HOLD引脚直接连接到电源或地面标准SPI或双SPI操作,QE位不应该设置为1

状态寄存器3

0x61 (0b0110 0001)

ADS :只读,表示当前设备运行在哪种地址模式下,当ADS=0时,设备为3字节地址模式,当ADS=1时,设备为4字节地址模式。

ADP :用于确定设备上电或复位时的初始地址模式。该位仅在上电或设备复位初始化期间使用,并且只能由非易失性的Write Status序列(06h + 11h)写入。当ADP=0(出厂默认值)时,设备将启动到3字节地址模式,扩展地址寄存器必须用于访问超过128Mb的内存区域。当ADP=1时,设备将直接进入4字节地址模式

WPS :写保护选择位,WPS位用于选择应该使用哪种写保护方案。当WPS=0时,设备将使用CMP, TB, BP[3:0]位的组合来保护存储器阵列的特定区域。当WPS=1时,设备将使用单个块锁来保护任何单个扇区或块, 当在设备上电或复位后,所有单独块锁位的默认值为1。

DRV1, DRV2 :输出驱动强度(DRV1, DRV0) -易失性/非易失性可写DRV1和DRV0位用于确定Read操作的输出驱动程序强度。

输出驱动强度

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 可能原因

写保护被使能,导致不能修改

经过检查发现所有的地址都被保护了起来,不能修改、也不能擦除

1.3 解决办法

查看寄存器手册,得知只要将寄存器2的CMP位改成0,或者将寄存器1的BP0-BP3改为0就可以,

我选择将CMP改为0,将整片的Flash的写保护都给去掉

  1. 看到数据手册上说:要写易变状态寄存器位,必须在写状态寄存器指令(状态寄存器位WEL保持0)之前执行(50h)指令

    因为初始化的时候将WEL置1了,所以先将WEL置0

QSPI_Send_CMD(0x04,0,0,QSPI_INSTRUCTION_4_LINES,QSPI_ADDRESS_NONE,QSPI_ADDRESS_8_BITS,QSPI_DATA_NONE);//禁止写使能,使WEL位为0
W25QXX_Wait_Busy();	//等待命令执行完毕
  1. 要向W25Q256先写入50h,表示要修改状态寄存器中的易失状态位
QSPI_Send_CMD(0x50,0,0,QSPI_INSTRUCTION_4_LINES,QSPI_ADDRESS_NONE,QSPI_ADDRESS_8_BITS,QSPI_DATA_NONE);//写指令50h
W25QXX_Wait_Busy();	//等待命令执行完毕
  1. 写入31h,表示要修改状态寄存器2,紧接着发送想要发送的数值
QSPI_Send_CMD(0x31,0,0,QSPI_INSTRUCTION_4_LINES,QSPI_ADDRESS_NONE,QSPI_ADDRESS_8_BITS,QSPI_DATA_4_LINES);
QSPI_Transmit(&temp,1);//发送1个字节
W25QXX_Wait_Busy();//等待命令执行完毕

1.4 用到的函数

//QSPI发�?�命 ?
void QSPI_Send_CMD(uint32_t Instruction,uint32_t Address,uint32_t DummyCycles,uint32_t InstructionMode ,
 uint32_t AddressMode , uint32_t AddressSize ,uint32_t DataMode)
{
 QSPI_CommandTypeDef CmdHandler;

 CmdHandler.Instruction=Instruction;//指令
 CmdHandler.Address=Address;//地址
 CmdHandler.DummyCycles=DummyCycles;//设置空指令周期数
 CmdHandler.InstructionMode=InstructionMode;//指令模式
 CmdHandler.AddressMode=AddressMode;//地址模式
 CmdHandler.AddressSize=AddressSize;//地址长度
 CmdHandler.DataMode=DataMode;//数据模式
 CmdHandler.SIOOMode=QSPI_SIOO_INST_EVERY_CMD;//每次都发指令
 CmdHandler.AlternateByteMode=QSPI_ALTERNATE_BYTES_NONE;//无交替字 ?
 CmdHandler.DdrMode=QSPI_DDR_MODE_DISABLE;//关闭DDR模式
 CmdHandler.DdrHoldHalfCycle=QSPI_DDR_HHC_ANALOG_DELAY;


 // QSPI_HandleTypeDef  QSPI_CommandTypeDef   Timeout
 HAL_QSPI_Command(&hqspi1,&CmdHandler,5000);
}
uint8_t QSPI_Transmit(uint8_t*buf,uint32_t datalen)
{
	 //DLR数据长度寄存 ?
	 hqspi1.Instance->DLR=datalen-1; //配置数据长度
	 if(HAL_QSPI_Transmit(&hqspi1,buf,5000)==HAL_OK)
	 {
			return 0;//发�?�数 ?,发�?�buf数组中的数据 ?
	 }
	 else
	 {
			return 1;
	 }
}
//等待空闲
void W25QXX_Wait_Busy(void)
{
	while((W25QXX_ReadSR(1)&0x01)==0x01);   // 等待BUSY位清空
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/382894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

物盾安全汤晓冬:工业互联网企业如何应对高发的供应链安全风险?

编者按:物盾安全是一家专注于物联网安全的产品厂商,其核心产品“物安盾”在能源、制造、交通等多个领域落地,为这些行业企业提供覆盖物联网云、管、边、端的安全整体解决方案。“物安盾”集成了腾讯安全制品扫描(BSCA)…

【二】kubernetes操作

k8s卸载重置 名词解释 1、Namespace:名称用来隔离资源,不隔离网络 创建名称空间 一、命名空间namesapce 方式一:命令行创建 kubectl create ns hello删除名称空间 kubectl delete ns hello查询指定的名称空间 kubectl get pod -n kube-s…

【Adobe国际认证中文官网】Adobe中国摄影计划,免费安装 正版激活

一直以来国内有非常多的 Adobe 用户,但苦于正版的购买渠道较少、价格较为高昂,转而选择其他国家或地区的 Adobe 计划,亦或者是其他软件。这次Adobe在杭州宣布在中国大陆地区推出面向专业摄影师及摄影爱好者的Adobe Creative Cloud 中国摄影计…

大话数据结构-普里姆算法(Prim)和克鲁斯卡尔算法(Kruskal)

5 最小生成树 构造连通网的最小代价生成树称为最小生成树,即Minimum Cost Spanning Tree,最小生成树通常是基于无向网/有向网构造的。 找连通网的最小生成树,经典的有两种算法,普里姆算法和克鲁斯卡尔算法。 5.1 普里姆&#xff…

技术分享| 如何使用Prometheus实现系统监控报警邮件通知

上一篇关于Prometheus的文章中说到了Prometheus是如何实现进程监控。在实际的线上环境中,当系统进程出现异常后需要实时通知到值班运维人员,去检查系统是否还正常运转。下面我们就介绍下基于Prometheus如何实现监控报警通知。 Prometheus的报警通知&…

【蓝桥杯每日一题】递归算法

🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 蓝桥杯 🌙我与杀戮之中绽放,亦如黎明的花…

【项目】Vue3+TS 动态路由 面包屑 查询重置 列表

💭💭 ✨:【项目】Vue3TS 动态路由 面包屑 查询重置 列表   💟:东非不开森的主页   💜: 热烈的不是青春,而是我们💜💜   🌸: 如有错误或不足之处&#xff0…

jsoncpp+cmake使用

目录写在前面准备clone源码编译使用编译运行参考写在前面 1、本文内容 jsoncpp编译及其使用 2、平台 windows10, linux 3、转载请注明出处: https://blog.csdn.net/qq_41102371/article/details/129300456 准备 clone源码 mkdir json cd json git clone https:…

【软件测试】老鸟告诉我内-幕,jmeter性能测试压力测试有多香?薪资真翻2倍......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 压力测试&#xff0…

Composer安装与配置教程

一、windows系统下安装安装Composer教程下载安装php 方法一、下载Composer安装包安装完成后CMD运行 composer --version 命令查看版本号,正常显示版本号则表示安装成功3、方法二、CMD命令安装composer安装前请务必确保已经正确安装了 PHP。打开命令行窗口并执行 php…

计算机网络安全基础知识1:渗透测试,网络连接的核心TCP/IP体系结构,公网,内网,ip地址和端口

计算机网络安全基础知识1:渗透测试,网络连接的核心TCP/IP体系结构,公网,内网,ip地址和端口 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去…

frp内网穿透实验

Frp (Fast Reverse Proxy) 是比较流行的一款。FRP 是一个免费开源的用于内网穿透的反向代理应用,它支持 TCP、UDP 协议, 也为 http 和 https 协议提供了额外的支持。你可以粗略理解它是一个中转站, 帮你实现 公网 ←→ FRP(服务器) ←→ 内网…

数字化创新应用发布加速,JFrog DevOps 正当时

出品 | CSDN 云计算 数字化进程,每天都在发生。 对于技术开发来说,从业务和场景探索和快速开发创新应用,将带来整个开发流程的全新挑战。根据 IDC 分析,到 2024 年时,全球将会有 5.2 亿个软件应用。而超过 60%的企业每…

【教学类-07-06】20230302《破译电话号码-图形篇(图形固定列不重复)》(三款输入版)

效果展示1、适合中班默写学号——有姓名 有班级,无学号,适合中班幼儿2、适合大班幼儿默写名字——有学号,有班级,无姓名,适合初学者描字(小班、中班、大班)——名字、学号、班级都有&#xff08…

软件测试需要学习什么?好就业么

软件测试需要学习测试环境、网络环境、windows环境、数据库管理、编程技巧(java编程设计,脚本语言,设计工具,XML编程、软件测试技术,测试理论,方法,流程,文档写作,测试工…

微信小程序|基于小程序+云开发制作一个租房小程序

经济发展的同时伴随着大批人群的流动,租房需求一直是持久不衰的话题,如何租好房,好租房,跟随此文一起制作一个租房小程序,让租房不再困难。 一、小程序1. 创建小程序2. 首页3. 房源列表页4. 房源详情页5. 个人中心页</

mysql双机互为主从配置记录

1.准备2台机器 server1 192.168.0.37 server2 192.168.0.119 2.安装mysql&#xff0c;我这里用的docker-compose server1的docker-compose version: 3 services:db:build: ./buildcontainer_name: dbimage: mysql:5.6restart: alwayscommand:--character-set-serverutf8mb4…

python使用openpyxl处理excel表格数据

python使用openpyxl处理excel表格数据前言一、安装openpyxl包二、读取excel数据1. 获取excel表格的页码2. 获取excel表格某一行的数据3. 获取excel表格某一列的数据4. 获取excel表格n行n列的数据5. 获取excel表格某一格的数据三、把数据写入excel数据中前言 对于excel表格&…

探讨==和equals的区别和联系,为什么equals()和hashcode()要一起重写?

(一) 探讨和equals的区别和联系&#xff1f; 面试考题&#xff1a;《关于和equals的区别》&#xff0c;该怎么回答完美呢&#xff1f; 可以这样回答&#xff1a; &#xff08;1&#xff09;对于 简单来说比较的是指相等 ①&#xff1a;对于基本数据类型,则直接比较的是对应…

项目实战-瑞吉外卖day01(B站)

瑞吉外卖-Day01课程内容软件开发整体介绍瑞吉外卖项目介绍开发环境搭建后台登录功能开发后台退出功能开发1. 软件开发整体介绍作为一名软件开发工程师,我们需要了解在软件开发过程中的开发流程&#xff0c; 以及软件开发过程中涉及到的岗位角色&#xff0c;角色的分工、职责&am…