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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? m25p64.c

?? umon bootloader source code, support mips cpu.
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*
***************************************************************************
*                  Copyright (c) 2005 vBridge Microsystem, Inc.  
*                        Unpublished & Not for Publication
*                               All Rights Reserved                   
*   
* File        :                      
*                                                                         
* Description :    
*             
* Date        : Aug 11, 2005                                                           
***************************************************************************
*/


#include "config.h"

#ifdef INCLUDE_SIF_FLASH
#ifdef INCLUDE_FLASH

#include "sif.h"
#include "m25p64.h"
#include "cli.h"
#include "boot.h"
#include "bios.h"
#include "flash.h"

#define INTEL_DT28F128J5		0x00890018
#define INTEL_28F640			0x00890017
#define INTEL_DT28F640J5		0x00890015
#define ST_M58LW064D		0x00200017
#define ST_M25P64			0x00172020

unsigned char printf (char *pcFmt,...);
typedef unsigned char uchar;
//char WaitPressKey(void);



/*
***************************************************************************
*                              SifInit
*
* Description: Initialize the serial flash interface.
*
* Arguments  : 
*
* Return     : 
*
* Note(s)    : 
***************************************************************************
*/
void SflashSifInit(void)
{   
   while(SifBusyRead());      // If a transaction doesn't end, 
                                            // the initialization cannot be started.

   SifTimingRegSet(SIF_SI_TIMING_RISING, SIF_SI_TIMING_FALLING, SIF_CLK_POL_IDLE1, \
	  	   SIF_CS_WIDTH_OFF_NONE, SIF_CS_DLY_2CLK, SIF_CS_OFF_2CLK, \
  		   SIF_GAP_NONE, SIF_BGAP_1BIT, 5 /* clk_div */);
    SifIntrDis();                             // Disable the SIF interrupt.
}

/*
***************************************************************************
*                             SflashReadByte
*
* Description: Read byte from the serial flash.
*
* Arguments  : start_addr    is the start address.
*              data          is the data pointer.
*              number        is the number to be read. Counted by bytes.
*
* Return     : none.
*
* Note(s)    : 
***************************************************************************
*/
void SflashReadByte(int start_addr, char *data, int number)
{   
    int i;
    
    SflashWaitTillReady();        // Wait till the internal Program, 
                                  // Erasure, & Status Register Write complete
    
    SifModeRegSet(SIF_CBUS_MODE, SIF_CS_n0, SIF_CTL_SEL_8BIT, SIF_ADD_SEL_3BYTE, \
                  SIF_READ, 0 /* sID */, 1/* blen */);
    SifCommandSet(SIF_INSTR_READ);    // Write the read instruction into the register.
    SifAddrSet(start_addr);   // Write the start address into the register.    
                              // Do not need set the address every time,
                              // because the adress register will add by blen automatically.
                              
    for(i = 0; i < number; i++) {
        SifStart();           // Start SPI operation. 
        while(SifBusyRead());
        *data++ = SifDataRead();	        
    }
}

/*
*********************************************************************************************
*                                       SflashReadWord
*
* Description: Read 4-byte from the serial flash.
*
* Arguments  : start_addr    is the start address.
*              data          is the data pointer.
*              number        is the number to be read. Counted by words.
*
* Return     : none.
*
* Note(s)    : Add on Feb 21
*********************************************************************************************
*/
void SflashReadWord(int start_addr, int *data, int number)
{   
    int i,step,process;
    
    SflashWaitTillReady();        // Wait till the internal Program, 
                                  // Erasure, & Status Register Write complete
    
    SifModeRegSet(SIF_CBUS_MODE, SIF_CS_n0, SIF_CTL_SEL_8BIT, SIF_ADD_SEL_3BYTE, \
                  SIF_READ, 0 /* sID */, 4/* blen */);
    SifCommandSet(SIF_INSTR_READ);    // Write the read instruction into the register.
    SifAddrSet(start_addr);   // Write the start address into the register.    
                              // Do not need set the address every time,
                              // because the adress register will add by blen automatically.
   // step = number/100;
  //  process = step;                          
    for(i = 0; i < number; i++) {
        SifStart();           // Start SPI operation. 
        while(SifBusyRead());
        *data++ = SifDataRead();
/*
	if(i=process)
	{
		printf(".");
		process += step;
	}*/
    }
}

/*
*********************************************************************************************
*                                       SflashReadStatus
*
* Description: Read the status registers.
*
* Arguments  : 
*
* Return     : none.
*
* Note(s)    : 
*********************************************************************************************
*/
char SflashReadStatus(void)
{   
    int i;
    
    while(SifBusyRead());       // If a transaction doesn't end, new one cannot be started.
                                   
    SifModeRegSet(SIF_CBUS_MODE, SIF_CS_n0, SIF_CTL_SEL_8BIT, SIF_ADD_SEL_NONE, \
                  SIF_READ, 0 /* sID */, 1 /* blen */);	
    SifCommandSet(SIF_INSTR_RDSR);            // Write the read instruction into the register.
    SifStart();                               // Start SPI operation.

    while(SifBusyRead());
    
    return(SifDataRead());	
}

/*
*********************************************************************************************
*                                       SflashReadID
*
* Description: Read byte from the serial flash.
*
* Arguments  : 
*
* Return     : none.
*
* Note(s)    : 
*********************************************************************************************
*/
int SflashReadID(void)
{   
    SflashWaitTillReady();        // Wait till the internal Program, 
                                  // Erasure, & Status Register Write complete
    
    SifModeRegSet(SIF_CBUS_MODE, SIF_CS_n0, SIF_CTL_SEL_8BIT, SIF_ADD_SEL_NONE, \
                  SIF_READ, 0 /* sID */, 3/* blen */);
    SifCommandSet(SIF_INSTR_RDID);    // Write the read instruction into the register.
                              
    SifStart();           // Start SPI operation. 
    while(SifBusyRead());
    return  SifDataRead();	    
}

/*
*********************************************************************************************
*                                       SflashProgByte
*
* Description: Program the serial flash.
*
* Arguments  : start_addr    is the start address.
*              data          is the data pointer
*              number        is the number to be programmed. Counted by bytes.                            
*
* Return     : none.
*
* Note(s)    : number does not have limited.
*********************************************************************************************
*/
void SflashProgByte(int start_addr, char *data, int number)
{
    int i;	

    while(SifBusyRead());       // If a transaction doesn't end, new one cannot be started.
    
    for(i = 0; i < number; i++) {
    	SflashWriteEn();
    
        SifModeRegSet(SIF_CBUS_MODE, SIF_CS_n0, SIF_CTL_SEL_8BIT, SIF_ADD_SEL_3BYTE, \
                      SIF_WRITE, 0 /* sID */, 1 /* blen */);		
        SifCommandSet(SIF_INSTR_PP);            
      
        SifAddrSet(start_addr++);       
        
        SifDataWrite(*data++);	
        SifStart();           // Start SPI operation. 
        while(SifBusyRead());
    }    
}

/*
*********************************************************************************************
*                                       SflashProgWord
*
* Description: Program the serial flash by word.
*
* Arguments  : start_addr    is the start address.
*              data          is the data pointer
*              number        is the number to be programmed. Counted by words.                            
*
* Return     : none.
*
* Note(s)    : number does not have limited.
*********************************************************************************************
*/
void SflashProgWord(int start_addr, int *data, int number)
{
    int i,step,process;

    step = number/100;
    process = 0;

    while(SifBusyRead());       // If a transaction doesn't end, new one cannot be started.
    
    
    for(i = 0; i < number; i++) {
    	SflashWriteEn();
    
        SifModeRegSet(SIF_CBUS_MODE, SIF_CS_n0, SIF_CTL_SEL_8BIT, SIF_ADD_SEL_3BYTE, \
                      SIF_WRITE, 0 /* sID */, 4 /* blen */);		
        SifCommandSet(SIF_INSTR_PP);            
      
        SifAddrSet(start_addr);       
        start_addr += 4;
        
        SifDataWrite(*data++);	
        SifStart();           // Start SPI operation. 
        while(SifBusyRead());

	  if(i==process)
	  {
		putchar('=');
		process += step;
	  }
    }    
}

/*
*********************************************************************************************
*                                       SflashSecErase
*
* Description: Erase a specific sector.
*
* Arguments  : sector_no   is the sector number to be erased.
*
* Return     : none.
*
* Note(s)    : 
*********************************************************************************************
*/
void SflashSecErase(int sector_no)
{
    SflashWriteEn();	
    
    SifModeRegSet(SIF_CBUS_MODE, SIF_CS_n0, SIF_CTL_SEL_8BIT, SIF_ADD_SEL_3BYTE, \
                  SIF_WRITE, 0 /* sID */, 0 /* blen */);		
    SifCommandSet(SIF_INSTR_SE);            
    SifAddrSet(sector_no * SIF_PAGES_PER_SECTOR * SIF_PAGE_SIZE);                   // Write the start address into the register.
    SifStart();                                // Start SPI operation.
}

/*
*********************************************************************************************
*                                       SflashBulkErase
*
* Description: Erase the whole chip.
*
* Arguments  : none.
*
* Return     : none.
*
* Note(s)    : 
*********************************************************************************************
*/
void SflashBulkErase(void)
{
    SflashWriteEn();	
    
    SifModeRegSet(SIF_CBUS_MODE, SIF_CS_n0, SIF_CTL_SEL_8BIT, SIF_ADD_SEL_NONE, \
                  SIF_WRITE, 0 /* sID */, 0 /* blen */);		
    SifCommandSet(SIF_INSTR_BE);            
    SifStart();                               // Start SPI operation.
}

/*
*********************************************************************************************
*                                       SflashWriteEn

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91看片淫黄大片一级| 日本va欧美va精品| 国产成人在线视频播放| 91蜜桃在线观看| 天天操天天综合网| 亚洲国产日韩精品| 国产成人综合视频| 欧美日韩一区二区在线观看视频 | 欧美一区二区三区在线电影| 久久久久久久久99精品| 亚洲与欧洲av电影| 成人涩涩免费视频| 久久人人爽人人爽| 亚洲精品免费看| 国产不卡视频在线观看| 日韩欧美国产精品| 亚洲狠狠爱一区二区三区| 国产成人免费在线| 久久久久国色av免费看影院| 国产1区2区3区精品美女| 国产精品国产三级国产aⅴ无密码| 欧美日本一区二区| 91玉足脚交白嫩脚丫在线播放| 欧美精品乱码久久久久久| 亚洲美女在线国产| 懂色av一区二区夜夜嗨| 精品久久久久久无| 日欧美一区二区| 欧美精品色一区二区三区| 亚洲国产精品一区二区www| www.亚洲激情.com| 国产精品毛片久久久久久| 国产91精品一区二区| 久久九九影视网| 国内国产精品久久| 日韩精品在线网站| 国产一区二区三区在线看麻豆| 日韩欧美亚洲国产精品字幕久久久| 亚洲成av人**亚洲成av**| 91色porny蝌蚪| 色拍拍在线精品视频8848| 色94色欧美sute亚洲线路一ni | 日韩精品国产精品| 欧美裸体一区二区三区| 免费人成精品欧美精品| 日韩欧美色电影| 国产精品18久久久久久久网站| 久久理论电影网| 成人免费视频网站在线观看| 国产精品欧美一区喷水| aaa国产一区| 亚洲精品精品亚洲| 在线播放欧美女士性生活| 久久精品99久久久| 中文av一区特黄| 91福利在线播放| 蜜桃免费网站一区二区三区| 亚洲精品在线三区| av电影天堂一区二区在线| 一区二区三区高清| 日韩欧美自拍偷拍| www.欧美日韩| 亚洲国产成人91porn| 日韩视频在线永久播放| 欧美色视频在线| 一区二区三区精品在线观看| 欧美美女网站色| 国产一区啦啦啦在线观看| 久久国产综合精品| 午夜精品久久久久影视| 国产一区在线看| 亚洲乱码国产乱码精品精98午夜| 久久久久久久久久久99999| 精品少妇一区二区三区在线播放| 欧美日韩国产另类一区| 在线观看成人免费视频| 色诱视频网站一区| 色吊一区二区三区| 91啪亚洲精品| 91在线免费播放| 97久久精品人人做人人爽 | 另类成人小视频在线| 日产国产高清一区二区三区| 亚洲国产精品久久久久秋霞影院 | 亚洲综合激情小说| 亚洲一区视频在线| 亚洲mv在线观看| 日韩精品一二三区| 裸体歌舞表演一区二区| 蜜臀va亚洲va欧美va天堂| 蜜乳av一区二区| 国模套图日韩精品一区二区 | 国产精品久久久久久一区二区三区 | 在线免费观看日本欧美| 精品污污网站免费看| 欧美日韩你懂得| 884aa四虎影成人精品一区| 欧美一区三区四区| 欧美xxxx老人做受| 国产精品网曝门| 亚洲在线中文字幕| 麻豆精品视频在线观看| 国产精品 欧美精品| av亚洲精华国产精华| 91精品1区2区| 日韩一区二区电影| 国产精品三级视频| 亚洲成a人v欧美综合天堂下载 | 日韩视频免费观看高清完整版| 精品日韩一区二区三区| 国产精品乱码一区二三区小蝌蚪| 亚洲天堂免费看| 视频一区中文字幕国产| 国产精品18久久久久久久久 | 韩国v欧美v日本v亚洲v| 97久久人人超碰| 日韩女优av电影| 中文字幕在线观看一区二区| 午夜精品久久久久久久久| 国产精品18久久久久久久久 | 欧美一级欧美三级| 国产精品久久久久国产精品日日| 亚洲五月六月丁香激情| 国产乱国产乱300精品| 色婷婷av一区二区三区软件| 日韩欧美国产麻豆| 亚洲欧美精品午睡沙发| 精品一区二区三区免费| 91电影在线观看| 久久精品亚洲麻豆av一区二区| 一区二区三区在线影院| 黄色精品一二区| 色综合色狠狠天天综合色| 91精品国产福利| 亚洲乱码中文字幕| 国产精品66部| 欧美xxxxx裸体时装秀| 亚洲大片免费看| gogo大胆日本视频一区| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲资源在线观看| 成人激情午夜影院| 精品日韩在线一区| 秋霞午夜鲁丝一区二区老狼| 色哟哟亚洲精品| 中文在线一区二区| 国产一区二区三区免费播放| 欧美片网站yy| 亚洲免费资源在线播放| 国产成人av资源| 精品日韩在线一区| 毛片一区二区三区| 91精品婷婷国产综合久久 | 国产人伦精品一区二区| 麻豆国产91在线播放| 777a∨成人精品桃花网| 亚洲激情图片一区| 99久久免费精品高清特色大片| 久久婷婷色综合| 久99久精品视频免费观看| 欧美一区二区三区喷汁尤物| 亚洲成国产人片在线观看| 欧美日韩精品一区二区三区四区| 亚洲欧美国产毛片在线| www.欧美精品一二区| 国产精品国产自产拍高清av王其| 国产一区在线精品| 久久久噜噜噜久久中文字幕色伊伊| 蜜桃视频免费观看一区| 日韩欧美在线网站| 麻豆成人久久精品二区三区红 | 91香蕉视频在线| 中文字幕日韩一区| 色综合久久综合| 一区二区三区影院| 欧美日韩久久一区| 免费成人在线影院| 日韩免费电影一区| 国产制服丝袜一区| 中文字幕不卡在线观看| 成人动漫在线一区| 亚洲美女偷拍久久| 欧美日韩精品专区| 韩国视频一区二区| 国产欧美日韩不卡免费| 成人av网站在线观看| 亚洲欧美国产高清| 这里只有精品视频在线观看| 蜜乳av一区二区三区| 久久久国产精品不卡| 成人动漫av在线| 亚洲美女屁股眼交| 7777精品久久久大香线蕉| 免费欧美日韩国产三级电影| 久久免费午夜影院| 91在线看国产| 热久久久久久久| 国产精品视频九色porn| 欧美这里有精品| 激情综合五月婷婷|