W25Q256被写保护如何修改

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位清空
}

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
w25q256是一款串行闪存芯片,具有256Mb的容量。下面是一个基本的w25q256例程: 1. 初始化串行接口:首先,需要将控制引脚(如片选线、时钟线、数据线等)设置为输出模式,并将其置为逻辑高电平。这样,我们就可以通过串行接口与w25q256进行通信了。 2. 读取设备ID:使用指令0x9F,可以读取到设备ID。将片选线拉低,发送读取设备ID的指令,并接收芯片返回的ID信息。 3. 擦除扇区:使用指令0x20,可以擦除指定的扇区。首先,将片选线拉低,发送擦除扇区的指令和扇区地址。接着,等待擦除操作完成,通常需要数秒到数十秒不等。 4. 入数据:使用指令0x02,可以向w25q256入数据。将片选线拉低,发送入数据的指令、入地址和待入的数据。接着,等待入操作完成,通常需要数毫秒到数十毫秒不等。 5. 读取数据:使用指令0x03,可以从w25q256中读取数据。将片选线拉低,发送读取数据的指令、读取地址和读取长度。接着,读取芯片返回的数据。 6. 外部中断:w25q256还支持外部中断功能。可以将其与微控制器或其他设备的中断引脚进行连接,实现芯片与其他设备的通信。 以上仅是w25q256例程的简单介绍,具体的读操作还需要根据实际需要进行调整和扩展。需要注意的是,读操作中的指令、地址和数据等参数的正确设置非常重要,否则可能导致读失败或损坏芯片。因此,在应用中,建议参考w25q256的数据手册,详细了解芯片的功能和使用方法,以确保读操作的正确性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值