📄 iap.c
字号:
#include"iap.h"
#include"sst89cxx.h"
#include "public.h"
/*
#define CMD_CHIP_ERASE 0X01
#define CMD_BLOCK_ERASE 0X0D
#define CMD_SECTOR_ERASE 0X0B
#define CMD_BYTE_PROGRAM 0X0E
#define CMD_BURST_PROGRAM 0X06
#define CMD_BYTE_VERIFY 0X0C
#define CMD_PROG_SBIT1 0X0F
#define CMD_PROG_SBIT2 0X03
#define CMD_PROG_SBIT3 0X05
*/
//unsigned char ChipErase();
unsigned char ByteProgram(unsigned char ByteAddrH,unsigned char ByteAddrL,unsigned char ch);
unsigned char BlockErase(unsigned char blockno);
unsigned char SectorErase(unsigned char SectorAddrH,unsigned char SectorAddrL);
unsigned char ByteVerify(unsigned char ByteAddrH,unsigned char ByteAddrL,unsigned char *ch);
//unsigned char BurstProgram(unsigned char StartByteAddrH,unsigned char StartByteAddrL,unsigned char len,unsigned char *buf);
unsigned char ProgSbit();
//add
unsigned char ReadProgram(unsigned char StartByteAddrH,unsigned char StartByteAddrL,unsigned char len,unsigned char *buf);
unsigned char WriteProgram(unsigned char StartByteAddrH,unsigned char StartByteAddrL,unsigned char len,unsigned char *buf);
unsigned char Busy;
unsigned char BlockErase(unsigned char blockno)
{
SFCF|=0xc0;
if(blockno==0)SFAH=0x00;
else SFAH=0xf0;
SFDT=0x55;
SFCM=CMD_BLOCK_ERASE;
while(1)
{
Busy=SFST&0x04;
if(Busy==0)break;
}
SFCF &=0x03;
return TRUE;
}
unsigned char SectorErase(unsigned char SectorAddrH,unsigned char SectorAddrL)
{
SFCF|=0xc0;
SFAH=SectorAddrH;
SFAL=SectorAddrL;
SFCM=CMD_SECTOR_ERASE;
while(1)
{
Busy=SFST&0x04;
if(Busy==0)break;
}
SFCF &=0x03;
return TRUE;
}
unsigned char ByteProgram(unsigned char ByteAddrH,unsigned char ByteAddrL,unsigned char ch)
{
SFCF|=0xc0;
SFAH=ByteAddrH;
SFAL=ByteAddrL;
SFDT=ch;
SFCM=CMD_BYTE_PROGRAM;
while(1)
{
Busy=SFST&0x04;
if(Busy==0)break;
}
SFCF &=0x03;
return TRUE;
}
/*
unsigned char BurstProgram(unsigned char StartByteAddrH,unsigned char StartByteAddrL,unsigned char len,unsigned char *buf)
{
unsigned char i;
unsigned int addr;
addr=StartByteAddrH*256+StartByteAddrL;
for(i=0;i<len;i++)
{
SFCF|=0xc0;
SFAH=(addr>>8)&0xff;
SFAL=addr&0xff;;
SFDT=buf[i];
SFCM=CMD_BURST_PROGRAM;
while(1)
{
Busy=SFST&0x08;
if(Busy==0)break;
}
/////ByteVerify
//SFCM=CMD_BYTE_VERIFY;
//if(SFDT!=buf[i])return FALSE;
SFCF &=0x03;
addr++;
}
while(1)
{
Busy=SFST&0x04;
if(Busy==0)break;
}
SFCF &=0x03;
return TRUE;
}
*/
unsigned char ByteVerify(unsigned char ByteAddrH,unsigned char ByteAddrL,unsigned char *ch)
{
SFCF|=0xc0;
SFAH=ByteAddrH;
SFAL=ByteAddrL;
SFCM=CMD_BYTE_VERIFY;
*ch=SFDT;
SFCF &=0x03;
return TRUE;
}
unsigned char ProgSbit()
{
SFCF|=0xc0;
SFDT=0x55;
SFCM=CMD_PROG_SBIT1;
while(1)
{
Busy=SFST&0x04;
if(Busy==0)break;
}
SFCM=CMD_PROG_SBIT2;
while(1)
{
Busy=SFST&0x04;
if(Busy==0)break;
}
SFCM=CMD_PROG_SBIT3;
while(1)
{
Busy=SFST&0x04;
if(Busy==0)break;
}
SFCF &=0x03;
return TRUE;
}
/////////////////////// add function
unsigned char ReadProgram(unsigned char StartByteAddrH,unsigned char StartByteAddrL,unsigned char len,unsigned char *buf)
{
unsigned int addr;
unsigned char i;
unsigned char addrH,addrL;
addr=StartByteAddrH*256+StartByteAddrL;
for(i=0;i<len;i++)
{
addrH=(unsigned char)(addr>>8);
addrL=(unsigned char)(addr);
if(ByteVerify(addrH,addrL,&buf[i])!=TRUE)return FALSE;
addr++;
}
return TRUE;
}
unsigned char WriteProgram(unsigned char StartByteAddrH,unsigned char StartByteAddrL,unsigned char len,unsigned char *buf)
{
unsigned int addr;
unsigned char i;
unsigned char addrH,addrL;
unsigned char ch;
addr=StartByteAddrH*256+StartByteAddrL;
for(i=0;i<len;i++)
{
addrH=(unsigned char)(addr>>8);
addrL=(unsigned char)(addr);
if(ByteProgram(addrH,addrL,buf[i])!=TRUE)return FALSE;
if(ByteVerify(addrH,addrL,&ch)!=TRUE)return FALSE;
if(ch!=buf[i])return FALSE;
addr++;
Delay(20);
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -