📄 sst39sf040.txt
字号:
Name Function
------------------------------------------------------
Check_SST_39SF040 Check manufacturer and device ID
Erase_Entire_Chip Erase the contents of the entire chip
Erase_One_Sector Erase a sector of 4096 bytes
Program_One_Byte Alter data in one byte
Program_One_Sector Alter data in 4096 bytes sector
Check_Toggle_Ready End of internal program or erase detection using
Toggle bit
Check_Data_Polling End of internal program or erase detection using
Data# polling
//***************************/
#define FALSE 0
#define TRUE 1
#define SECTOR_SIZE 4096
#define SST_ID 0xBF
#define SST_39SF040 0xB7
typedef unsigned char BYTE;
extern void Delay_150_Nano_Seconds();
extern void Delay_25_Milli_Seconds();
extern void Delay_100_Milli_Seconds();
/*****************************/
/* 程序:检查SST_39SF040 */
/* 是否存在 */
/* 输入: 无 */
/* 输出: 无 */
/*****************************/
int Check_SST_39SF040()
{
unsigned char xdata *Temp;
unsigned char SST_id1;
unsigned char SST_id2;
int ReturnStatus;
Temp = 0x5555;
*Temp = 0xAA;
Temp = 0x2AAA;
*Temp = 0x55;
Temp = 0x5555;
*Temp = 0x90;
Delay_150_Nano_Seconds();
Temp = 0x0000;
SST_id1 = *Temp;
Temp = 0x0001;
SST_id2 = *Temp;
if ((SST_id1 == SST_ID) && (SST_id2 ==SST_39SF040))
ReturnStatus = 1;
else
ReturnStatus = 0;
Temp = 0x5555;
*Temp = 0xAA;
Temp = 0x2AAA;
*Temp = 0x55;
Temp = 0x5555;
*Temp =0xF0;
Delay_150_Nano_Seconds();
return (ReturnStatus);
}
/***************************/
/*程序:擦除整个片子 */
/*输入:无 */
/*输出:无 */
/***************************/
int Erase_Entire_Chip()
{
unsigned char xdata *Temp;
Temp = 0x5555;
*Temp = 0xAA;
Temp = 0x2AAA;
*Temp = 0x55;
Temp = 0x5555;
*Temp = 0x80;
Temp = 0x5555;
*Temp = 0xAA;
Temp = 0x2AAA;
*Temp = 0x55;
Temp = 0x5555;
*Temp = 0x10;
Delay_100_Milli_Seconds();
}
/*************************************/
/*程序:擦除一个扇区 */
/*输入:擦除地址 */
/*输出:无 */
/*************************************/
int Erase_One_Sector(unsigned char xdata *Dst)
{
unsigned char xdata *Temp;
Temp = 0x5555;
*Temp = 0xAA;
Temp = 0x2AAA;
*Temp = 0x55;
Temp = 0x5555;
*Temp = 0x80;
Temp = 0x5555;
*Temp = 0xAA;
Temp = 0x2AAA;
*Temp = 0x55;
Temp = Dst
*Temp = 0x30;
Delay_25_Milli_Seconds();
}
/************************************/
/*程序:写入一个字节 */
/*输入:字节和地址 */
/*输出:无 */
/************************************/
void Program_One_Byte (unsigned char SrcByte,unsigned char xdata *Dst)
{
unsigned char xdata *SourceBuf;
unsigned char xdata *DestBuf;
int Index;
DestBuf = Dst;
Temp = 0x5555;
*Temp = 0xAA;
Temp = 0x2AAA;
*Temp = 0x55;
Temp = 0x5555;
*Temp = 0xA0;
*DestBuf = SrcByte;
Check_Toggle_Ready(DestBuf);
}
/**********************************/
/*程序:写入一个扇区 */
/*输入:起始字节和地址 */
/*输出:无 */
/**********************************/
void Program_One_Sector (unsigned char xdata *Src,unsigned char xdata *Dst)
{
unsigned char xdata *Temp;
unsigned char xdata *SourceBuf;
unsigned char xdata *DestBuf;
int Index;
SourceBuf = Src;
DestBuf = Dst;
Erase_One_Sector(Src);
for (Index = 0; Index < SECTOR_SIZE; Index++)
{
Temp = 0x5555;
*Temp = 0xAA;
Temp = 0x2AAA;
*Temp = 0x55;
Temp = 0x5555;
*Temp = 0xA0;
Temp = DestBuf;
*DestBuf++ = *SourceBuf++;
Check_Toggle_Ready(Temp);
}
}
/*************************/
/* 程序:检查触发位 */
/* 输入:地址 */
/* 输出:无 */
/*************************/
void Check_Toggle_Ready (unsigned char xdata *Dst)
{
BYTE Loop = TRUE;
BYTE PreData;
BYTE CurrData;
unsigned long TimeOut = 0;
PreData = *Dst;
PreData = PreData & 0x40;
while ((TimeOut< 0x07FFFFFF) && (Loop))
{
CurrData = *Dst;
CurrData = CurrData & 0x40;
if (PreData == CurrData)
Loop = FALSE;
PreData = CurrData;
TimeOut++;
}
}
/******************************/
/* 程序:检查数据上拉位 */
/* 输入:地址、数据 */
/* 输出:无 */
/******************************/
void Check_Data_Polling (unsigned char xdata *Dst,unsigned char TrueData)
{
BYTE Loop = TRUE;
BYTE CurrData;
unsigned long TimeOut = 0;
TrueData = TrueData & 0x80;
while ((TimeOut< 0x07FFFFFF) && (Loop))
{
CurrData = *Dst;
CurrData = CurrData & 0x80;
if (TrueData == CurrData)
Loop = FALSE;
TimeOut++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -