1.在使用该Flash时Security ID占用地址0000-07FFH最好不要在这个地址存储用户数据
2.使用中的写作(02H)以及擦除(20H、D8H、C7H)操作时,我们可以看到在数据手册中的是这样描述的:
写作和擦除操作时需要先发送WREN(写使能)指令,但当我在实际调试中发现数据无法成功写入时。
发送使用指令后,可以读取状态寄存器STATUS REGISTER,可以得到当前的写使能bit位置成功。
调试结束后,发现在写使能之前需要发送(98H),解锁块保护。
最终代码结构如下:
uint8 SST26VF016_Write_Tx[4] = {0xFF,0xFF,0xFF,0xFF}; uint8 SST26VF016_Write_Rx[260] = {0};
OUT_SST26VF016DRV_WREN();//写使能 OUT_SST26VF016DRV_ULBPR(); ///解锁块保护
OUT_SST26VF016DRV_WREN();//写使能
Out_SST26VF016_CS_LOW; //拉低引脚 SST26VF016_Write_Tx[0] = PAGE_PROGRAM; SST26VF016_Write_Tx[1] = (addr&0xFFFFFF)>>16; SST26VF016_Write_Tx[2] = (addr&0xFFFF)>>8; SST26VF016_Write_Tx[3] = addr&0xFF; OUT_HcSST26VF016_ESH_Transmit(SST26VF016_Write_Tx,SST26VF016_Write_Rx,0x04)
OUT_HcSST26VF016_ESH_Transmit(buffer,SST26VF016_Write_Rx,Size); ///写入数据Flash Out_SST26VF016_CS_HIGH; //选择拉高片的引脚 OUT_SST26VF016DRV_Wait_Busy(); ///状态寄存器检测到空闲状态
OUT_SST26VF016DRV_WRDI(); //写失能
需要注意的是,写入(98H)指令后,将写下使能状态清晰0,需要重写(06H)指令。
在写数据之前,数据手册中没有直接说明需要写入(98H)指令,不明白为什么,请相关大佬回答,谢谢。