1. SPI Flash仅支持页编程(页大小256字节),所有其它大批量数据的写入都是以页为单位。
这里注意所说的页编程含义,页编程分为以下三步:
bsp_spiWrite1(0x02); ----------第1步发送页编程命令
bsp_spiWrite1((_uiWriteAddr & 0xFF0000) >> 16); ----------第2步发送地址
bsp_spiWrite1((_uiWriteAddr & 0xFF00) >> 8);
bsp_spiWrite1(_uiWriteAddr & 0xFF);
for (i = 0; i < _usSize; i++)
{
bsp_spiWrite1(*_pBuf++); ----------第3步写数据,此时就可以连续写入数据了,
不需要再重新设置地址,地址会自增。这样可以大大加快写入速度
}
页编程的含义恰恰就体现在第3步了,如果用户设置的 “起始地址+数据长度” 所确定的地址范围超过了此起始地址所在的页,
地址自增不会超过页范围,而是重新回到了此页的首地进行编写。这一点要特别的注意。
如果用户不需要使用地址自增效果,那么直接指定地址进行编写即可。可以任意指定地址进行编写,编写前一定要进行擦除。
比如下面就是页内操作(使用前已经进行的了扇区擦除,每次擦除最少擦除一个扇区4KB):
uint8_t tempbuf[10] = {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00};
uint8_t temp1 = 0x10, temp2 = 0x29, temp3 = 0x48;
1. 从250地址开始写入10个字节数据 PageWrite(tempbuf, 250, 10);(因为一旦写入超过地址255,就会从0地址开始重新写)
2. 向地址20写入1个字节数据。 PageWrite(&temp1, 20, 1);
3. 向地址30写入1个字节数据。 PageWrite(&temp2, 30, 1);
4. 向地址510写入1个字节数据。PageWrite(&temp3, 510, 1);
(这里已经是写到下一页了)
下面是将从0地址到511地址读取出来的512个字节数据,一行32字节
5. SPI Flash的擦除支持扇区擦除(4KB),块擦除(32KB或者64KB)以及整个芯片擦除。对于扇区擦除和块擦除,使用的时候要注意一点,一般情况下,只需用户给出扇区或者块的首地址即可。如果给的不是扇区或者块的首地址也没有关系的,
只要此地址是在扇区或者块的范围内,此扇区或者块也可以被正确擦除。不过建议使用时给首地址,方便管理。
6. SPI Flash的读操作比较简单,只要给出读取的起始地址和需要读取的数据大小即可,但是不要超过了芯片范围。 |