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)指令,不能理解为什么,还请相关大佬可以解答一下,在此感谢。