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

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

?? nf.c

?? 單片機學習資料主要講述MP3開發 適合初學者進行開發學習
?? C
?? 第 1 頁 / 共 5 頁
字號:
      if ((byte_6 == 0xE8) && ((gl_address & 0x1F) == 0))
      {
        lut_index[i]--;
        gl_address = gl_address - NB_PAGE_BY_LUT;
      }
      else
      {
        lut_index[i]-=2;
        gl_address = gl_address - (NB_PAGE_BY_LUT << 1);
      }

      Nf_read_open_C_area_even(gl_address, 0x00);
      if (Nf_rd_byte_even() != 0xFF)                              /* LUT have been modified */
      {
        nf_block_erase(gl_address);
        lut_is_present[i] = FALSE;   
        lut_index[i] = 0;
        Nf_wait_busy_even();
      }
    }
  }
  
  
  /*****************************************************************/
  /*          Find free physical block for LUT for each zone       */
  /*****************************************************************/
  for (i = 0; i < NF_ZONE_MAX_CPT; i++)
  {
    if (lut_is_present[i] == FALSE)
    {
      block = last_physical_used_block_even[i];
      start = (Uint16)(i);                                    /* starting value for each zone */
      j = 0;                                                  /* reset turn around counter    */
      if (block == start)                                     /* starting block for scan      */
      {
        block = start + ((NF_ZONE_MAX_CPT << 10) - NF_ZONE_MAX_CPT);
      }
      block_valid = FALSE;                                    /* init flag block valid */
      do
      {
        gl_address = (Uint32)(block) << 5;
        Nf_read_open_C_area_even(gl_address, 0x05);
        byte_5 = Nf_rd_byte_even();
        byte_6 = Nf_rd_byte_even();
    
        if ( (byte_5 == 0xFF) && (byte_6 == 0xFF) )           /* not assigned and valid block */
        {
          block_valid = TRUE;                                 /* find a correct block         */
        }
        else                                                  /* else decrease block number   */
        {
          if (block == start)                       
          {
            block = start + ((NF_ZONE_MAX_CPT << 10) - NF_ZONE_MAX_CPT);
          }
          else
          {
            block-=NF_ZONE_MAX_CPT;
          }
        }
        j++;
      }
      while (( !block_valid  ) && (j < 1024));
      if (j == 1024)
        return KO;
      lut_block[i] = block;                                   /* Update look up table address */
    }
  }
      
    
    /**********************************************************/
    /* Create the look-up table                               */
    /* Process is done zone per zone and by step of 256 blocks*/
    /* ********************************************************/
    for (nf_zone = 0; nf_zone < NF_ZONE_MAX_CPT; nf_zone++)           /* for each zone */
    {
      if (lut_is_present[nf_zone] == FALSE)
      {
        start = 0x00;
        end   = 0x40;                                             /* 256 bytes for gl_buffer <-> 64 blocks */

        free_bloc_pos_even  = (Uint16)(last_physical_used_block_even[nf_zone]);
        free_bloc_pos_odd   = (Uint16)(last_physical_used_block_odd[nf_zone]);
        gl_address          = (Uint32)(lut_block[nf_zone]) << 5; 
        lut_part            = 0;
        do
        {
          Nf_CS_EVEN();                                         /* even Part                  */
          nf_init_buffer();                                     /* reinitialize the buffer    */
          temp_address = (Uint32)(nf_zone) << 5;                /* at the beginning           */
          block        = (Uint16)(nf_zone);
          Nf_wait_busy_even();

          for (j = NF_BLOCK_PER_ZONE; j != 0 ; j--)             /* for each block             */
          { 
            Nf_read_open_C_area_even(temp_address, 0x05);
            if (Nf_rd_byte_even() == 0xFF)                      /* If not a bad block         */
            {
              block2.b[0] = Nf_rd_byte_even();                  /* Read logical block address */
              block2.b[1] = Nf_rd_byte_even();
              if ( (block2.b[0] & 0xF8) == 0x10)
              {
                block2.w = (block2.w & 0x0FFF) >> 1;          
                if ( (block2.w < end) && (block2.w >= start)) 
                { 
                  gl_buffer[(Byte)(4 * block2.b[1])] = block >> 8;        /* Save logical block value */
                  gl_buffer[(Byte)(4 * block2.b[1] + 1)] = block & 0xFF;  /* in the buffer            */
                }
              }
            }
            temp_address += (NF_ZONE_MAX_CPT << 5); 
            block+=NF_ZONE_MAX_CPT;
          }
            
          /* affect to the free physical block a fictive logical block */
          /* free physical block => gl_buffer[x] = 0xFF */
          temp_address = (Uint32)(free_bloc_pos_even) << 5;
          for (j = 0; j <= 0xFC; j += 4)
          {
            if (gl_buffer[j] == 0xFF)
            {
              do                                                    /* Search free physical block */
              {
                temp_address += (NF_ZONE_MAX_CPT << 5);
                if (temp_address >= ((Uint32)(NF_ZONE_MAX_CPT) << 15) )
                    temp_address = (Uint32)(nf_zone) << 5;
                Nf_read_open_C_area_even(temp_address, 0x05);
                byte_5 = Nf_rd_byte_even();                          /* Invalid/Valid block */
                byte_6 = Nf_rd_byte_even();                          /* Used/Unused block   */
              }
              while ( ( (byte_6 != 0xFF) && (byte_6 != 0xE8) ) || (byte_5 != 0xFF) );
              free_bloc_pos_even = temp_address >> 5;
              gl_buffer[j] = (free_bloc_pos_even >> 8) | 0x80;
              gl_buffer[j + 1] = free_bloc_pos_even;
            }
          }

          Nf_CS_ODD();                                            /* Odd Part */  
          temp_address  = (Uint32)(nf_zone) << 5;                 /* We start at the beginning  */
          block         = (Uint16)(nf_zone);
          Nf_wait_busy_odd();
          for (j = NF_BLOCK_PER_ZONE; j != 0 ; j--)               /* for each block             */
          { 
            Nf_read_open_C_area_odd(temp_address, 0x05);
            if (Nf_rd_byte_odd() == 0xFF)                         /* If not a bad block         */
            {
              block2.b[0] = Nf_rd_byte_odd();                     /* Read logical block address */
              block2.b[1] = Nf_rd_byte_odd();
              if ( (block2.b[0] & 0xF8) == 0x10)
              {
                
                block2.w = (block2.w & 0x0FFF) >> 1;          
                if ( (block2.w < end) && (block2.w >= start)) 
                { /* Save logical block value in the buffer */
                  gl_buffer[(Byte)(4 * block2.b[1] + 2)] = block >> 8;
                  gl_buffer[(Byte)(4 * block2.b[1] + 1 + 2)] = block;
          
                }
              }
            }
            temp_address += (NF_ZONE_MAX_CPT << 5); 
            block+= NF_ZONE_MAX_CPT;
          }
          
          /* affect to the free physical block a fictive logical block */
          /* free physical block => gl_buffer[x] = 0xFF */
          temp_address = (Uint32)(free_bloc_pos_odd) << 5;
          for (j = 2; j <= 0xFE; j+=4)
          {
            if (gl_buffer[j] == 0xFF)
            {
              do                                                /* Search free physical block */
              {
                temp_address += (NF_ZONE_MAX_CPT << 5);
                if (temp_address >= ((Uint32)(NF_ZONE_MAX_CPT) << 15) )
                    temp_address = (Uint32)(nf_zone) << 15;
                Nf_read_open_C_area_odd(temp_address, 0x05);
                byte_5 = Nf_rd_byte_odd();                          /* Invalid/Valid block */
                byte_6 = Nf_rd_byte_odd();                          /* Used/Unused block */
              }
              while ( ( (byte_6 != 0xFF) && (byte_6 != 0xE8) ) || (byte_5 != 0xFF) );
    
              free_bloc_pos_odd = temp_address >> 5;
              gl_buffer[j] = (free_bloc_pos_odd >> 8) | 0x80;
              gl_buffer[j + 1] = free_bloc_pos_odd;
            }
          }
            
          Nf_CS_EVEN();
          Nf_wait_busy_even();  
          if (lut_part == 0)
          {
            Nf_write_open_A_area_even(gl_address, 0x00);    /* First part of LUT */
            nf_download_buffer();
          }
          else
          {
            Nf_write_open_B_area_even(gl_address, 0x00);
            nf_download_buffer();
            /* Write redundant data */
            Nf_wr_byte_even(0xFF); Nf_wr_byte_even(0xFF); Nf_wr_byte_even(0xFF);
            Nf_wr_byte_even(0xFF); Nf_wr_byte_even(0xFF);
            Nf_wr_byte_even(0xFF);
            Nf_wr_byte_even(0xE8); Nf_wr_byte_even(0xFF);                         /* Logical block value */
            Nf_wr_byte_even(0xFF); Nf_wr_byte_even(0xFF); Nf_wr_byte_even(0xFF);  /* ECC area 2 */
            Nf_wr_byte_even(0xE8); Nf_wr_byte_even(0xFF);                         /* Logical block value */
            Nf_wr_byte_even(0xFF); Nf_wr_byte_even(0xFF); Nf_wr_byte_even(0xFF);  /* ECC area 1 */
            /* Increase the address of the conversion table */
            gl_address++;
          }
          lut_part = ~lut_part;

          Nf_send_command_even(NF_PAGE_PROGRAM_CMD);
          start    += 0x40;                                 /* process next 64 logical block   */
          end      += 0x40;
          nf_init_buffer();                                 /* reinitialize the global buffer   */
        }
        while (start < NF_BLOCK_PER_ZONE);
      }
  }
  Nf_wait_busy_even();
  return OK;
}


/*F**************************************************************************
* NAME: nf_init
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*   OK : init complete
*   KO : - NF not supported or not recognise
*----------------------------------------------------------------------------
* PURPOSE:
*   NF initialisation
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
bit nf_init (void)
{   
Byte manufacturer;

  P2 = NF_IDLE_STATE_ADD;
  Nf_CS_EVEN();
  Nf_wait_busy_even();
  Nf_send_command_even(NF_RESET_CMD);
  Nf_CS_ODD();
  Nf_wait_busy_odd();
  Nf_send_command_odd(NF_RESET_CMD);
  Nf_wait_busy_odd();

  #if (NF_CAPACITY_AUTO_DETECT == TRUE)

    Nf_send_command_even(NF_READ_ID_CMD);
    Nf_send_address_even(0x00);
    manufacturer = Nf_rd_byte_even();
    nf_copy_back = FALSE;
    switch (Nf_rd_byte_even())
    {
      /******************************************************************************/
      case 0x73 :                                 /*--------- 2 * 16 Mbyte ---------*/
        nf_device_type = NF_SIZE_32MB;
        nf_zone_max = 1;                          /* 1 zone / slot : 1024 blocks    */
        nf_mem_size =  NF_SECTOR_SIZE_32MB - MEM_RESERVED_SIZE;
        nf_4_cycle_address = 0;                       /* 3 address cycles           */
      break;
      /******************************************************************************/
      case 0x75 :                                 /*--------- 2 * 32 Mbyte ---------*/
        nf_device_type = NF_SIZE_64MB;
        nf_zone_max = 2;                          /* 2 zones / slot : 2048 blocks   */
        nf_mem_size =  NF_SECTOR_SIZE_64MB - MEM_RESERVED_SIZE;
        nf_4_cycle_address = 0;                   /* 3 address cycles               */
        if (manufacturer == M_SAMSUNG)
        {
          nf_copy_back = TRUE;
        }
      break;
      /******************************************************************************/
      case 0x76 :                                  /*--------- 2 * 64 Mbyte --------*/
        nf_device_type = NF_SIZE_128MB;
        nf_zone_max = 4;                           /* 4 zones / slot : 4096 blocks  */
        nf_mem_size =  NF_SECTOR_SIZE_128MB - MEM_RESERVED_SIZE;
        nf_4_cycle_address = 1;                    /* 4 address cycles              */
        if (manufacturer == M_SAMSUNG)
        {
          nf_copy_back = TRUE;
        }
        break;
      /******************************************************************************/
      case 0x79 :                                  /*-------- 2 * 128 Mbyte --------*/
        nf_device_type = NF_SIZE_256MB;
        nf_zone_max = 8;                           /* 8 zones / slot : 8192 blocks  */
        nf_mem_size =  NF_SECTOR_SIZE_256MB - MEM_RESERVED_SIZE;
        nf_4_cycle_address = 1;                    /* 4 address cycles              */
        if (manufacturer == M_SAMSUNG)
        {
          nf_copy_back = TRUE;
        }        
        break;
      /******************************************************************************/
      default:                                     /* Nand Flash not recognise or   */
        return KO;                                 /* bad response                  */
      /******************************************************************************/
    }
  #else
    nf_mem_size = NF_DISK_SIZE - MEM_RESERVED_SIZE;
  #endif

  nf_reserved_space_start = nf_mem_size + 1;

  return OK;


}

/*F**************************************************************************
* NAME: nf_read_open

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产不卡在线视频| 日本一道高清亚洲日美韩| 日韩一区二区电影在线| 欧美亚洲国产一区二区三区| 国产精品影视网| 捆绑调教一区二区三区| 午夜不卡av在线| 亚洲影院久久精品| 亚洲综合在线五月| 香蕉成人啪国产精品视频综合网| 欧美国产精品v| 亚洲国产精品ⅴa在线观看| 久久久一区二区三区捆绑**| 精品福利一二区| 国产亚洲精品7777| 国产精品久久久久久久久免费桃花| 欧美激情在线一区二区三区| 欧美国产日韩亚洲一区| 国产精品不卡在线| 一区二区三区在线播| 午夜精品久久久久久久久| 视频一区中文字幕国产| 日本不卡不码高清免费观看| 激情文学综合插| 国产不卡视频在线观看| 91首页免费视频| 在线免费观看日本一区| 欧美群妇大交群的观看方式| 欧美大肚乱孕交hd孕妇| 亚洲国产经典视频| 一二三区精品视频| 美女精品一区二区| jlzzjlzz亚洲女人18| 欧美日免费三级在线| 日韩欧美精品在线视频| 中文字幕不卡在线| 日韩影院免费视频| 丰满岳乱妇一区二区三区| 欧美三级日韩三级| 国产偷v国产偷v亚洲高清 | 一区二区三区精品视频| 亚洲国产精品精华液网站 | 国产偷国产偷亚洲高清人白洁 | 99国产精品99久久久久久| 欧美午夜在线一二页| 2021中文字幕一区亚洲| 亚洲黄一区二区三区| 看电视剧不卡顿的网站| 91丨九色丨蝌蚪富婆spa| 欧美成人女星排行榜| 一区二区三区蜜桃| 处破女av一区二区| 欧美一级国产精品| 亚洲激情中文1区| 国产精品69毛片高清亚洲| 欧美日韩激情在线| 最新成人av在线| 国产福利精品一区| 91精品啪在线观看国产60岁| 亚洲精品第一国产综合野| 老鸭窝一区二区久久精品| 欧美三级电影一区| 综合久久给合久久狠狠狠97色 | 成人国产视频在线观看| 欧美一级理论片| 亚洲综合色区另类av| jlzzjlzz欧美大全| 国产视频一区不卡| 国产乱国产乱300精品| 日韩欧美美女一区二区三区| 亚洲国产中文字幕| 日本久久一区二区三区| 1024亚洲合集| av电影在线观看一区| 亚洲精品在线观看网站| 奇米色777欧美一区二区| 欧美日韩国产精品自在自线| 亚洲综合图片区| 色综合视频在线观看| 中文字幕日本不卡| 成人丝袜高跟foot| 国产精品久久久久天堂| 99热99精品| 亚洲欧美激情插| 91色九色蝌蚪| 亚洲va国产va欧美va观看| 欧美四级电影网| 天天av天天翘天天综合网色鬼国产| 欧美情侣在线播放| 蜜桃视频在线观看一区二区| 欧美成人一区二区三区在线观看| 美女视频黄频大全不卡视频在线播放 | 日韩国产在线观看一区| 国产一区二区0| 日韩欧美一级二级三级久久久| 图片区日韩欧美亚洲| 欧美日韩亚洲综合一区二区三区| 亚洲在线视频一区| 欧美日韩一区二区电影| 婷婷夜色潮精品综合在线| 91精品一区二区三区在线观看| 热久久久久久久| xnxx国产精品| 国产一区二区三区观看| 欧美激情一区不卡| 91浏览器在线视频| 婷婷夜色潮精品综合在线| 日韩欧美你懂的| 国产乱国产乱300精品| 国产精品国产三级国产普通话三级| 91免费观看视频| 久久精品国产一区二区三区免费看| 精品久久人人做人人爱| 欧美精品aⅴ在线视频| 国产揄拍国内精品对白| 亚洲欧美日韩一区| 91精品国产美女浴室洗澡无遮挡| 国产精品一区二区三区99| 亚洲免费观看高清完整版在线观看熊| 欧美丰满少妇xxxxx高潮对白 | 日韩一区二区在线观看视频| 成人午夜免费视频| 久久99精品国产麻豆婷婷洗澡| 中文字幕日本不卡| 欧美大片在线观看一区二区| 91麻豆6部合集magnet| 国产伦精品一区二区三区免费迷 | 成人综合婷婷国产精品久久免费| 一区二区三区日韩在线观看| 26uuu久久综合| 欧美中文字幕一区二区三区 | 一区二区三区小说| 久久精品亚洲精品国产欧美| 欧美在线观看视频在线| 床上的激情91.| 久久99精品久久久久久国产越南| 亚洲宅男天堂在线观看无病毒| 国产精品三级视频| 欧美mv和日韩mv国产网站| 在线观看日韩电影| 成人午夜精品一区二区三区| 久久99久久久久久久久久久| 亚洲国产视频a| 亚洲欧洲国产专区| 国产欧美视频一区二区三区| 4438亚洲最大| 欧美色精品在线视频| 色爱区综合激月婷婷| 99视频精品免费视频| 国产成人亚洲综合a∨猫咪| 蜜桃一区二区三区在线观看| 视频一区免费在线观看| 亚洲综合精品自拍| 一区二区欧美国产| 一区二区三区四区蜜桃| 亚洲欧美日韩久久精品| 亚洲人亚洲人成电影网站色| 欧美国产综合一区二区| 国产精品高清亚洲| 国产精品视频免费| 中文字幕第一区| 国产精品久久福利| 中文字幕在线不卡视频| 国产精品久久免费看| 亚洲国产sm捆绑调教视频| 亚洲一区二区三区激情| 亚洲午夜精品网| 日韩精品一卡二卡三卡四卡无卡| 亚洲大片精品永久免费| 亚洲一本大道在线| 亚洲丰满少妇videoshd| 日韩高清一区在线| 久久不见久久见免费视频7| 极品少妇一区二区| 粉嫩av一区二区三区在线播放| av在线播放不卡| 欧美丝袜自拍制服另类| 日韩一区二区三区在线观看| 精品国产sm最大网站| 国产精品免费aⅴ片在线观看| 中文字幕一区二区在线播放 | 欧美久久一二三四区| 91精品国产91久久久久久一区二区 | 亚洲福利一二三区| 麻豆精品视频在线| 丁香五精品蜜臀久久久久99网站| 一本色道久久综合亚洲91| 在线播放日韩导航| 国产亚洲成年网址在线观看| 亚洲三级理论片| 免费精品视频最新在线| 高清不卡在线观看av| 欧美中文字幕一区| 久久久久久久久久久黄色| 自拍偷在线精品自拍偷无码专区| 奇米亚洲午夜久久精品| 一本久道久久综合中文字幕| 日韩免费一区二区三区在线播放| 亚洲欧洲国产日韩| 色综合久久中文字幕综合网|