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

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

?? nandmtd.c

?? nandMtd源碼 適用于WIN CE操作系統
?? C
?? 第 1 頁 / 共 3 頁
字號:
    if((status != flOK) || (tffscmp(temp, flReadback, writeNow) != 0))
      { status = flWriteFault;  break; }
#endif

    length -= writeNow;
    address += writeNow;
    temp += writeNow;

    /* align at sector */
    writeNow = page;
  }

  return flOK ;
}


/*----------------------------------------------------------------------*/
/*		          n a n d E r a s e				*/
/*									*/
/* Erase number of blocks. This routine will be registered as the	*/
/* erase routine for this MTD.						*/
/*                                                                      */
/* Author: 王輝              Date:2004-8-21                            */
/*									*/
/* Parameters:								*/
/*	vol		: Pointer identifying drive			*/
/*	blockNo		: First block to erase.				*/
/*	blocksToErase   : Number of blocks to erase.			*/
/*									*/
/* Returns:                                                          	*/
/*	FLStatus	: 0 on success, otherwise failed.		*/
/*									*/
/*----------------------------------------------------------------------*/

static FLStatus nandMTDErase( FLFlash vol,
			 int blockNo,              /* start' block (0 .. chipNoOfBlocks-1)*/
			 int blocksToErase)        /* Number of blocks to be erased */
{
  int i;
  FLStatus status   = flOK;
  
  NAND_InitECC(); /*初始化ECC編/解碼器*/
  NAND_ENABLE_CE(); /*使能NAND Flash的片選*/
  NAND_ENABLE_CONT();   /*置位NFCONT第0位(Mode),NAND Flash controller enable*/
  NAND_BW8();       /*NFCONF的第0位(BusWidth(R/W))置0,即8位總線寬度*/


  if (flWriteProtected(vol.socket))
    return flWriteProtect;

 /* blockNo %= thisVars->noOfBlocks; */                       /* within flash device  */

  if ( blockNo + blocksToErase > thisVars->noOfBlocks )    /* accross device boundary */
    return flBadParameter;
  
  #ifdef DEBUG_PRINT
    DEBUG_PRINT("firstBlock = 0x%x, numOfBlock = 0x%x\n", blockNo, blocksToErase);
  #endif

  for ( i=0; i < blocksToErase; i++, 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)
    {    
      status = flWriteFault;  /* erase operation failed */
    }
  
  #ifdef DEBUG_PRINT
    DEBUG_PRINT("ERASE: blockNo = 0x%x\n", blockNo);
  #endif
   
    if (status != flOK)       /* reset flash device and abort */
    {                              
    #ifdef DEBUG_PRINT
      DEBUG_PRINT("Debug: erase failed in K9F1208U0C.\n");
    #endif
      WRITE_COMMAND(RESET_FLASH);
      waitForReady();

      break ;
    }
  }       /* block loop */

  return status;
}


/*----------------------------------------------------------------------*/
/*		          c d s n M a p					*/
/*									*/
/* Map through buffer. This routine will be registered as the map	*/
/* routine for this MTD.						*/
/*									*/
/* Parameters:								*/
/*	vol	: Pointer identifying drive		                */
/*	address	: Flash address to be mapped.				*/
/*	length	: number of bytes to map.				*/
/*									*/
/* Returns:                                                          	*/
/* 	Pointer to the buffer data was mapped to.			*/
/*									*/
/*----------------------------------------------------------------------*/

static void FAR0 * nandMTDMap ( FLFlash vol,
			    CardAddress address,
			    int length )
{
  /* address -= 0x1000000;*/
  nandMTDRead(&vol,address,thisBuffer,length, 0);
  vol.socket->remapped = TRUE;
  return (void FAR0 *)thisBuffer;
}


/*----------------------------------------------------------------------*/
/*		          i s K n o w n M e d i a			*/
/*									*/
/* Check if this flash media is supported. Initialize relevant fields	*/
/* in data structures.							*/
/*									*/
/* Parameters:								*/
/*	vol		: Pointer identifying drive			*/
/*	vendorId_P	: vendor ID read from chip.			*/
/*	chipId_p	: chip ID read from chip.			*/
/*	dev		: dev chips were accessed before this one.	*/
/*									*/
/* Returns:                                                          	*/
/* 	TRUE if this media is supported, FALSE otherwise.		*/
/*									*/
/*----------------------------------------------------------------------*/
#define KM29N16000_FLASH 0xec64
#define KM29N32000_FLASH 0xece5
#define K9F6408X0C_FLASH  0xece6
#define K9F1208U0M_FLASH 0xec76
 

static FLBoolean isKnownMedia( FLFlash vol,
			 unsigned short vendorId_p,
			 unsigned short chipId_p,
			 int dev )
{
  if (dev == 1)
  {
    thisVars->vendorID = vendorId_p;  /* remember for next chips */
    thisVars->chipID = chipId_p;

    if (vendorId_p == 0xEC)                  /* Samsung */
    {
      switch (chipId_p)
      {
	case 0x64:                         /* 2M */
	case 0xEA:
	  vol.type = KM29N16000_FLASH ;
	  vol.chipSize = 0x200000L;
	  return TRUE;

	case 0xE5:
	case 0xE3:				/* 4M */
	  vol.type = KM29N32000_FLASH;
	  vol.flags |= BIG_PAGE;
	  vol.chipSize = 0x400000L;
	  return TRUE;

	case 0xE6:				/* 8M */
	  vol.type = K9F6408X0C_FLASH;
	  vol.flags |= BIG_PAGE;
	  vol.chipSize = 0x800000L;
	  return TRUE;
	  
	case 0x76:				/* 64M */
	  vol.type = K9F1208U0M_FLASH;
	  vol.flags |= BIG_PAGE;
	  vol.chipSize = 0x4000000L;
	  return TRUE;
      }
    }
    
  }
  else		     /* dev != 0*/
  if( (vendorId_p == thisVars->vendorID) && (chipId_p == thisVars->chipID) )
    return TRUE ;
 
  return FALSE ;
}


/*----------------------------------------------------------------------*/
/*		          r e a d F l a s h I D				*/
/*									*/
/* Read vendor and chip IDs, count flash devices. Initialize relevant	*/
/* fields in data structures.						*/
/*									*/
/* Parameters:								*/
/*	vol		: Pointer identifying drive			*/
/*	interface	: Pointer to window.				*/
/*	dev		: dev chips were accessed before this one.	*/
/*									*/
/* Returns:                                                          	*/
/* 	TRUE if this media is supported, FALSE otherwise.		*/
/*									*/
/*----------------------------------------------------------------------*/

static int readFlashID (FLFlash vol, int dev)
{
  unsigned char vendorId_p, chipId_p;

  NAND_ENABLE_CONT();       /*NFCONF的第0位(BusWidth(R/W))置0,即8位總線寬度*/
  
  
  NAND_INIT1();
  NAND_INIT();
  NAND_ENABLE_CE(); /*使能NAND Flash的片選*/
  NAND_ENABLE_CONT();   /*置位NFCONT第0位(Mode),NAND Flash controller enable*/
  NAND_BW8();       /*NFCONF的第0位(BusWidth(R/W))置0,即8位總線寬度*/
  
  WRITE_COMMAND(RESET_FLASH);
  waitForReady();
  
  NAND_InitECC(); /*初始化ECC編/解碼器*/
  
  WRITE_COMMAND(READ_ID);

  WRITE_ADDRESS(0x00);  /* Address. 1cycle */

  READ_DATA(vendorId_p);
  READ_DATA(chipId_p);

  if (isKnownMedia(&vol, vendorId_p, chipId_p, dev) != TRUE)    /* no chip or diff.*/
    return  FALSE ;                                         /* type of flash  */

	    /* set flash parameters*/

  if ( dev == 1 )
  {
    thisVars->pageAreaSize   = 0x100 * vol.interleaving;
    thisVars->pageSize = (vol.flags & BIG_PAGE ? 0x200 : 0x100) * vol.interleaving;
    thisVars->tailSize = (vol.flags & BIG_PAGE ? 16 : 8) * vol.interleaving;
    thisVars->pageMask = thisVars->pageSize - 1 ;
    vol.erasableBlockSize = PAGES_PER_BLOCK * thisVars->pageSize;
    thisVars->noOfBlocks = (unsigned short)( (vol.chipSize * vol.interleaving)
				/ vol.erasableBlockSize ) ;
  }

  return TRUE ;
}


/*----------------------------------------------------------------------*/
/*		     n a n d M T D I d e n t i f y			*/
/*									*/
/* Identify flash. This routine will be registered as the		*/
/* identification routine for this MTD.                                 */
/*									*/
/* Returns:                                                          	*/
/*	FLStatus: 0 on success, otherwise failed.			*/
/*									*/
/*----------------------------------------------------------------------*/

FLStatus nandMTDIdentify(FLFlash vol)
{
#ifdef DEBUG_PRINT
  DEBUG_PRINT("Debug: Entering K9F1208U0C identification routine\n");
#endif

  flSetWindowBusWidth(vol.socket,8);/* use 16-bits */
  flSetWindowSpeed(vol.socket,120);  /* 120 nsec. */
  flSetWindowSize(vol.socket,2);	/* 4 KBytes */

  vol.mtdVars = &mtdVars[flSocketNoOf(vol.socket)];
  /* get pointer to buffer (we assume SINGLE_BUFFER is not defined) */
  thisVars->buffer = flBufferOf(flSocketNoOf(vol.socket));

  vol.interleaving = 1;
  vol.noOfChips = 1;  /* 以1為起始 */
  
  if(readFlashID(&vol, vol.noOfChips) != TRUE )
  {
  #ifdef DEBUG_PRINT
    DEBUG_PRINT("Debug: did not identify K9F1208U0C flash media.\n");
  #endif
    return flUnknownMedia;
  }
  
  /* Register our flash handlers */
  vol.write = nandMTDWrite;
  vol.erase = nandMTDErase;
  vol.read = nandMTDRead;
  vol.map = nandMTDMap;

  vol.flags |= SUSPEND_FOR_WRITE;

#ifdef DEBUG_PRINT
  DEBUG_PRINT("Debug: Identified K9F1208U0C.\n");
#endif

  return flOK;
}


#if	FALSE
/*----------------------------------------------------------------------*/
/*                      f l R e g i s t e r N A N D 			*/
/*									*/
/* Registers this MTD for use						*/
/*									*/
/* Parameters:                                                          */
/*	None								*/
/*                                                                      */
/* Returns:								*/
/*	FLStatus	: 0 on success, otherwise failure		*/
/*----------------------------------------------------------------------*/

FLStatus flRegisterNAND(void)
{
  if (noOfMTDs >= MTDS)
    return flTooManyComponents;

  mtdTable[noOfMTDs++] = nandMTDIdentify;

  return flOK;
}
#endif	/* FALSE */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃视频免费观看一区| 亚洲美女淫视频| 亚洲综合免费观看高清在线观看| 国产一区二区精品在线观看| 欧美日韩亚洲综合在线| 久久九九久精品国产免费直播| 国内成人免费视频| 国产亚洲一二三区| 高清不卡一二三区| 中文字幕一区二区三区乱码在线| jlzzjlzz欧美大全| 久久精品国产77777蜜臀| 2023国产精品| 蜜桃一区二区三区四区| 欧美色倩网站大全免费| 亚洲精品福利视频网站| 成人av影院在线| 丝袜美腿一区二区三区| 精品国产乱码久久久久久影片| 久久精品久久久精品美女| www国产成人免费观看视频 深夜成人网| 精品在线播放免费| 免费看日韩a级影片| 精品国产三级电影在线观看| 欧美伊人久久大香线蕉综合69| 亚洲成av人片观看| 日韩美女一区二区三区| 成人动漫av在线| 亚洲免费看黄网站| 欧美精品一区二区三区久久久| 国产91精品欧美| 狠狠色丁香久久婷婷综合_中| 天天色 色综合| 国产精品久久久久国产精品日日| 韩国一区二区三区| 中文字幕日韩欧美一区二区三区| 91精品国产综合久久久久久 | 国产精品日日摸夜夜摸av| aa级大片欧美| 久久福利视频一区二区| 日本欧美一区二区三区| 中文字幕在线观看一区| 91精品国产综合久久久久久久| 成+人+亚洲+综合天堂| 五月激情综合色| 天堂资源在线中文精品| 18涩涩午夜精品.www| 欧美激情一区二区三区不卡 | 国产成人8x视频一区二区 | 欧美天天综合网| www.视频一区| 日韩中文字幕亚洲一区二区va在线 | 欧美va亚洲va国产综合| 欧美午夜寂寞影院| 色婷婷久久99综合精品jk白丝| 国产伦精品一区二区三区在线观看| 婷婷开心激情综合| 久久99国产精品久久99| 精品一区二区三区欧美| 国产一区二区电影| 懂色av中文字幕一区二区三区| 性感美女极品91精品| 日精品一区二区| 久久精品国产77777蜜臀| 精品一区二区三区久久久| 日本va欧美va欧美va精品| 国产一区二区在线视频| 国产成人午夜高潮毛片| 在线免费不卡电影| 26uuu国产日韩综合| 亚洲毛片av在线| 国产自产2019最新不卡| 日本道精品一区二区三区| 678五月天丁香亚洲综合网| 国产精品久久久久久久岛一牛影视 | 欧美性猛交xxxxxx富婆| 精品国产1区二区| 国产精品婷婷午夜在线观看| 奇米777欧美一区二区| 99久久精品国产观看| 欧美日韩一区二区三区不卡| 久久综合九色综合欧美98| 亚洲综合久久av| av不卡免费电影| 久久久99精品免费观看| 亚洲欧美另类小说| 一本大道久久精品懂色aⅴ| 日韩美一区二区三区| 日韩国产成人精品| 欧美综合在线视频| 国产精品色呦呦| 99久久免费精品| 国产精品网站在线观看| 国产在线播放一区| 最新不卡av在线| 蜜桃av一区二区在线观看| 99久久99久久精品国产片果冻| 自拍偷自拍亚洲精品播放| 懂色av一区二区三区免费看| 欧美成人女星排行榜| 国产一区二区精品在线观看| 久久美女艺术照精彩视频福利播放| 自拍偷拍国产精品| 国产激情一区二区三区四区| 久久综合九色综合欧美亚洲| 成人福利视频在线看| 欧美肥妇毛茸茸| 午夜精品久久久久久久| 91女神在线视频| 午夜精品久久久久影视| 成人性生交大片免费看中文 | 欧美www视频| 日本一不卡视频| 中文字幕精品一区 | 日韩精品一区二区三区在线观看| 亚洲一区二区av在线| 久久嫩草精品久久久精品| 狠狠久久亚洲欧美| 久久久久9999亚洲精品| av一区二区三区黑人| 男女性色大片免费观看一区二区| 久久影音资源网| 一本高清dvd不卡在线观看| 午夜欧美在线一二页| 亚洲精品视频在线观看网站| 2021中文字幕一区亚洲| av网站免费线看精品| 亚洲自拍偷拍av| 国产精品三级在线观看| 精品国产欧美一区二区| 91国偷自产一区二区三区观看 | 国产一区91精品张津瑜| 18成人在线观看| 欧美精品久久天天躁| 91精品国产综合久久精品app | 久久综合五月天婷婷伊人| 欧美日韩国产系列| 99r国产精品| 麻豆91精品91久久久的内涵| 国产精品美女久久福利网站| 日韩午夜av电影| 欧美一区二区观看视频| 欧美日韩一区中文字幕| 欧美挠脚心视频网站| 69堂国产成人免费视频| 欧美日韩一区二区三区在线看 | 五月婷婷激情综合| 悠悠色在线精品| 欧美激情艳妇裸体舞| 夜夜精品视频一区二区| 精品一区二区影视| 美女视频一区二区三区| 人人狠狠综合久久亚洲| 一区二区日韩av| 亚洲一区二区三区四区中文字幕| 乱中年女人伦av一区二区| 日日欢夜夜爽一区| 欧美性猛交xxxx乱大交退制版| 欧美人牲a欧美精品| 欧美一级艳片视频免费观看| 欧美性xxxxxx少妇| 欧美日韩高清一区二区| 国产女主播在线一区二区| 免费精品视频在线| 国产成人精品一区二区三区四区| 国产999精品久久| 日韩欧美色综合| 一区二区三区加勒比av| 国产精品一区专区| 日韩一区二区中文字幕| 中文字幕在线免费不卡| 亚洲欧美日韩国产成人精品影院| 激情综合色综合久久| 91九色02白丝porn| 国产免费成人在线视频| 麻豆成人av在线| 久久不见久久见免费视频7 | 欧美一级xxx| 亚洲不卡在线观看| 在线观看www91| 日本一区二区三区四区| 免费看黄色91| 日韩精品一区二区三区视频播放| 亚洲线精品一区二区三区八戒| 精品亚洲成a人| 欧美mv和日韩mv的网站| 美女久久久精品| 日韩欧美综合一区| 极品销魂美女一区二区三区| 日韩女优av电影在线观看| 久久久久久久久岛国免费| 久久国产尿小便嘘嘘尿| 在线不卡免费欧美| 午夜日韩在线观看| 在线视频国内自拍亚洲视频| 亚洲国产精品成人综合色在线婷婷| 国产美女精品在线| 久久久av毛片精品| 精品无人区卡一卡二卡三乱码免费卡| 欧美一区中文字幕|