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

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

?? nandmtd.c

?? nandMtd源碼 適用于WIN CE操作系統
?? C
?? 第 1 頁 / 共 3 頁
字號:
#include "tffs/flflash.h"
#include "tffs/reedsol.h"
#include "stdio.h"
#include "config.h"

/*與sysTffs.c中定義相同*/
#define	FLASH_BASE_ADRS			(0x00000000)
#define	FLASH_SIZE		    	(0x04000000)    /*NANDFlash大小*/
#define   FLASH_BOOT_ADRS			(0x00000000)
#define	FLASH_BOOT_SIZE		    (0x00000000)

/*2440 datasheet上的寄存器地址*/
#define WRITE_COMMAND(val)  (*(volatile char *)0x4E000008 = (char)(val))
#define WRITE_ADDRESS(val)  (*(volatile char *)0x4E00000C = (char)(val))
#define WRITE_DATA(val)     (*(volatile char *)0x4E000010 = (char)(val)) 
#define READ_DATA(val)      ((char)(val) = *(volatile char *)0x4E000010)
#define NFCONT	            (*(volatile unsigned *)0x4e000004)
#define NFCONF              (*(volatile unsigned *)0x4e000000)
#define NFSTAT(val)         ((int)(val) = *(volatile int *)0x4E000020)

#define NAND_INIT1()	{NFCONF|=0xfff0;}
#define NAND_INIT()	{NFCONT =0x0011;}

#define NAND_InitECC()	        {NFCONT &= ~(1<<4);}  /*將NFCONT寄存器的值的第4位置1,Initialize ECC decoder/encoder*/
#define NAND_DISABLE_CE()	{NFCONT |= (1<<1);}   /*將NFCONT寄存器的值的第1位置1,Disable chip select*/
#define NAND_ENABLE_CE()	{NFCONT &= ~(1<<1);}  /*將NFCONT寄存器的值的第1位置0,enable chip select*/
#define NAND_ENABLE_CONT()     {NFCONT |= (1<<0);}   /*將NFCONT寄存器的值的第0位置1,NAND Flash Ctroller Enable*/
#define NAND_DISABLE_CONT()      {NFCONT &= ~(1<<0);}  /*將NFCONT寄存器的值的第0位置0,NAND Flash Ctroller Disable*/
#define NAND_BW8()              {NFCONF |= (1<<0);}   /*將NFCONF寄存器的值的第0位置1,8-bit bus*/
#define NAND_BW16()             {NFCONF &= ~(1<<0);}  /*將NFCONF寄存器的值的第0位置0,16-bit bus*/


#define PAGES_PER_BLOCK     32      /*32 pages per block on a single chip*/
     

/*Flash IDs*/
/*#define K9F1208UOM_FLASH    0xec76 */

/* Flash commands:*/
#define SERIAL_DATA_INPUT   0x80
#define READ_MODE           0x00
#define READ_MODE_2         0x50
#define RESET_FLASH         0xff
#define SETUP_WRITE         0x10
#define SETUP_ERASE         0x60
#define CONFIRM_ERASE       0xd0
#define READ_STATUS         0x70
#define READ_ID             0x90

#define FAIL                0x01
#define RB                  0x40

/*#define DEBUG_PRINT         printf*/

/* commands for moving flash pointer to areeas A,B or C of page*/
typedef enum  { AREA_A = READ_MODE, AREA_B = 0x01, AREA_C = READ_MODE_2 } PointerOp;

/* customization for this MTD*/

typedef struct {
  unsigned short	vendorID;
  unsigned short	chipID;
  unsigned short      	pageSize ;              /* all....................*/
  unsigned short      	pageMask ;              /* ...these...............*/
  unsigned short      	pageAreaSize ;          /* .......variables.......*/
  unsigned short      	tailSize ;              /* .............interleave*/
  unsigned short      	noOfBlocks ;            /* total erasable blocks in flash device*/
  FLBuffer  		*buffer;		/* buffer for map through buffer */
} Vars;

static Vars mtdVars[DRIVES];

#define thisVars   ((Vars *) vol.mtdVars)
#define thisBuffer (thisVars->buffer->data)


		    /* Auxiliary methods  */
/* 測試函數 */

/*----------------------------------------------------------------------*/
/*              checkAllBlock                                           */
/*----------------------------------------------------------------------*/

void checkAllBlock(void)
{
    int i, j;
    int address;
    unsigned char data;
    
    for(i=0; i<1024; i++)
    {
    	for(j=0; j<2; j++)
    	{
    	    address = 0x2000 * i + 0x200 * j + 0x06;
    	    WRITE_COMMAND(READ_MODE_2);
    	    WRITE_ADDRESS((unsigned char)address);
            WRITE_ADDRESS((unsigned char)(address >> 9));
            WRITE_ADDRESS((unsigned char)(address >> 17));
            WRITE_ADDRESS((unsigned char)(address >> 25));
            
            waitForReady();
            READ_DATA(data);
            
            if(data != 0xFF)
            {
            	printf("Block %d is a invalid block", i);
                break;
            }
        }
    }
}

/*----------------------------------------------------------------------*/
/*              f l a s h R e a d                                       */
/*----------------------------------------------------------------------*/

void flashRead(int address, int length, int mode)
{
    int i, bit8;
    unsigned char data;
    
   printf("readFlash: address = 0x%x, length = %d\n", address, length);
    if(mode == 0)
    {
    bit8 = (unsigned short)address & 0x100;
    if(bit8 == 0)
        WRITE_COMMAND(0x00);
    else
        WRITE_COMMAND(0x01);
    }
    else
        WRITE_COMMAND(0x50);
    WRITE_ADDRESS((unsigned char)address);
    WRITE_ADDRESS((unsigned char)(address >> 9));
    WRITE_ADDRESS((unsigned char)(address >> 17));
    WRITE_ADDRESS((unsigned char)(address >> 25));
    
    waitForReady();
    
    for(i=0; i<length; i++)
    {
        READ_DATA(data);
        printf("readFlash: data = 0x%x\n", data); 
    }
}

/*----------------------------------------------------------------------*/
/*              f l a s h W r i t e                                     */
/*----------------------------------------------------------------------*/

void flashWrite(int address, int len, unsigned char data, int mode)
{
    int i, bit8;
    
    /*printf("readFlash: address = 0x%x, length = %d\n", address, length);*/
    
    if(mode == 0)
    {
    bit8 = (unsigned short)address & 0x100;
    if(bit8 == 0)
        WRITE_COMMAND(0x00);
    else
        WRITE_COMMAND(0x01);
    }
    else
        WRITE_COMMAND(0x50);
        
    address += 1;
    WRITE_COMMAND(SERIAL_DATA_INPUT);
    
    WRITE_ADDRESS((unsigned char)address);
    WRITE_ADDRESS((unsigned char)(address >> 9));
    WRITE_ADDRESS((unsigned char)(address >> 17));
    WRITE_ADDRESS((unsigned char)(address >> 25));
    
    for(i=0; i<len; i++)
    {
        WRITE_DATA(data);
       /* printf("WriteFlash: data = 0x%x\n", data);*/
    }
    WRITE_COMMAND(SETUP_WRITE);
    
    waitForReady();

    if(readStatus() & FAIL)
      return flWriteFault;
}

/*----------------------------------------------------------------------*/
/*              f l a s h E r a s e                                     */
/*----------------------------------------------------------------------*/

void flashErase(int blockNo)
{
    unsigned short pageNo = blockNo * PAGES_PER_BLOCK ;
    
    WRITE_COMMAND(SETUP_ERASE);
    
    WRITE_ADDRESS((unsigned char)pageNo);  /* A9 ~ A16 */
    WRITE_ADDRESS((unsigned char)(pageNo >> 8));            /* A17 ~ A22 */
    WRITE_ADDRESS((unsigned char)(pageNo >> 16));            /* A25 */

    WRITE_COMMAND(CONFIRM_ERASE);
    
    waitForReady();

    if(readStatus() & FAIL)
      return flWriteFault;
}


/*----------------------------------------------------------------------*/
/*              f l a s h E r a s e A l l                               */
/*----------------------------------------------------------------------*/

void flashEraseAll(void)
{
    int i;
    for(i=0; i<4096; i++)
    {
    	flashErase(i);
    }
}

/*  MTD函數 */ 

/*----------------------------------------------------------------------*/
/*              t f f s c p y 1 6                                       */
/*									*/
/* Move data in 16-bit words.                                           */
/*                                                                      */
/* Parameters:                                                          */
/*      dst             : destination buffer                            */
/*      src             : source buffer                                 */
/*      len             : bytes to move                                 */
/*                                                                      */
/*----------------------------------------------------------------------*/

static void tffscpy16 (unsigned char FAR0       *dst,
		       const unsigned char FAR0 *src,
		       int                      len)
{
  register int i = 0;

  /* move data in 16-bit words */
  for (i = 0;  i < (len >> 1);  i++)
    *((unsigned short *) dst + i) = *((unsigned short *) src + i);

  /* move last byte (if any) */
  if (len & 1)
    *(dst + len-1) = *(src + len-1);
}



/*----------------------------------------------------------------------*/
/*              t f f s s e t 1 6                                       */
/*									*/
/* Set data buffer in 16-bit words.                                     */
/*                                                                      */
/* Parameters:                                                          */
/*      dst             : destination buffer                            */
/*      val             : byte value tofill the buffer                  */
/*      len             : setination buffer size in bytes               */
/*                                                                      */
/*----------------------------------------------------------------------*/

static void tffsset16 (unsigned char FAR0 *dst,
		       unsigned char      val,
		       int                len)
{
  register unsigned short  wval = ((unsigned short)val << 8) | val;
  register int   i = 0;

  /* set data in 16-bit words */
  for (i = 0;  i < (len >> 1);  i++)
    *((unsigned short *) dst + i) = wval;

  /* set last byte (if any) */
  if (len & 1)
    *(dst + len-1) = val;
}

/*----------------------------------------------------------------------*/
/*                      w a i t F o r R e a d y				*/
/*									*/
/* Wait for the selected device to be ready.				*/
/*                                                                      */
/* Author: 王輝              Date: 2004-8-21                            */
/*									*/
/* Parameters:                                                          */
/*	   void                                      			*/
/*									*/
/* Returns:								*/
/*	   TRUE if device is ready                          		*/
/*                                                                      */
/*----------------------------------------------------------------------*/

FLBoolean waitForReady (void)
{
    int val;
    
    do
    {
        NFSTAT(val);
        val &= 0x01;    /* 讀NFSTAT第0位(RnB)狀態,判斷設備狀態 */
    } while(val == 0);
    return TRUE; 
}

/*----------------------------------------------------------------------*/
/*		          m a k e C o m m a n d				*/
/*									*/
/* Set Page Pointer to Area A, B or C in page.				*/
/*                                                                      */
/* Author: 王輝              Date:2004-8-21                            */
/*                                                                      */
/* Parameters:                                                          */
/*	vol     : Pointer identifying drive			        */
/*	cmd	: receives command relevant to area			*/
/*	addr	: receives the address to the right area.		*/
/*	modes	: mode of operation (EXTRA ...)				*/
/*                                                                      */
/*----------------------------------------------------------------------*/

static void makeCommand (PointerOp *cmd, CardAddress address, int modes)
{
    int bit8;

    if (modes & EXTRA)
      *cmd = AREA_C;
    else
      { 
      	bit8 = (unsigned short)address & 0x100;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产日韩在线一区模特| 日韩三级电影网址| 亚洲天堂精品在线观看| 97超碰欧美中文字幕| 一区二区三区日韩在线观看| 欧美视频三区在线播放| 天天综合网天天综合色| 精品日韩成人av| 国产精品一区二区久激情瑜伽| 日韩精品一区二区在线| 777色狠狠一区二区三区| 欧美大黄免费观看| 国产在线视频一区二区三区| 国产欧美一区二区精品忘忧草| 国产成人自拍网| 亚洲精品伦理在线| 欧美丰满一区二区免费视频| 精久久久久久久久久久| 国产精品成人午夜| 欧美日韩久久一区| 国产福利一区二区| 亚洲国产日产av| 久久亚洲精品小早川怜子| 99精品久久久久久| 欧美96一区二区免费视频| 国产清纯白嫩初高生在线观看91 | 成人激情视频网站| 一区二区高清视频在线观看| 91精品福利在线一区二区三区 | 成人91在线观看| 天天操天天干天天综合网| 久久免费看少妇高潮| 99久久伊人网影院| 毛片av中文字幕一区二区| 中文字幕亚洲不卡| 日韩欧美第一区| 欧洲一区在线观看| 成人晚上爱看视频| 蜜臀久久久99精品久久久久久| 中文字幕欧美一区| 精品欧美一区二区三区精品久久| a亚洲天堂av| 免费亚洲电影在线| 一区二区三区国产豹纹内裤在线| 精品国产百合女同互慰| 欧美视频自拍偷拍| 不卡的av网站| 国产精品资源站在线| 日韩精品一卡二卡三卡四卡无卡| 国产精品污网站| 欧美大片免费久久精品三p| 欧美日韩中文另类| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 一级日本不卡的影视| 国产网站一区二区三区| 日韩欧美自拍偷拍| 欧美日韩国产片| 欧美午夜精品久久久久久孕妇 | 国产精品91一区二区| 日韩高清中文字幕一区| 亚洲精品日产精品乱码不卡| 亚洲国产精品传媒在线观看| 日韩欧美国产一二三区| 欧美日韩一区中文字幕| 91精品1区2区| fc2成人免费人成在线观看播放| 国产精品18久久久久久vr| 精品制服美女丁香| 美日韩一区二区| 免费观看30秒视频久久| 日日夜夜免费精品| 图片区小说区国产精品视频| 亚洲综合激情网| 亚洲一区日韩精品中文字幕| 一区二区三区免费看视频| 亚洲欧洲日韩综合一区二区| 国产精品伦理一区二区| 综合欧美一区二区三区| 一区二区三区在线观看欧美| 亚洲精品成人精品456| 亚洲人成精品久久久久| 亚洲最新视频在线观看| 亚洲午夜一区二区三区| 亚洲国产欧美一区二区三区丁香婷| 亚洲欧美日韩小说| 一区二区三区四区不卡视频| 亚洲r级在线视频| 日本在线播放一区二区三区| 青椒成人免费视频| 国产呦萝稀缺另类资源| 成人深夜福利app| 91在线观看高清| 欧美色综合天天久久综合精品| 欧美天天综合网| 4438成人网| 久久久久国产精品人| 中文字幕在线观看一区二区| 一区在线观看视频| 亚洲.国产.中文慕字在线| 日本欧美韩国一区三区| 国产高清精品在线| 色综合久久88色综合天天| 欧美日韩一区二区不卡| 精品久久久三级丝袜| 一区二区三区在线视频免费| 精品久久国产字幕高潮| 国产精品人人做人人爽人人添| 日韩理论在线观看| 日韩专区中文字幕一区二区| 国产一区二区三区精品欧美日韩一区二区三区 | 国产一区999| 色婷婷精品久久二区二区蜜臀av | 奇米精品一区二区三区在线观看一| 裸体一区二区三区| 成人免费视频一区二区| 欧美日韩国产精品成人| 亚洲精品在线电影| 亚洲最大的成人av| 国产伦精品一区二区三区免费 | 国内精品自线一区二区三区视频| 成人综合日日夜夜| 欧美群妇大交群中文字幕| 26uuuu精品一区二区| 亚洲一区二区三区四区在线免费观看| 蜜桃视频第一区免费观看| 国产不卡视频在线观看| 欧美高清视频不卡网| 国产日韩高清在线| 日韩精品一区第一页| 一本久久精品一区二区| 2024国产精品| 日韩国产精品91| 欧日韩精品视频| 国产日韩v精品一区二区| 日韩成人精品视频| 欧美主播一区二区三区| 欧美激情在线观看视频免费| 蜜桃91丨九色丨蝌蚪91桃色| 日本韩国视频一区二区| 国产人成亚洲第一网站在线播放 | 亚洲欧美一区二区在线观看| 青青草国产成人99久久| 欧美亚洲图片小说| 亚洲男女毛片无遮挡| 国产成人精品1024| 26uuu久久天堂性欧美| 午夜免费久久看| 一本到三区不卡视频| 亚洲欧洲精品天堂一级| 99riav一区二区三区| 久久品道一品道久久精品| 免费国产亚洲视频| 欧美无人高清视频在线观看| 亚洲欧美激情视频在线观看一区二区三区| 国产精品一级在线| 日韩欧美的一区二区| 日韩在线一区二区三区| 91精品中文字幕一区二区三区| 亚洲男人的天堂网| 91美女蜜桃在线| 亚洲免费观看在线观看| 一本久道久久综合中文字幕 | 精品视频免费看| 亚洲一二三区视频在线观看| 色久综合一二码| 亚洲男人的天堂在线观看| 色婷婷国产精品久久包臀| 亚洲视频在线一区二区| 色综合视频一区二区三区高清| 中文字幕免费不卡在线| av中文字幕在线不卡| 亚洲天堂免费在线观看视频| 色婷婷综合五月| 亚洲一区二区三区在线播放 | 欧美岛国在线观看| 精品一区二区在线视频| 精品福利二区三区| 国产精品一区二区免费不卡| 国产精品亲子伦对白| 99视频精品免费视频| 亚洲色图欧洲色图| 欧美亚洲高清一区| 免费高清在线一区| wwww国产精品欧美| 91影视在线播放| 亚洲综合色视频| 日韩欧美国产精品| 成人一区二区三区在线观看| 亚洲欧洲av在线| 精品视频1区2区3区| 久久精品久久久精品美女| 337p粉嫩大胆色噜噜噜噜亚洲| www.欧美精品一二区| 亚洲午夜久久久久| 日韩视频在线你懂得| 成人午夜伦理影院| 一区二区免费看| 精品欧美一区二区在线观看| www.亚洲精品| 五月激情六月综合|