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

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

?? nf_drv2.c

?? usb開發(fā)資料源代碼分析 usb開發(fā)資料源代碼分析
?? C
?? 第 1 頁 / 共 2 頁
字號:
* PURPOSE:  This function reassign the block value in LUT (copy of LUT)
*           
*
*****************************************************************************
* NOTE:     
*           
*
*****************************************************************************/
void nf_reassign_block(void)
{
  data Uint16 start;
  data Uint32 address2;                        /* LUT Source address */
  data Uint16 logical_block_value;             /* logical block value to be reassigned */
  Byte pdata *ptr = &gl_buffer[0];            /* gl_buffer pointer */
  Byte data n_zone;                            /* zone counter */
  Byte data dummy;
  Byte data i, j;

  j = 0;
  /* Target address */
  address = (Uint32)(look_up_table_block) << 5;

  /* Source address */
  address2 = address_look_up_table;

  for (n_zone = 0; n_zone < NF_ZONE_MAX; n_zone++)
  {
    start = 0;
    do
    {
      Nf_wait_busy();
  
      /* Open look-up table in read mode */
      Nf_send_command(NF_READ_A_AREA_CMD);  /* First half array */
      Nf_send_address( 0x00);
      Nf_send_address ( ((Byte*)&address2)[3] );  /* 2nd address cycle         */
      Nf_send_address ( ((Byte*)&address2)[2] );  /* 3rd address cycle         */
      if (nf_device_type >= 64)              /* Size of card >= 64Mbytes ?*/
        Nf_send_address ( ((Byte*)&address2)[1] );/* 4th address cycle         */
      Nf_wait_busy();
  
      nf_upload_buffer();    

      /* Reassign logical block */  
      for (i=0; i < index_reassign; i++)
      {
        if (reassign_block[i].zone == n_zone)
        {
          logical_block_value = reassign_block[i].logical_block;
          if ( ( logical_block_value < (start + 128)) && (logical_block_value >= start) )
          {
            ptr = (2 * (logical_block_value & 0x7F));
            (*ptr++) = reassign_block[i].physical_block >> 8;
            (*ptr) = reassign_block[i].physical_block;
          }
        }
      }
  
  
      Nf_send_command(NF_READ_A_AREA_CMD);        /* First half array */
      Nf_send_command(NF_SEQUENTIAL_DATA_INPUT_CMD);
      Nf_send_address(0x00);
      Nf_send_address ( ((Byte*)&address)[3] );   /* 2nd address cycle         */
      Nf_send_address ( ((Byte*)&address)[2] );   /* 3rd address cycle         */
      if (nf_64)                                  /* Size of card >= 64Mbytes ?*/
        Nf_send_address ( ((Byte*)&address)[1] ); /* 4th address cycle         */
  
      /* Write 256 bytes from the buffer */
      nf_download_buffer();
  
      /* Valid the page programmation */
      Nf_send_command(NF_PAGE_PROGRAM_CMD);

      start += 128;

      /* Wait for R/B signal */
      Nf_wait_busy();
  
      /* Open look-up table in read mode */
      Nf_send_command(NF_READ_B_AREA_CMD);        /* Second half array */
      Nf_send_address(0x00);
      Nf_send_address ( ((Byte*)&address2)[3] );  /* 2nd address cycle         */
      Nf_send_address ( ((Byte*)&address2)[2] );  /* 3rd address cycle         */
      if (nf_64)                                  /* Size of card >= 64Mbytes ?*/
        Nf_send_address ( ((Byte*)&address2)[1] );/* 4th address cycle         */
      Nf_wait_busy();

      nf_upload_buffer();
      
      /* Reassign logical block */
      for (i = 0; i < index_reassign; i++)
      {
        if (reassign_block[i].zone == n_zone)
        {
          logical_block_value = reassign_block[i].logical_block;
          if ( ( logical_block_value < (start + 128)) && (logical_block_value >= start) )
          {
            ptr = (2 * (logical_block_value & 0x7F));
            (*ptr++) = reassign_block[i].physical_block >> 8;
            (*ptr) = reassign_block[i].physical_block;
          }

          if (start >= 896)
          {
            while ( (j < index_block_erased) && (block_to_be_erased[j] < ((Uint16)(n_zone + 1) << 10)))
            {
              dummy = 192 + index_block_used[j];

              gl_buffer[dummy++] = block_to_be_erased[j] >> 8;
              gl_buffer[dummy]   = block_to_be_erased[j];
              j++;
            }
          }

        }
      }

	  nf_send_w_cmd(MODE_CMDB,0);    
   
      /* Write 256 bytes from the buffer */
      nf_download_buffer();
  

      Nf_wr_byte(0xFF);
      Nf_wr_byte(0xFF);
      Nf_wr_byte(0xFF);
      Nf_wr_byte(0xFF);
      Nf_wr_byte(0xFF);
      Nf_wr_byte(0xFF);
      Nf_wr_byte(0xE8);
      Nf_wr_byte(0xFF);
      Nf_wr_byte(0xFF);
      Nf_wr_byte(0xFF);
      Nf_wr_byte(0xFF);
      Nf_wr_byte(0xE8);
      Nf_wr_byte(0xFF);
      Nf_wr_byte(0xFF);
      Nf_wr_byte(0xFF);
      Nf_wr_byte(0xFF);

      /* Valid the page programmation */
      Nf_send_command(NF_PAGE_PROGRAM_CMD);

      start += 128;
      address2++;
      address++;
  
    }
    while (start < 1024);
  }
  /* Update address of look up table */
  Nf_wait_busy();
  Nf_send_command (NF_READ_A_AREA_CMD);
  Nf_send_command (NF_BLOCK_ERASE_CMD);                     /* Auto Block Erase Setup */
  Nf_send_address ( ((Byte*)&address_look_up_table)[3] );   /* 2nd address cycle*/
  Nf_send_address ( ((Byte*)&address_look_up_table)[2] );   /* 3rd address cycle*/
  if (nf_64)                                                /* Size of card >= 64Mbytes ?*/
    Nf_send_address ( ((Byte*)&address_look_up_table)[1] ); /* 4th address cycle*/
  Nf_send_command(NF_BLOCK_ERASE_CONFIRM_CMD);              /* Erase command */

  address_look_up_table = (Uint32)(look_up_table_block) << 5;
  Nf_wait_busy();
}




/*F**************************************************************************
* NAME:     nf_mark_bad_block
*----------------------------------------------------------------------------
* PARAMS:   
*           
*
* RETURN:   
*
*
*----------------------------------------------------------------------------
* PURPOSE: Write 0x00 on block status byte (Byte 5 of spare data)
*          
*
*****************************************************************************
* NOTE:     This function use the global variable Uint32 address

*****************************************************************************/
void nf_mark_bad_block(void)
{
  Nf_wait_busy();
  Nf_send_command (NF_READ_C_AREA_CMD);
  Nf_send_command (NF_SEQUENTIAL_DATA_INPUT_CMD);
  Nf_send_address (0x00);
  Nf_send_address ( ((Byte*)&address)[3] );   /* 2nd address cycle         */
  Nf_send_address ( ((Byte*)&address)[2] );   /* 3rd address cycle         */
  if (nf_64)                            /* Size of card >= 64Mbytes ?*/
    Nf_send_address ( ((Byte*)&address)[1] ); /* 4th address cycle         */

  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0x00);
  Nf_wr_byte(0x00);
  Nf_wr_byte(0x00);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);

  /* Send program command */
  Nf_send_command (NF_PAGE_PROGRAM_CMD);
}



/*F**************************************************************************
* NAME:     nf_block_erase
*----------------------------------------------------------------------------
* PARAMS:   
*           
*
* RETURN:   OK : erase done
*           KO : erase not done
*
*----------------------------------------------------------------------------
* PURPOSE: Erase a block on Nand Flash Media
************************************************************************/
extern bdata bit Nf_WP;
extern xdata  Byte mode_state;

bit nf_block_erase (Uint32 pos)
{
	if((mode_state == MODE_DOWNLOAD) && (!Nf_WP))
	{
		return KO;
	}

  Nf_wait_busy();
  Nf_send_command (NF_READ_A_AREA_CMD);
  Nf_send_command (NF_BLOCK_ERASE_CMD);       /* Auto Block Erase Setup     */

  Nf_send_address ( ((Byte*)&pos)[3] );       /* 2nd address cycle          */
  Nf_send_address ( ((Byte*)&pos)[2] );       /* 3rd address cycle          */
  if (nf_64)                                  /* Size of card >= 64Mbytes ? */
    Nf_send_address ( ((Byte*)&pos)[1] );     /* 4th address cycle          */

  Nf_send_command(NF_BLOCK_ERASE_CONFIRM_CMD);/* Erase command              */
  
  return OK;

}


/*F**************************************************************************
* NAME:     nf_erase_all_block
*----------------------------------------------------------------------------
* PARAMS:   
*           
*
* RETURN:   
*           
*----------------------------------------------------------------------------
* PURPOSE:  This function erase all blocks on a NF card and write CIS 
*           information
*
*
*************************************************************************/
bit nf_erase_all_block(void)
{
Byte pdata *ptr = &gl_buffer[0];
bit bad_block_detect;
Uint16 i;
Byte temp;	

	Nf_CS_ON();
	// Erase all block 
	for (address = 0; address<(Uint32)(nf_zone_max) * 1024 * 32; address+=32)
	{
		if((address>=(Uint32)(1024-12)*32)&&(address<(Uint32)1024*32)
			||((address>=(Uint32)(2048-13)*32)&&(address<(Uint32)2048*32)))
		{
			nf_mark_bad_block();      
			continue;
		}
		// Read block status byte 
		Nf_wait_busy();
		if (1)
		{
			nf_block_erase(address);
			if ( nf_check_status() == KO)
			{ // Failure on erase operation 
				nf_mark_bad_block();      
			}
			else
			{ // Fill redundant area with 0x00 
				Nf_wait_busy();
				Nf_send_command(NF_READ_C_AREA_CMD);
				Nf_send_command(NF_SEQUENTIAL_DATA_INPUT_CMD);
				Nf_send_address(0x00);
				Nf_send_address ( ((Byte*)&address)[3] );   // 2nd address cycle         
				Nf_send_address ( ((Byte*)&address)[2] );   // 3rd address cycle         
				if (nf_64)                            // Size of card >= 64Mbytes ?
					Nf_send_address ( ((Byte*)&address)[1] ); // 4th address cycle         

				for (temp = 16; temp != 0; temp--)Nf_wr_byte(0x00);
				// Valid the page programmation 
				Nf_send_command(NF_PAGE_PROGRAM_CMD);
				if ( nf_check_status() == KO)
				{ // Failure on program operation 
					nf_mark_bad_block();      
				}
				// Read 16 bytes 
				Nf_wait_busy();
				Nf_send_command(NF_READ_C_AREA_CMD);
				Nf_send_address(0x00);
				Nf_send_address( ((Byte*)&address)[3] );    // 2nd address cycle         
				Nf_send_address( ((Byte*)&address)[2] );    // 3rd address cycle         
				if (nf_64)                                  // Size of card >= 64Mbytes ?
					Nf_send_address( ((Byte*)&address)[1] );  // 4th address cycle         
				Nf_wait_busy();

				bad_block_detect = FALSE;
				for (temp = 16; temp != 0; temp--)
				{
					if (Nf_rd_byte() != 0x00) bad_block_detect = TRUE;
				}

				if (bad_block_detect)
				{
					nf_mark_bad_block();
				}
				else
				{// Finally, erase the block       
					nf_block_erase(address);
					if ( nf_check_status() == KO)
					{ // Failure on erase operation 
						nf_mark_bad_block();      
					}
				}
			}
		}
	}

	address=STORE_BEGIN_PAGE;
	nf_mark_bad_block();

	// Reconstruct the CIS 
	// Open in write mode at the address 0x00 
	Nf_wait_busy();
	Nf_send_command(NF_READ_A_AREA_CMD);
	Nf_send_command(NF_SEQUENTIAL_DATA_INPUT_CMD);
	Nf_send_address(0x00);
	Nf_send_address(0x00);
	Nf_send_address(0x00);
	if (nf_64)
		Nf_send_address(0x00);
  	// Save CIS table in gl_buffer 
	for (i = 0; i < 0x70; i++)
	{  
		(*ptr++) = nf_cis_table[i];
	}
	for (i = 0; i < 0x90; i++)
	{  
		(*ptr++) = 0;
	}

	// write buffer 2 times 
	nf_download_buffer();
	nf_download_buffer();


// Write spare data 
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0x00);
  Nf_wr_byte(0x00);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0x00);
  Nf_wr_byte(0x00);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);
  Nf_wr_byte(0xFF);

  // Valid the page programmation 
  Nf_send_command(NF_PAGE_PROGRAM_CMD);

  read_spare_byte();

  Nf_CS_OFF();
  return OK;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区永久视频免费观看| 色婷婷av一区| 久久精品国产**网站演员| 图片区日韩欧美亚洲| 一区二区三区精品久久久| 亚洲精品综合在线| 亚洲激情六月丁香| 亚洲国产精品影院| 丝瓜av网站精品一区二区| 首页国产丝袜综合| 蜜臀91精品一区二区三区| 美女免费视频一区| 国产成a人亚洲精品| 成人亚洲一区二区一| 色欲综合视频天天天| 欧美日韩国产综合视频在线观看 | 国产精品一卡二卡在线观看| 国产毛片精品视频| 波多野结衣亚洲一区| 欧美午夜精品一区| 精品久久久久一区| 中文字幕欧美激情| 亚洲成人免费看| 国产一区二区三区四区五区美女 | 亚洲激情男女视频| 日韩国产在线观看一区| 激情成人综合网| yourporn久久国产精品| 91精品国产综合久久久久久| 欧美精品一区二区三区很污很色的 | 国产女主播视频一区二区| 亚洲日本在线a| 奇米影视在线99精品| 国产福利电影一区二区三区| 日本韩国欧美在线| 日韩精品一区二区三区蜜臀 | 欧美性大战久久| 精品国产乱码久久久久久闺蜜| 国产精品国产馆在线真实露脸| 天天综合天天综合色| 国产suv一区二区三区88区| 欧美视频一区在线观看| 久久久99久久| 日韩精品一级中文字幕精品视频免费观看| 国产一区二区三区免费| 欧美肥胖老妇做爰| 一区二区三区日本| 成人av在线资源网站| 精品免费视频.| 丝袜亚洲另类欧美综合| 91麻豆精东视频| 国产欧美一区二区精品性色| 日韩国产欧美在线播放| 色综合天天做天天爱| 国产偷v国产偷v亚洲高清| 日韩精品福利网| 欧美在线你懂的| 一区精品在线播放| 国产成人高清视频| 2021久久国产精品不只是精品| 亚洲第一成年网| 欧美综合欧美视频| 中文字幕一区在线| a级精品国产片在线观看| 久久久精品中文字幕麻豆发布| 蜜桃视频在线观看一区二区| 7777精品伊人久久久大香线蕉的 | 国产精品久久久久影院亚瑟| 日本成人在线视频网站| 欧美日韩的一区二区| 亚洲一区免费视频| 欧美性猛片aaaaaaa做受| 亚洲欧美激情在线| 99精品偷自拍| 亚洲精品水蜜桃| 在线观看亚洲一区| 亚洲成av人片| 欧美一区二区三区色| 美女视频一区在线观看| 日韩欧美一区二区三区在线| 理论电影国产精品| 国产亚洲午夜高清国产拍精品| 国产一区二区三区免费看| 久久精品人人做人人爽人人| 国产91精品精华液一区二区三区| 久久久99精品免费观看不卡| 成人午夜精品一区二区三区| 亚洲天堂免费看| 欧美视频一区二区三区在线观看 | 欧美一区二区三区啪啪| 狠狠狠色丁香婷婷综合激情| 久久婷婷久久一区二区三区| 国产不卡一区视频| 亚洲日本在线a| 91精品国产综合久久久久久久久久 | 欧美综合视频在线观看| 美国三级日本三级久久99| 97se狠狠狠综合亚洲狠狠| 精品国产91久久久久久久妲己 | 精品国产制服丝袜高跟| 激情五月婷婷综合网| 国产精品色哟哟网站| 一本一本大道香蕉久在线精品| 亚洲成人动漫在线免费观看| 欧美成人欧美edvon| av色综合久久天堂av综合| 亚洲一区二区三区四区不卡| 精品国产1区二区| 91视频在线观看免费| 日韩国产一二三区| 中文字幕欧美一| 日韩欧美中文字幕一区| 顶级嫩模精品视频在线看| 亚洲国产欧美在线人成| 久久综合九色综合97婷婷女人| 91猫先生在线| 国产主播一区二区三区| 亚洲午夜在线视频| 国产日韩精品视频一区| 欧美精品 国产精品| av激情亚洲男人天堂| 精品亚洲aⅴ乱码一区二区三区| 中文字幕综合网| 久久亚洲精品小早川怜子| 欧美日韩精品一区二区天天拍小说| 国产精品香蕉一区二区三区| 午夜精品福利在线| 中文字幕一区二区不卡 | 国产精品国产精品国产专区不片| 91精品国产色综合久久ai换脸| a亚洲天堂av| 国产经典欧美精品| 久久激情五月婷婷| 热久久一区二区| 亚洲成人tv网| 亚洲综合免费观看高清完整版在线| 国产网站一区二区三区| 精品免费日韩av| 欧美一区二区三区播放老司机| 色婷婷久久99综合精品jk白丝| 成人免费视频免费观看| 国产精品一区二区久久不卡 | 亚洲国产日产av| 亚洲乱码中文字幕| 日韩美女精品在线| 国产精品久久看| 亚洲欧美综合在线精品| 国产三级欧美三级日产三级99| 精品福利一二区| 精品久久久三级丝袜| 亚洲精品在线免费观看视频| 日韩三级视频在线观看| 欧美成人乱码一区二区三区| 精品剧情v国产在线观看在线| 日韩一级高清毛片| 日韩精品专区在线影院重磅| 日韩午夜av一区| 精品国产不卡一区二区三区| 国产亚洲福利社区一区| 国产日产精品1区| 国产精品美女久久久久aⅴ国产馆| 久久久精品免费免费| 国产精品日韩精品欧美在线| 国产精品久久久久影院色老大| 亚洲视频免费观看| 亚洲国产欧美在线人成| 日韩二区三区在线观看| 狂野欧美性猛交blacked| 国内偷窥港台综合视频在线播放| 国产很黄免费观看久久| av在线综合网| 欧美日韩视频不卡| 久久婷婷色综合| 亚洲色图欧美偷拍| 免费观看30秒视频久久| 国产福利一区二区| 欧美最猛黑人xxxxx猛交| 欧美一二三四区在线| 久久久91精品国产一区二区精品 | 欧美激情一区二区三区四区 | 美女高潮久久久| 国产福利91精品一区二区三区| 色琪琪一区二区三区亚洲区| 91麻豆精品国产91久久久资源速度| 精品久久久久久久久久久久久久久| 国产目拍亚洲精品99久久精品| 亚洲一区在线视频观看| 激情五月激情综合网| 91国偷自产一区二区三区成为亚洲经典 | 91精品国产欧美一区二区成人| 久久人人超碰精品| 亚洲精品精品亚洲| 国产一区福利在线| 欧美图片一区二区三区| 国产日本亚洲高清| 天堂久久一区二区三区| 懂色中文一区二区在线播放| 欧美日韩小视频| ...xxx性欧美| 韩国一区二区视频|