⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sst39sf040.txt

📁 39sf040驱动
💻 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 + -