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

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

?? i28f128.c

?? intel 28f128 flash驅(qū)動(dòng)程序
?? C
字號(hào):
#include "../../h/tffs/flflash.h"
#include "../../h/tffs/backgrnd.h"
#include "ads860.h"
#include "stdio.h"

#define PROGRAM_TIMEOUT		1000000L
#define TMPL_BUFFER_SIZE          0x20         /* bytes */ 
#define TMPL_WRITE_TO_BUFFER      0x00E8
#define TMPL_SET_READ_CONFIG      0x0003
#define BIG_ENDIAN_ARCHITECTURE		1
#define TMPL_BLOCK_MASK		(0x20000-1)
 #define TMPL_CONFIRM               0x00D0
 #define TMPL_READ_ARRAY            0x00ff 
 
#define I28F128_FLASH	0x8918
#define TMPL_STATUS_READY         0x0080

#define SETUP_ERASE	0x2020
#define SETUP_WRITE	0x4040
#define CLEAR_STATUS	0x5050
#define READ_STATUS	0x7070
#define READ_ID 	0x9090
#define SUSPEND_ERASE	0xb0b0
#define CONFIRM_ERASE	0xd0d0
#define	RESUME_ERASE	0xd0d0
#define READ_ARRAY	0xffff


#define	WSM_VPP_ERROR	0x08
#define WSM_ERROR	0x38
#define WSM_SUSPENDED	0x40
#define WSM_READY	0x80

#define GSR_ERROR	0x20

#define both(word)	(vol.interleaving == 1 ? (word) : (word) & ((word) >> 8))
#define any(word)	((word) | ((word) >> 8))
#define mIsStatusReady(A) ( ( A & TMPL_STATUS_READY ) == TMPL_STATUS_READY )

static FLStatus i28f128WordSize(FLFlash vol)
{
  FlashWPTR flashPtr = (FlashWPTR) flMap(vol.socket,0);
  flashPtr[0] = CLEAR_STATUS;
  flashPtr[0] = READ_ID;
  /* We leave the first chip in Read ID mode, so that we can		*/
  /* discover an address wraparound.					*/

  for (vol.noOfChips = 1;	/* Scan the chips */
       vol.noOfChips < 2000;  /* Big enough ? */
       vol.noOfChips++) {
    flashPtr = (FlashWPTR) flMap(vol.socket,vol.noOfChips * vol.chipSize);

    if (flashPtr[0] == 0x0089 && flashPtr[1] == 0x0018)
      break;	  /* We've wrapped around to the first chip ! */

    flashPtr[0] = READ_ID;
    if (!(flashPtr[0] == 0x0089 && flashPtr[1] == 0x0018))
      break;
    flashPtr[0] = CLEAR_STATUS;
    flashPtr[0] = READ_ARRAY;
  }

  flashPtr = (FlashWPTR) flMap(vol.socket,0);
  flashPtr[0] = READ_ARRAY;
printf("wordsize noofchips=%d,hubing\n",vol.noOfChips);
  return flOK;
}

UINT16 TMPL_ReadStatus ( void )
{
    UINT16 status;
    UINT16 *tmpPtr;
    tmpPtr = (UINT16 *)FLASH_BASE_ADRS;
    *tmpPtr = READ_STATUS;
    status = *tmpPtr;
    return( status );

}
UINT8 TMPL_WaitUntilReady ( UINT32 timeout )
{

   while( timeout )
   {

      if ( mIsStatusReady( TMPL_ReadStatus() ) )
	  {
	     return( TRUE );
	  }

      timeout--;
   }

   return( FALSE );

}
static FLStatus i28f128Write(FLFlash vol,
			   CardAddress address,
			   const void FAR1 *buffer,
			   int length,
			   FLBoolean overwrite)
{
  /* Set timeout ot 5 seconds from now */
  UINT16     writedata;
   UINT16         numitems; 
   UINT32         cmndaddress; 
   UINT32         numwritebytes;
   UINT32         byteswritten;
   UINT8 *buf1;
  FlashWPTR flashPtr;
 #ifdef HUBING_DEBUG 
  printf("enter flash write procedure,address is %d,length is %d,hubing\n",address,length);
#endif
  if (flWriteProtected(vol.socket))
    return flWriteProtect;

#ifdef HUBING_DEBUG   
printf("no protect,hubing\n");
#endif
   cmndaddress = address;
buf1 = (UINT8 *)buffer;

   if ( ( address + length ) > FLASH_SIZE )
   {
	return flBadLength;      
   }

   if ( cmndaddress & 0x01 )
   {
      cmndaddress --;
   }

   if ( !TMPL_WaitUntilReady( PROGRAM_TIMEOUT ) )
   {
	return flDriveNotReady;
   }
   else
   {

      /* if (start address is not TMPL_BUFFER_SIZE-byte aligned ) */

      if ( ( address % TMPL_BUFFER_SIZE ) != 0 )
      {
         /* if ( buffer size is > TMPL_BUFFER_SIZE ) or 
            ( buffer crosses block boundary ) */
         if ( ( length > TMPL_BUFFER_SIZE ) ||
		      ( ( address & 0x1 ) && ( length >= TMPL_BUFFER_SIZE ) ) ||
              ( ( address + length -1 ) > ( address | TMPL_BLOCK_MASK) ) 
            )
		 {
		    /* write partial buffer */
		    numwritebytes = ( TMPL_BUFFER_SIZE - ( address % TMPL_BUFFER_SIZE ) );
         }
		 else
		 {
		    /* write all remaining bytes */
		    numwritebytes = length;
		 }

         byteswritten = numwritebytes;

		 flashPtr = (FlashWPTR) flMap(vol.socket,cmndaddress);
		 *flashPtr = TMPL_WRITE_TO_BUFFER;
		 /*
		 TMPL_WriteF( cmndaddress, TMPL_WRITE_TO_BUFFER );
		*/	
		 numitems = numwritebytes / sizeof(UINT16);

		 if ( ( ( numwritebytes % sizeof(UINT16) ) != 0 ) ||
		        ( ( numwritebytes > 0x01 ) && ( address & 0x01 ) ) )
		 {
	        numitems++;
		 }
		flashPtr = (FlashWPTR) flMap(vol.socket,cmndaddress);
		 *flashPtr = numitems-1;	

		 
	
		 if ( numwritebytes > 0 ) /* while more data to write */ 
		 {
		    while ( numwritebytes > 0 ) /* if more bytes still to write */ 
			{
			   if ( ( address & 0x1 ) != 0 ) /* if destination address is odd */ 
			   {
                      address--;
#if (BIG_ENDIAN_ARCHITECTURE)
					  writedata = (UINT16) *buf1;
					  writedata |= 0xff00;
#else /* little endian */ 
					  writedata = *((UINT16 *)buf1);
					  writedata = ( writedata << 8 ) | 0x00ff;
#endif
					  numwritebytes--;
					  buf1++;
			   }
			   else /* destination address is even */ 
			   {
#if BIG_ENDIAN_ARCHITECTURE
				      /* grab first byte */	
					  writedata = (UINT16)( *buf1 );
					  writedata = ( ( writedata << 8 ) & 0xff00 );
					  /* grab second byte */	
					  writedata = writedata | ( (UINT16) *(buf1+1) );
#else /* little endian architecture */
					  /* grab 2 bytes */
					  writedata = *( (UINT16 *)buf1 ); 
#endif /* BIG_ENDIAN_ARCHITECTURE */ 

					  if ( numwritebytes == 1 ) 
					  {
#if BIG_ENDIAN_ARCHITECTURE
					     writedata |= 0x00ff;
#else
						 writedata |= 0xff00;
#endif
						 numwritebytes--;
					  }
					  else
					  {
					     numwritebytes -= sizeof(UINT16);
					  }

					  buf1 += sizeof(UINT16);
			   }

			   flashPtr = (FlashWPTR) flMap(vol.socket,address);
			   *flashPtr = writedata; 
			   address += sizeof(UINT16);
		    }
		 }
		flashPtr = (FlashWPTR) flMap(vol.socket,cmndaddress);
		 *flashPtr = TMPL_CONFIRM ;

         if ( !TMPL_WaitUntilReady( PROGRAM_TIMEOUT ) )
         {
            
            return flWriteFault;
         }

         length -= byteswritten;

      } /* end if  ( ( address % TMPL_BUFFER_SIZE )  != 0 ) ) */

      /* while bytes remain */
      while ( length != 0 )
	  {
         /* if TMPL_BUFFER_SIZE bytes remain */
         if ( length > TMPL_BUFFER_SIZE )
		 {
		    /* write full TMPL_BUFFER_SIZE-byte buffer */
		    numwritebytes = TMPL_BUFFER_SIZE;
		 }
		 /* else */
		 else
		 {
		    /* write partial buffer */
		    numwritebytes = length;
         }
         /* end if */

         byteswritten = numwritebytes;

         cmndaddress = address;

		 
		 flashPtr = (FlashWPTR) flMap(vol.socket,cmndaddress);
		 *flashPtr = TMPL_WRITE_TO_BUFFER ;
	
		 numitems = numwritebytes / sizeof(UINT16);

		 if ( ( numwritebytes % sizeof(UINT16) ) != 0 )
		 {
	        numitems++;
		 }

		 
		 flashPtr = (FlashWPTR) flMap(vol.socket,cmndaddress);
		 *flashPtr = numitems-1 ;
	
		 if ( numwritebytes > 0 ) /* while more data to write */ 
		 {
		    while ( numwritebytes > 0 ) /* if more bytes still to write */ 
			{ /* address is known even at this point */
#if BIG_ENDIAN_ARCHITECTURE
		       /* grab first byte */	
			   writedata = (UINT16)( *buf1 );
			   writedata = ( ( writedata << 8 ) & 0xff00 );
			   /* grab second byte */	
			   writedata = writedata | ( (UINT16) *(buf1+1) );
#else /* little endian architecture */
			   /* grab 2 bytes */
			   writedata = *( (UINT16 *)buf1 ); 
#endif /* BIG_ENDIAN_ARCHITECTURE */ 

			   if ( numwritebytes == 1 ) 
			   {
#if BIG_ENDIAN_ARCHITECTURE
			      writedata |= 0x00ff;
#else
				  writedata |= 0xff00;
#endif
				  numwritebytes--;
			   }
			   else
			   {
			      numwritebytes -= sizeof(UINT16);
			   }

			   buf1 += sizeof(UINT16);
			   
			   

			   flashPtr = (FlashWPTR) flMap(vol.socket,address);
			   *flashPtr = writedata; 
			   address += sizeof(UINT16);
		    }
		 }

		 flashPtr = (FlashWPTR) flMap(vol.socket,cmndaddress);
		 *flashPtr = TMPL_CONFIRM ;
		

         if ( !TMPL_WaitUntilReady( PROGRAM_TIMEOUT ) )
         {
            
            return flWriteFault;
         }

         length -= byteswritten;

      } /* end while length != 0 ) */

   }/* end if ( !TMPL_WaitUntilReady( PROGRAM_TIMEOUT ) ) */

   
   /* return device to read array mode */
 
	flashPtr = (FlashWPTR) flMap(vol.socket,FLASH_BASE_ADRS);
	*flashPtr = TMPL_READ_ARRAY ;

   return flOK;
  
}
static FLStatus i28f128Erase(FLFlash vol,
			   int firstErasableBlock,
			   int numOfErasableBlocks)
{
  FLStatus status = flOK;	/* unless proven otherwise */
  int iBlock;
#ifdef HUBING_DEBUG
printf("now is erasing,hubing\n");
printf("erase first block=%x,num of block is %x\n",firstErasableBlock,numOfErasableBlocks);
#endif
  if (flWriteProtected(vol.socket))
    return flWriteProtect;


  for (iBlock = 0; iBlock < numOfErasableBlocks && status == flOK; iBlock++) {
    FlashWPTR currPtr;
    int i;
    FLBoolean finished;

    FlashWPTR flashPtr = (FlashWPTR)
	   flMap(vol.socket,(firstErasableBlock + iBlock) * vol.erasableBlockSize);

    for (i = 0, currPtr = flashPtr;
	 i < vol.interleaving;
	 i += 2, currPtr++) {
      *currPtr = SETUP_ERASE;
      *currPtr = CONFIRM_ERASE;
    }

    do {
      finished = TRUE;
      for (i = 0, currPtr = flashPtr;
	   i < vol.interleaving;
	   i += 2, currPtr++) {
	*currPtr = READ_STATUS;

	if (any(*currPtr) & WSM_SUSPENDED) {
	  *currPtr = RESUME_ERASE;
	  finished = FALSE;
	}
	else if (!(both(*currPtr) & WSM_READY))
	  finished = FALSE;
	else {
	  if (any(*currPtr) & WSM_ERROR) {
	    status = (any(*currPtr) & WSM_VPP_ERROR) ? flVppFailure : flWriteFault;
	    *currPtr = CLEAR_STATUS;
	  }
	  *currPtr = READ_ARRAY;
	}
      }
    } while (!finished);
  }


  return status;
}
FLStatus UnLockAllBlocks()
{
	UINT16 *ptr;
	ptr = (UINT16 *)FLASH_BASE_ADRS;
	*ptr = 0x6060;
	*ptr = 0xD0D0;
	if ( !TMPL_WaitUntilReady( PROGRAM_TIMEOUT ) )
   	{
   		printf("unlock err");
		return flDriveNotReady;
   	}
   	printf("unlock all blocks,hubing\n");
   	*ptr = 0xffff;
   	return flOK;
}

static FLStatus i28f128Read(FLFlash vol,CardAddress address,const void FAR1 *buffer,int length,int a)
{
	UINT8 *flashPtr;
	UINT16 worddata;
	int num;
	UINT8 * ramptr;
	flashPtr = (UINT8 *)flMap(vol.socket,address);
	
	ramptr = (UINT8 *)buffer;
	num = 0;
	
	if(length==0)
		return flOK;
	if( ((UINT32)flashPtr)&1 )
	{
		flashPtr--;
		worddata = *((UINT16 *)flashPtr);
		*ramptr++ = (UINT8)(worddata&0xff);
		flashPtr+=2;
		num++;
	}
	for(;num<length-1;num+=2)
	{
		worddata = *((UINT16 *)flashPtr);
		*ramptr++ = (UINT8)((worddata>>8)&0xff);
		*ramptr++ = (UINT8)(worddata&0xff);
		flashPtr += 2;
	}
	if(num != length)
	{
		worddata = *((UINT16 *)flashPtr);
		*ramptr = (UINT8)((worddata>>8)&0xff);
	}
}

FLStatus i28f128Identify(FLFlash vol)
{
  FlashWPTR flashPtr;


	if(UnLockAllBlocks())
	{
		printf("unlock wrong\n");
		return flWriteProtect;
	}
printf("now to identify\n");
  flSetWindowBusWidth(vol.socket,16);/* use 16-bits */
  flSetWindowSpeed(vol.socket,150);  /* 120 nsec. */
  flSetWindowSize(vol.socket,2);	/* 8 KBytes */

  flashPtr = (FlashWPTR) flMap(vol.socket,0);
  printf("the flash base address is %x,hubing\n",flashPtr);

  vol.noOfChips = 1;
  flashPtr[0] = READ_ID;
  if (flashPtr[0] == 0x0089&& flashPtr[1] == 0x0018) {
    /* Word mode */
    vol.type = I28F128_FLASH;
    vol.interleaving = 1;
    flashPtr[0] = READ_ARRAY;
    printf("get the correct flash id\n");
  }
  else {
    /* Use standard identification routine to detect byte-mode */
    flIntelIdentify(&vol, NULL,0);
    if (vol.interleaving == 1)
      vol.type = NOT_FLASH;	/* We cannot handle byte-mode interleaving-1 */
      printf("kao,enter other flash config\n");
  }

  if (vol.type == I28F128_FLASH) {
    vol.chipSize = 0x1000000L;
    vol.erasableBlockSize = 0x20000L * vol.interleaving;
/*    checkStatus(vol.interleaving == 1 ?
		i28f128WordSize(&vol) :
		flIntelSize(&vol, NULL,0));*/

    /* Register our flash handlers */
    vol.write = i28f128Write;
    vol.erase = i28f128Erase;
    vol.read = i28f128Read;
printf("flash function assigned\n");
    return flOK;
  }
  else {
    return flUnknownMedia; 	/* not ours */
  }
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
秋霞影院一区二区| 日韩久久久精品| 67194成人在线观看| 26uuu另类欧美亚洲曰本| 中文字幕一区不卡| 亚欧色一区w666天堂| 精品一区二区免费视频| 色综合天天性综合| 欧美一区二区三区在线| 国产精品色哟哟| 亚洲午夜激情网站| 国产剧情一区二区三区| 欧美亚洲自拍偷拍| 欧美va亚洲va在线观看蝴蝶网| 国产精品国产三级国产a| 丝袜国产日韩另类美女| 国产精品99久久久| 欧美日韩日日摸| 国产亚洲精品超碰| 亚洲成在人线在线播放| 国产成人免费9x9x人网站视频| 欧美日韩一本到| 久久精品水蜜桃av综合天堂| 亚洲3atv精品一区二区三区| 国产999精品久久久久久绿帽| 欧美亚洲禁片免费| 国产亚洲精品aa| 亚洲成人你懂的| www.成人网.com| 欧美精品一区在线观看| 亚洲综合色噜噜狠狠| 国产成人精品亚洲午夜麻豆| 欧美日韩aaa| 亚洲靠逼com| 国产精品系列在线观看| 在线成人午夜影院| **欧美大码日韩| 国产一区二区三区四区五区入口| 欧美三级欧美一级| 日韩一区在线免费观看| 国产一区二区不卡老阿姨| 欧美日本一区二区三区四区| 亚洲男人的天堂一区二区| 91精品国产色综合久久不卡蜜臀 | 综合久久久久久久| 九色porny丨国产精品| 欧亚洲嫩模精品一区三区| 欧美激情资源网| 极品销魂美女一区二区三区| 欧美日韩和欧美的一区二区| 1024国产精品| 成人小视频在线观看| 久久色.com| 精品在线播放免费| 日韩一区二区在线观看| 亚洲va中文字幕| 在线免费精品视频| 亚洲日本在线天堂| 成人av免费网站| 国产精品久久久久久久久免费樱桃 | 精品亚洲成a人| 日韩区在线观看| 青娱乐精品视频在线| 欧美日韩国产首页在线观看| 一区二区三区在线视频播放| 91在线精品秘密一区二区| 欧美国产日韩a欧美在线观看 | 国产午夜精品一区二区三区嫩草| 麻豆精品一区二区三区| 日韩三级精品电影久久久| 麻豆91免费看| 亚洲精品一区在线观看| 国产一区二区伦理| 欧美精品一区二区蜜臀亚洲| 国产在线播放一区三区四| 久久久久久久久蜜桃| 国产成人精品免费看| 欧美激情一区二区在线| proumb性欧美在线观看| 亚洲乱码国产乱码精品精可以看| 色妞www精品视频| 亚洲国产精品久久不卡毛片| 欧美久久久久久蜜桃| 图片区小说区国产精品视频| 欧美一区二区国产| 狠狠色丁香久久婷婷综| 中文字幕巨乱亚洲| 91麻豆精品一区二区三区| 亚洲已满18点击进入久久| 欧美久久久久免费| 久久精品国产99| 国产欧美日韩久久| 99久久综合99久久综合网站| 亚洲综合偷拍欧美一区色| 欧美网站一区二区| 男男gaygay亚洲| 久久蜜桃av一区二区天堂 | 国产精品免费看片| av午夜一区麻豆| 亚洲午夜久久久久久久久电影院| 欧美电影影音先锋| 极品少妇xxxx精品少妇| 国产精品欧美一区二区三区| 在线精品视频免费播放| 日韩国产高清在线| 久久品道一品道久久精品| caoporen国产精品视频| 亚洲一区二区三区国产| 日韩精品一区二| 成人黄页在线观看| 亚洲资源在线观看| 精品久久久久久久久久久久久久久 | 久久久久国产精品人| 色噜噜夜夜夜综合网| 美国一区二区三区在线播放| 中文字幕人成不卡一区| 欧美人伦禁忌dvd放荡欲情| 国产电影精品久久禁18| 亚洲高清不卡在线观看| 久久综合狠狠综合久久综合88 | 亚洲精品视频在线| 日韩欧美专区在线| av在线综合网| 免费一级欧美片在线观看| 亚洲视频资源在线| 日韩欧美中文字幕一区| 色屁屁一区二区| 国产福利91精品一区| 亚洲成a人片在线不卡一二三区 | 一区二区三区欧美久久| 69堂成人精品免费视频| 国产又黄又大久久| 亚洲在线视频一区| 精品国产乱码久久久久久1区2区| 成人黄色小视频| 亚洲欧美一区二区不卡| 26uuu国产电影一区二区| 99精品久久只有精品| 免费成人在线观看| 亚洲欧美偷拍另类a∨色屁股| 日韩色视频在线观看| 91网址在线看| 久久国产精品99精品国产| 中文字幕亚洲综合久久菠萝蜜| 91久久精品一区二区| 国产河南妇女毛片精品久久久| 亚洲无人区一区| 国产精品三级久久久久三级| 欧美一级日韩免费不卡| 99精品欧美一区二区蜜桃免费| 免费观看日韩av| 亚洲精品乱码久久久久久黑人| 2024国产精品| 色综合网站在线| 成人av在线资源| 精品在线视频一区| 午夜影院在线观看欧美| 国产精品乱码人人做人人爱| 精品成人在线观看| 欧美日韩午夜影院| av在线播放一区二区三区| 久久国产精品区| 国产精品女上位| 国产视频一区在线观看| 日韩一区二区在线观看视频播放| 欧洲另类一二三四区| 国产一区二区三区美女| 麻豆精品一区二区三区| 亚洲一区二区偷拍精品| 亚洲天天做日日做天天谢日日欢 | 亚洲高清不卡在线| 久久精品国产99国产| 亚洲一区二区三区精品在线| 国产精品成人一区二区三区夜夜夜| 日韩一级成人av| 在线观看91av| 欧美体内she精高潮| 91小视频免费观看| 99精品久久免费看蜜臀剧情介绍| 国产精品一区二区三区四区| 美腿丝袜亚洲一区| 日韩av电影天堂| 性感美女极品91精品| 亚洲国产综合91精品麻豆| 亚洲精品中文字幕乱码三区| 国产精品免费观看视频| 中文字幕电影一区| 国产日韩欧美综合在线| 精品91自产拍在线观看一区| 91精品国产综合久久香蕉的特点 | 久久久不卡网国产精品一区| 精品欧美一区二区久久| 欧美一区二区三区在线电影| 5566中文字幕一区二区电影| 制服丝袜av成人在线看| 欧美一区二区啪啪| 欧美一区二区三区喷汁尤物| 91精品国产福利在线观看 | 亚洲国产视频a| 国产精品女主播av|