📄 flash.c
字号:
#include <flash.h>
uchar xdata FlashBuf[FlashBufLen];
/*Write Enable (WREN) Instruction*/
void FlashWE(void)
{
FlashCS = 0;
_nop_();
SPIF = 0;
SPI0DAT = WREN;
while(SPIF==0);
SPIF = 0;
FlashCS = 1;
}
/*Write Disable (WRDI) Instruction Sequence*/
void FlashWD(void)
{
FlashCS = 0;
_nop_();
SPIF = 0;
SPI0DAT = WRDI;
while(SPIF==0);
SPIF = 0;
FlashCS = 1;
}
/*Read Status Register (RDSR) Instruction Sequence and Data-Out Sequence*/
/*Status Register :bit7-2 non-used; bit1 WEL(write enable latch); bit0 WIP(write in progress)*/
uchar FlashRDSR(void)
{
uchar idata temp;
FlashCS = 0;
_nop_();
SPIF = 0;
SPI0DAT = RDSR;
while(SPIF==0);
SPIF = 0;
SPI0DAT = 0x00;
while(SPIF==0);
SPIF = 0;
temp = SPI0DAT;
FlashCS = 1;
return temp;
}
/*Read Data Bytes (READ) Instruction Sequence and Data-Out Sequence*/
void FlashRDB(uint PageAdr, uchar Colum, uchar length, uchar *FlashBuf)
{
uchar idata temp, i;
FlashCS = 0;
_nop_();
/*write READ instruction*/
SPIF = 0;
SPI0DAT = READ;
while(SPIF==0);
SPIF = 0;
/*write start address 23-0*/
SPI0DAT = (PageAdr>>8)&0x0F;
while(SPIF==0);
SPIF = 0;
SPI0DAT = PageAdr;
while(SPIF==0);
SPIF = 0;
SPI0DAT = Colum;
while(SPIF==0);
SPIF = 0;
/*read bytes*/
for(i=0;i<length;i++)
{
SPI0DAT = 0x00;
while(SPIF==0);
SPIF = 0;
temp = SPI0DAT;
*(FlashBuf+i) = temp;
}
FlashCS = 1;
}
/*Read Data Bytes at Higher Speed (FAST_READ) Instruction Sequence and Data-Out Sequence*/
void FlashReadFast(uint PageAdr, uchar Colum, uchar length, uchar *FlashBuf)
{
uchar idata temp, i;
FlashCS = 0;
_nop_();
/*write READ instruction*/
SPIF = 0;
SPI0DAT = FAST_READ;
while(SPIF==0);
SPIF = 0;
/*write 1 dummy byte*/
SPI0DAT = 0x00;
while(SPIF==0);
SPIF = 0;
/*write start address 23-0*/
SPI0DAT = (PageAdr>>8)&0x0F;
while(SPIF==0);
SPIF = 0;
SPI0DAT = PageAdr;
while(SPIF==0);
SPIF = 0;
SPI0DAT = Colum;
while(SPIF==0);
SPIF = 0;
/*read bytes*/
for(i=0;i<length;i++)
{
SPI0DAT = 0x00;
while(SPIF==0);
SPIF = 0;
temp = SPI0DAT;
*(FlashBuf+i) = temp;
}
FlashCS = 1;
}
/*Page Write (PW) Instruction Sequence*/
void FlashPW(uint PageAdr, uchar Colum, uchar length, uchar *FlashBuf)
{
uchar idata temp, i;
FlashCS = 0;
_nop_();
/*write READ instruction*/
SPIF = 0;
SPI0DAT = PW;
while(SPIF==0);
SPIF = 0;
/*write start address 23-0*/
SPI0DAT = (PageAdr>>8)&0x0F;
while(SPIF==0);
SPIF = 0;
SPI0DAT = PageAdr;
while(SPIF==0);
SPIF = 0;
SPI0DAT = Colum;
while(SPIF==0);
SPIF = 0;
/*read bytes*/
for(i=0;i<length;i++)
{
temp = *(FlashBuf+i);
SPI0DAT = temp;
while(SPIF==0);
SPIF = 0;
}
FlashCS = 1;
/*read status register, waiting for WIP=0*/
while((FlashRDSR()&0x01)==1);
}
/*Page Erase (PE) Instruction Sequence*/
void FlashPE(uint PageAdr, uchar Colum)
{
FlashCS = 0;
_nop_();
/*write READ instruction*/
SPIF = 0;
SPI0DAT = PE;
while(SPIF==0);
SPIF = 0;
/*write start address 23-0*/
SPI0DAT = (PageAdr>>8)&0x0F;
while(SPIF==0);
SPIF = 0;
SPI0DAT = PageAdr;
while(SPIF==0);
SPIF = 0;
SPI0DAT = Colum;
while(SPIF==0);
SPIF = 0;
/*read status register, waiting for WIP=0*/
while((FlashRDSR()&0x01)==1);
}
/*Sector Erase (SE) Instruction Sequence*/
void FlashSE(uint PageAdr, uchar Colum)
{
FlashCS = 0;
_nop_();
/*write READ instruction*/
SPIF = 0;
SPI0DAT = SE;
while(SPIF==0);
SPIF = 0;
/*write start address 23-0*/
SPI0DAT = (PageAdr>>8)&0x0F;
while(SPIF==0);
SPIF = 0;
SPI0DAT = PageAdr;
while(SPIF==0);
SPIF = 0;
SPI0DAT = Colum;
while(SPIF==0);
SPIF = 0;
/*read status register, waiting for WIP=0*/
while((FlashRDSR()&0x01)==1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -