亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sst39vf640x.c

?? SST芯片SST39VF6401/SST39VF6402的底層驅(qū)動(dòng)源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
Software Driver
SST39VF6401/SST39VF6402
64 Mbit Multi-Purpose Flash (MPF+)

June 2003
 
ABOUT THE SOFTWARE

This application note provides a software driver example for 39VF6401/39VF6402
64 Mbit Multi-Purpose Flash (MPF+) that can be used in any microprocessor based
system.

The SST39VF6401 supports bottom boot block protection, and the SST39VF6402 
supports top boot block protection. The boot block memory area is protected when 
WP# is low and unprotected when WP# is high.

Software driver example routines provided in this document utilize high-level
"C" programming language for broad platform support. In many cases, software 
driver routines can be inserted "as is" into the main body of code being 
developed by the system software developers. Extensive comments are included 
in each routine to describe the function of each routine. The software driver 
routines in "C" can be used with many microprocessors and microcontrollers. 

ABOUT THE SST39VF6401/SST39VF6402

Companion product datasheet for 39VF6401/39VF6402 should be reviewed in 
conjunction with this application note for a complete understanding of the device.

The C code in this document contains the following routines, which are listed
in this order:

Name                    Function
------------------------------------------------------------------
Check_SST_39VF640X      Check manufacturer and device ID
CFI_Query               CFI Query Entry/Exit command sequence
SecID_Query		SecID Query Entry/Exit command sequence
Erase_One_Sector        Erase a sector of 2048 words
Erase_One_Block         Erase a block of 32K words
Erase_Entire_Chip       Erase the contents of the entire chip
Program_One_Word        Alter data in one word
Program_One_Sector      Alter data in 2048-word sector
Program_One_Block       Alter data in 32K-word block
SecID_Lock_Status	Check the Lock Status of Security ID segment
User_SecID_Word_Program Write data into User Security ID Segment
User_SecID_Lock_Out 	Lock out the User Security ID Segment
Erase_Suspend		Suspend Sector/Block Erase operation
Erase_Resume		Resume Sector/Block Erase operation
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

"C" LANGUAGE DRIVERS

/***********************************************************************/
/* Copyright Silicon Storage Technology, Inc. (SST), 1994-2003         */
/* Example "C" language Driver of 39VF640X 64 Mbit MPF+ Device	       */
/* Jerry Deng, Silicon Storage Technology, Inc.                        */
/*                                                                     */
/* Revision 1.0, June 19, 2003                                         */
/*                                                                     */
/* This file requires these external "timing"  routines:               */
/*                                                                     */
/*      1.)  Delay_10_Micro_Seconds                                    */
/*      2.)  Delay_20_Micro_Seconds                                    */
/*      3.)  Delay_150_Nano_Seconds                                    */
/*      4.)  Delay_25_Milli_Seconds                                    */
/*      5.)  Delay_50_Milli_Seconds                                    */
/***********************************************************************/

#define FALSE                   0
#define TRUE                    1

#define SECTOR_SIZE             2048    // Must be 2048 words for 39VF640X
#define BLOCK_SIZE              32768   // Must be 32K words for 39VF640X

#define SST_ID                  0x00BF  // SST Manufacturer's ID code
#define SST_39VF6401            0x236B  // SST39VF6401 device code
#define SST_39VF6402            0x236A  // SST39VF6402 device code

typedef unsigned char           BYTE;     // BYTE is 8-bit in length
typedef unsigned int            WORD;     // WORD is 16-bit in length
typedef unsigned long int       Uint32;   // Uint32 is 32-bit in length

Uint32 system_base = 0xC0000000;  // 4GByte System Memory Address.
	// This sample code uses 0xC0000000 as the system_base address.
   	// The user should modify this address accordingly.

#define sysAddress(offset) ((volatile WORD *)(system_base + offset))

#define MAX_TIMEOUT	0x07FFFFFF   // A ceiling constant used by Check_Toggle_
	// Ready() and Check_Data_Polling().
      	// The user should modify this constant accordingly.

// --------------------------------------------------------------------
//                       EXTERNAL ROUTINES
// --------------------------------------------------------------------
extern void     Delay_10_Micro_Seconds();
extern void     Delay_20_Micro_Seconds();
extern void     Delay_150_Nano_Seconds();
extern void     Delay_25_Milli_Seconds();
extern void     Delay_50_Milli_Seconds();
// --------------------------------------------------------------------

int Check_SST_39VF640X(void);
void CFI_Query(WORD*);
void SecID_Query(WORD*, WORD*);
int Erase_One_Sector(Uint32);
int Erase_One_Block (Uint32);
void Erase_Entire_Chip(void);
int Program_One_Word (WORD*, Uint32);
int Program_One_Sector (WORD*, Uint32);
int Program_One_Block (WORD *Src, Uint32 Dst);
int SecID_Lock_Status(void);
int User_SecID_Word_Program (WORD*, WORD*, int);
void User_SecID_Lock_Out (void);
void Erase_Suspend (void);
void Erase_Resume (void);
int Check_Toggle_Ready (Uint32);
int Check_Data_Polling (Uint32, WORD);


/************************************************************************/
/* PROCEDURE:   Check_SST_39VF640X                                      */
/*                                                                      */
/* This procedure decides whether a physical hardware device has a      */
/* SST39VF640X 64 Mbit MPF+ Device installed or not.         		*/
/*                                                                      */
/* Input:                                                               */
/*          None                                                        */
/*                                                                      */
/* Output:                                                              */
/*          return TRUE:  indicates a SST39VF640X                       */
/*          return FALSE: indicates not a SST39VF640X                   */
/************************************************************************/
int Check_SST_39VF640X(void)
{
    WORD SST_id1;
    WORD SST_id2;
    int  ReturnStatus;

    //  Issue the Software Product ID code to 39VF640X
    *sysAddress(0x5555) = 0x00AA;  // write data 0x00AA to device addr 0x5555
    *sysAddress(0x2AAA) = 0x0055;  // write data 0x0055 to device addr 0x2AAA
    *sysAddress(0x5555) = 0x0090;  // write data 0x0090 to device addr 0x5555
    Delay_150_Nano_Seconds();   // Tida Max 150ns for 39VF640X

    // Read the product ID from 39VF640X
    SST_id1  = *sysAddress(0x0000);   // get first ID byte
    SST_id2  = *sysAddress(0x0001);   // get second ID byte

    // ------------------------------------------------------------
    // Determine whether there is a SST 39VF6401 installed or not
    // use the following code:

    if ((SST_id1 == SST_ID) && (SST_id2 == SST_39VF6401))
            ReturnStatus = TRUE;
    else
            ReturnStatus = FALSE;
    // ------------------------------------------------------------
    // Or determine whether there is a SST 39VF6402 installed or not
    // use the following code:
     
    if ((SST_id1 == SST_ID) && (SST_id2 == SST_39VF6402))
            ReturnStatus = TRUE;
    else
            ReturnStatus = FALSE;
    // ------------------------------------------------------------

    // Issue the Software Product ID Exit code, thus returning the
    // 39VF640X to the normal operation.
    *sysAddress(0x5555) = 0x00AA;  // write data 0x00AA to device addr 0x5555
    *sysAddress(0x2AAA) = 0x0055;  // write data 0x0055 to device addr 0x2AAA
    *sysAddress(0x5555) = 0x00F0;  // write data 0x00F0 to device addr 0x5555
    Delay_150_Nano_Seconds();   // Tida Max 150ns for 39VF640X
                                    
    return (ReturnStatus);
}


/************************************************************************/
/* PROCEDURE:   CFI_Query                                               */
/*                                                                      */
/* This procedure should be used to query for CFI information           */
/*                                                                      */
/* Input:                                                               */
/*          Src	Source address to store CFI_Query data string		*/
/*                                                                      */
/* Output:                                                              */
/*          None                                                        */
/************************************************************************/
void CFI_Query(WORD *Src)
{ 
    //  Issue the CFI Query entry code to 39VF640X
    *sysAddress(0x5555) = 0x00AA;  // write data 0x00AA to device addr 0x5555
    *sysAddress(0x2AAA) = 0x0055;  // write data 0x0055 to device addr 0x2AAA
    *sysAddress(0x5555) = 0x0098;  // write data 0x0098 to device addr 0x5555
    Delay_150_Nano_Seconds();     // insert delay time = Tida

    // ----------------------------------------------------------
    //  Perform all CFI operations here:
    //  CFI_Query_address is from 0010H--0034H

    for (WORD index = 0x0010; index <= 0x0034; index++)
    {
     	 *Src = *sysAddress(index);
         ++Src;
	// CFI query data is stored in user-defined memory space.
    }
    // ----------------------------------------------------------

        // Issue the CFI Exit code thus returning the 39VF640X
        // to the read operating mode

    *sysAddress(0x5555) = 0x00AA;  // write data 0x00AA to device addr 0x5555
    *sysAddress(0x2AAA) = 0x0055;  // write data 0x0055 to device addr 0x2AAA
    *sysAddress(0x5555) = 0x00F0;  // write data 0x00F0 to device addr 0x5555
    Delay_150_Nano_Seconds();     // insert delay time = Tida
}


/************************************************************************/
/* PROCEDURE:   SecID_Query                                             */
/*                                                                      */
/* This procedure should be used to query for Security ID information.  */
/*                                                                      */
/* Input:                                                               */
/*          SST_SecID	Source address to store SST SecID string	*/
/*          User_SecID	Source address to store User SecID string	*/
/*                                                                      */
/* Output:                                                              */
/*          None                                                        */
/************************************************************************/
void SecID_Query(WORD *SST_SecID, WORD *User_SecID)
{
         //  Issue the SecID Entry code to 39VF640X

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲3atv精品一区二区三区| 韩日欧美一区二区三区| 91麻豆自制传媒国产之光| 国产亚洲综合av| 精品一区二区免费看| 欧美一级欧美一级在线播放| 天堂一区二区在线免费观看| 欧美日韩一级黄| 亚洲国产乱码最新视频| 在线观看www91| 亚洲国产精品一区二区www| 欧美午夜片在线看| 一区二区国产盗摄色噜噜| 91麻豆精品在线观看| 亚洲欧美一区二区三区久本道91| av电影在线不卡| 亚洲女同ⅹxx女同tv| 色综合色综合色综合| 一区二区国产视频| 欧美日韩三级在线| 日韩专区一卡二卡| 日韩视频免费观看高清完整版| 亚洲成人动漫一区| 在线成人高清不卡| 日本va欧美va瓶| 精品三级av在线| 国产老妇另类xxxxx| 国产欧美一区二区三区鸳鸯浴| 国产精一区二区三区| 国产精品三级在线观看| 91视频在线看| 亚洲国产精品久久不卡毛片 | 国内外精品视频| 久久嫩草精品久久久精品一| 成人性色生活片免费看爆迷你毛片| 国产精品电影一区二区| 日本丰满少妇一区二区三区| 三级久久三级久久| 日韩欧美123| 粉嫩aⅴ一区二区三区四区| 自拍视频在线观看一区二区| 91久久精品国产91性色tv| 日韩电影免费在线| 欧美精品一区二区不卡 | 成人午夜电影网站| 亚洲欧美偷拍三级| 欧美男生操女生| 国内精品国产成人国产三级粉色| 国产精品剧情在线亚洲| 精品视频在线看| 国产尤物一区二区在线| 中文字幕在线一区免费| 欧美日韩久久一区二区| 国产乱码一区二区三区| 一区二区三区丝袜| 日韩欧美中文一区| 91在线精品一区二区三区| 日韩激情av在线| 久久久久久久久久久久电影 | 欧美国产激情一区二区三区蜜月| 在线一区二区观看| 九色|91porny| 又紧又大又爽精品一区二区| 精品久久一区二区| 色综合色狠狠综合色| 久久精品国产99| 亚洲乱码精品一二三四区日韩在线| 欧美精品亚洲一区二区在线播放| 国产一区不卡精品| 亚洲国产精品久久艾草纯爱| 久久精品人人做人人爽97| 欧美日韩三级视频| 成人开心网精品视频| 免费亚洲电影在线| 亚洲三级在线看| 精品999在线播放| 欧美怡红院视频| 豆国产96在线|亚洲| 日韩av电影免费观看高清完整版| 一区视频在线播放| 日韩精品一区二区三区四区| 色偷偷久久一区二区三区| 国产精品羞羞答答xxdd| 久草这里只有精品视频| 一区二区三区免费观看| 中日韩免费视频中文字幕| 日韩午夜在线影院| 欧美午夜电影一区| 成人黄色在线视频| 韩国成人精品a∨在线观看| 五月综合激情网| 亚洲日本va午夜在线电影| 久久蜜桃av一区二区天堂| 538在线一区二区精品国产| 99精品桃花视频在线观看| 国产酒店精品激情| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲国产精品精华液网站| 亚洲色图色小说| 国产精品久久久爽爽爽麻豆色哟哟 | 在线观看日韩电影| 成人性生交大片免费看中文网站| 久久精品国产亚洲高清剧情介绍| 亚洲成人av在线电影| 亚洲欧美激情一区二区| 国产精品午夜在线观看| 久久伊99综合婷婷久久伊| 日韩女优视频免费观看| 91精品国产综合久久久蜜臀粉嫩 | 亚洲图片欧美激情| 国产精品视频一二三区| xnxx国产精品| 日韩精品一区二区三区在线观看 | 欧美在线啊v一区| 91麻豆精东视频| 成人av在线一区二区三区| 国产成人在线电影| 国产一区二三区| 激情五月婷婷综合| 国模一区二区三区白浆| 看片的网站亚洲| 久久精品久久久精品美女| 日韩福利视频导航| 天天免费综合色| 五月婷婷另类国产| 日日夜夜免费精品| 日韩国产一区二| 毛片av一区二区| 麻豆成人91精品二区三区| 免费人成在线不卡| 久久99最新地址| 国产一区啦啦啦在线观看| 黄色资源网久久资源365| 伦理电影国产精品| 国产一区二区三区蝌蚪| 国产在线国偷精品产拍免费yy| 久久99久久精品欧美| 精品一区二区免费在线观看| 韩国成人福利片在线播放| 国产在线日韩欧美| 国产成人啪午夜精品网站男同| 丁香婷婷综合色啪| 91免费看片在线观看| 在线区一区二视频| 欧美日韩电影在线| 欧美一区二区三区免费大片| 精品久久五月天| 国产欧美综合色| 亚洲三级电影全部在线观看高清| 夜夜精品浪潮av一区二区三区| 亚洲夂夂婷婷色拍ww47| 肉色丝袜一区二区| 国产剧情在线观看一区二区| 成人手机电影网| 色婷婷av一区二区三区gif| 欧美猛男gaygay网站| 日韩一级成人av| 国产日韩欧美综合在线| 亚洲四区在线观看| 亚洲午夜免费福利视频| 美国十次综合导航| 成人少妇影院yyyy| 在线免费观看成人短视频| 欧美精品久久天天躁| 精品av综合导航| 日韩毛片视频在线看| 偷窥少妇高潮呻吟av久久免费| 久久97超碰国产精品超碰| 成年人午夜久久久| 欧美老肥妇做.爰bbww视频| 日韩欧美激情一区| 国产精品人成在线观看免费| 一区二区三区欧美亚洲| 久久国内精品自在自线400部| 丁香啪啪综合成人亚洲小说| 91极品美女在线| 欧美精品一区二区三区在线| 成人免费小视频| 日本不卡一区二区三区高清视频| 国产精品18久久久久久vr| 欧美视频一区二区| 国产喂奶挤奶一区二区三区| 一区二区在线观看不卡| 理论电影国产精品| 色天使色偷偷av一区二区| 欧美成人国产一区二区| 亚洲精品乱码久久久久久| 免费成人美女在线观看.| 91在线精品秘密一区二区| 欧美一区二区二区| 亚洲欧美日韩国产手机在线 | 欧美日韩小视频| 国产午夜一区二区三区| 亚洲成人av一区| 国产91综合网| 7777女厕盗摄久久久| 中文字幕一区二区三区蜜月| 久久国产生活片100| 色婷婷综合久久久中文字幕| 欧美精品一区二区蜜臀亚洲|