W25Q256被写保护如何修改
W25Q256被写保护如何修改
- 1、 W25Q256数据读不到
- 1.1 打印的寄存器的值
- 1.2 可能原因
- 1.3 解决办法
- 1.4 用到的函数
1、 W25Q256数据读不到
能够正确的读到ID,但是读到的数据不正确
1.1 打印的寄存器的值
0x2
BUSY :只读, 指令正在执行
WEL (1) :只读,写使能锁定,在写禁止后清零
BP0 - 3:区块保护位
TB :顶层/底层块保护
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
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的写保护都给去掉
看到数据手册上说:要写易变状态寄存器位,必须在写状态寄存器指令(状态寄存器位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(); //等待命令执行完毕
- 要向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(); //等待命令执行完毕
- 写入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 TimeoutHAL_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位清空
}
W25Q256被写保护如何修改相关推荐
- winhex文件有写保护怎么修改也改变了该怎么办
winhex文件有写保护怎么修改也改变了该怎么办那个选项窗口我也修改过了对其他文件有用,就是对那个文件没用
- linux磁盘写保护怎么修改_linux系统怎么避免u盘被写保护
如果没有开关保护的话,也没有物理写保护的U盘提示被写保护,原因就是把注册表里USB设备可读可写的项改成成了只读,只要改回来就好了. 方法:把下面的字串复制到记事本中,保存,再把后缀改成reg,双击这个 ...
- linux磁盘写保护怎么修改_mount: /dev/vdb 写保护,将以只读方式挂载
今天再mount磁盘的时候遇到一个问题: [root@oracle1 /]# mount /dev/vdb /oradata mount: /dev/vdb 写保护,将以只读方式挂载 mount: 未 ...
- linux磁盘写保护怎么修改_用\RAID 0.0999\ 写保护 Linux 硬盘分区-me09-ChinaUnix博客...
用"RAID 0.0999" 写保护 Linux 硬盘分区 计 算机科学家 David Wheeler 有一句名言:"计算机科学中的任何问题,都可以通过加上一层逻辑层来解 ...
- linux磁盘写保护怎么修改_linux – mount:无法重新安装块设备/ dev / sda5读写,是写保护的...
所以,就是这样.除了磁盘是只读的并且不想改变之外,一切都正常工作. ^ _ ^! 谢谢. root@NODE02:/tmp# df . Filesystem 1K-blocks Used Availa ...
- STM32外挂FLASH模拟U盘(基于HAL库)
STM32外挂FLASH模拟U盘(基于HAL库) 1.背景 1.1这篇文章能给你带来什么 1.2根据你要解决的问题,精确快速跳转到相应位置 1.3我在做完这个后还有不明白的地方,希望能有大触解答困惑 ...
- 也谈SSDT Hook(一)
一.原理篇 1. 关于系统服务. 系统服务是由操作系统提供一组函数,使得开发者能够通过APIs直接或间接的调用.一个API可以对应一个系统服务,也可以一个API依赖多个系统服务. ...
- Kile5安装教程和创建一个工程举例【图文STM32F407ZE芯片为例】
文章目录 [一]开始安装 keil5 STM32F407ZE为例 [二]STM32工程创建步骤 [三]安装J-Link驱动+ST-LINK驱动及教程 [四]STM32的命名规则举例 --->面试 ...
- 【STM32CubeMX】F103独立看门狗
前言 本文记录了我学习STM32CubeMX的过程,方便以后回忆.我们使用的开发板是基于STM32F103C6T6的.本章记录了独立看门狗的使用配置.要学习的话,注意流程一说的,省略的内容. 基础 ...
最新文章
- ios uiview 如何刷新_UIView的重绘及布局刷新
- 【leetcode】987. Vertical Order Traversal of a Binary Tree
- Java中迭代列表中数据时几种循环写法的效率比较
- VMD_test matlab仿真
- 产品微操的艺术:提高核心指标的5个需求原理(1~5完)
- keepalived+nginx保持高可用配置
- Linux之HugePages快速配置
- IIS7和IIS8环境下 ThinkPHP专用URL Rewrite伪静态规则
- 高等数值计算方法第一章引论【误差,条件数】
- 非学习的点云配准方法汇总
- 软件项目开发流程逻辑图
- python 回调函数的使用_Python回调函数用法实例详解
- IDEA社区版详细安装2022最新版(保姆式)
- 学计算机能考南京哪个大学,这三所南京市高校,适合报考计算机类专业,适合的考生不要错过...
- 一个刚入行而又不甘于平庸的程序猿2019个人总结
- openssl-key-exchange 基于ECDH (Elliptic-Curve Diffie–Hellman) 的密钥交换流程
- 一句话木马拿Shell与菜刀原理
- 面试题——对称加密和非对称加密
- HDU-1248 寒冰王座 完全背包
- 弘辽科技:做电商开网店流量不精准?你的人群标签没做好