|

楼主 |
发表于 2025-6-23 18:34:27
|
显示全部楼层
我今天又把一块W25Q128给上片区锁了,这次是SR1=0xF0,SR2=0X02,SR3=0X00.根据手册,可以看到是WPS=0,CMP=0,SEC=1,TB=1,BP2=1,BP1=0,BP0=X状态,锁了一部分区域,我使用的是正点原子的例程,尝试直接writeEN后writeSR,
uint8_t WriteSr1 = 0x03;
norflash_write_enable();
norflash_write_sr(1,WriteSr1);
这样无法将SR1寄存器改写。后来,按照上面的步骤,在写寄存器前,把IO2引脚直接初始化为普通推挽GPIO,然后置高,再去写寄存器,成功了。。。。。
函数如下。
void write_w25q128jv_statusRegister(void){
GPIO_InitTypeDef gpio_init_struct;
__HAL_RCC_GPIOE_CLK_ENABLE();
/* 初始化BK1_IO2引脚 */
gpio_init_struct.Pin = GPIO_PIN_2;
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
gpio_init_struct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOE, &gpio_init_struct);
uint8_t sr1=norflash_read_sr(1);
uint8_t WriteSr1 = 0x03;
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_2,1);
norflash_write_enable();
norflash_write_sr(1,WriteSr1);
sr1=norflash_read_sr(1);
uint8_t sr2=norflash_read_sr(2);
uint8_t sr3=norflash_read_sr(3);
}
SR1成功的写入了0X03,解锁了。。。以上。
按照硬汉哥和9楼的说法,应该是可以解决大部分的锁。也是要多读他手册里面的寄存器关系。我这次是SRL=0,SRP=1,只要将WP引脚置高,即可解除状态寄存器的写保护,然后再把状态寄存器的存储区写保护关了,以上。有任何进展,我还会在此贴下面续。
有机会再去将之前的东西解决一下。 |
|