《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于NAND Flash的轉譯層的設計
基于NAND Flash的轉譯層的設計
來源:微型機與應用2010年第24期
侯 超,徐建城
(西北工業大學,陜西 西安710129)
摘要: 基于NAND Flash的嵌入式存儲系統以其輕巧便攜、讀寫速度快等特點成為當前嵌入式存儲系統的主流配置。但由于固有壞塊以及在擦、寫過程中隨機產生的壞塊影響了NAND Flash的實際應用,所設計的NAND Flash的驅動轉譯層具有壞塊管理機制并實現上層文件系統的連續讀寫功能。
Abstract:
Key words :

摘  要: 基于NAND Flash的嵌入式存儲系統以其輕巧便攜、讀寫速度快等特點成為當前嵌入式存儲系統的主流配置。但由于固有壞塊以及在擦、寫過程中隨機產生的壞塊影響了NAND Flash的實際應用,所設計的NAND Flash的驅動轉譯層具有壞塊管理機制并實現上層文件系統的連續讀寫功能。
關鍵詞: NFTL;地址映射;壞塊管理

    目前市場上閃存芯片主要有兩類,即NAND Flash(Not And Flash ROM)和NOR Flash(Not Or Flash ROM)。前者具有容量大、讀寫速度快、芯片面積小、單元密度高、擦除速度快、成本低等特點,更適合于大批量數據存儲的嵌入式系統。如今Windows仍是桌面系統的主流,對FAT文件系統提供了天然的支持。然而就技術而言,FAT文件系統并不適合Flash,因為Flash設備并不是塊設備[1],為了不破壞兼容性,并在NAND型閃存中應用FAT文件系統,國際上提出了閃存轉譯層FTL(Flash Translation Layer)的解決方案。
1 NAND Flash嵌入式存儲系統結構
    基于NAND Flash的存儲系統的設計首先要解決壞塊問題。由于NAND Flash自身存在固有壞塊并在擦除和編程中又隨機產生壞塊,因此為了提高設備的可靠性應該將這兩種操作分散在閃存不同的塊中,以避免對某塊的過度操作。
    一般的基于NAND Flash嵌入式存儲系統驅動結構分為三個層次:最底層是硬件操作接口,負責將主控芯片與Flash的控制管腳相連,這方面的固件主要實現對NAND Flash的物理操作;中間層是閃存轉譯層NFTL(NAND FTL),是封裝在Flash驅動中的軟件模塊,其作用是將Flash模擬成與磁盤相類似的塊設備,使對上層操作系統而言,NAND Flash就像普通磁盤一樣被訪問。這一層主要是封裝一些特殊的復雜管理控制功能;最上面的層就是文件管理層,功能類似于普通磁盤上的通用文件系統,向上層提供標準的文件操作接口?;贜AND Flash的嵌入式系統存儲結構原理圖如圖1所示。

    根據以上兩個方面,既要在驅動中實現壞塊管理,又要進行塊模擬,所以可用的方法有兩種[2]:一是在上層文件系統中解決壞塊問題,驅動層只實現本身的功能,文件系統為驅動層提供不變的接口,為上層應用程序提供可靠透明的服務。這種方法較簡單,開發周期比較短,但只對特定應用的嵌入式系統有很強的適應性;第二種方法是在驅動層的NFTL中解決壞塊問題,將不可靠的NAND Flash虛擬成可靠的存儲設備,為上層文件系統提供可靠透明服務,這種方法較第一種更復雜,但是此法具有較強的可移植性并能徹底斷絕與文件系統的聯系,其他文件系統也同樣適用。
    本文是以Samsung的NAND Flash K9F2808U0C作為存儲芯片,設計了一種在NFTL上實現壞塊管理并且實現連續數據讀取的方法。
2 設計思想
2.1 閃存空間劃分

    K9F2808U0C是16 MB×8 bit的NAND Flash,共有1 024個Block,1 Block=16 KB,32 Page/Block,1 Page=528 B=(512 B+16 B),其中16 B為備用區,主要存放NAND Flash出廠壞塊標記、ECC校驗碼以及用戶自定義區。K9F2808U0C地址空間是24 bit,分三個周期依次送入NAND Flash的地址鎖存器。本文使用的地址均為字節地址,數據類型為DWORD(4 B)。
    將K9F2808U0C的存儲空間劃分為四個區:壞塊映射表存放區、交換塊區、壞塊映射區和實際數據存放區。文件系統管理的空間就是實際的數據存放空間,如圖2所示。

2.2 各分區宏定義
    #define FLASH_BLOCK_SIZE   0x40000    //16 KB/Block
    #define FLASH_PAGE_SIZE   0x200        //512 B/Page
    #define FLASH_SECTOR_SIZE  0x200
//1Page=1Sector(only K9F2808U0C)
    #define FLASH_BLOCKS_TABLE  3//壞塊映射表存放塊數
    #define FLASH_SWAP_BLOCKS   5    //交換區的塊數
    #define FLASH_BAD_BLOCKS_REMAP   50
//壞簇重映區的塊數
    #define FLASH_MAX_ADDR  0xFFFFFF
//Flash最大字節地址
    各分區首地址計算公式:
    FLASH_BLOCK_TABLE_ADDR=FLASH_MAX_ADDR+
1-3*FLASH_BLOCK_SIZE);
    FLASH_SWAP_BLOCK_ADDR=(FLASH_BLOCK_
TABLE_ADDR-5*FLASH_BLOCK_SIZE);
    FLASH_BAD_BLOCK_REMAP_ADDR=(FLASH_SWAP_
BLOCK_ADDR-50*FLASH_BLOCK_SIZE);
    FLASH_MAX_SECTOR_ADDR=(FLASH_MAX_ADDR-
3*FLASH_BLOCK_TABLE_ADDR-5*FLASH_SWAP_
BLOCK_ADDR-50*FLASH_BAD_BLOCK_REMAP_ADDR);
文件系統管理的最大字節地址。
    任意地址Addr:
    所在塊地址:Addr&(~(FLASH_BLOCK_SIZE-1));
    塊內偏移地址:Addr&(FLASH_BLOCK_SIZE-1);
    塊中的頁:(Addr&(FLASH_BLOCK_SIZE-1))/FLASH_
PAGE_SIZE;
2.3 分區功能設計
    壞塊映射區存放復制3份的壞塊信息BBI(Bad Block Information)表。復制3份是預防系統突然斷電,造成BBI表數據丟失。選擇最后3個塊,主要是出于固件設計。當Flash首次上電,固件程序通過讀取Flash ID,獲得設備的容量等信息,然后從Flash的最后一塊中尋找BBI表,如果最后一塊沒有發現BBI表,則認為此塊為壞塊,繼續前移尋找,依此類推,直到在預留的3個塊中找到,并將其數據讀入到在主控芯片為其開設的RAM中。如果還找不到,則固件認為該片Flash沒有BBI表。
    交換塊區是對NAND Flash進行擦除或寫操作時用來臨時存放數據,共分配5個塊。選取5塊是出于可靠性設計。用一個數組FlashSwapBlockStatus[FLASH_SWAP_BLOCKS]記錄交換塊狀態:有效還是已經損壞。初始化時,固件認為所有的交換塊都是有效塊,在隨后對其進行擦除或寫操作時,通過讀Flash狀態寄存器判斷該交換塊的真實狀態,并記錄在數組中。交換塊的管理圍繞固件請求返回當前可用交換塊地址或當前正在使用的交換塊地址,并判斷標記當前使用的交換塊狀態為壞。
    壞塊映射區是當主機向數據區寫數據時,檢測到當前塊(數據區)為壞塊時,將數據寫到壞塊映射區中的相應好塊中,并且將這兩個塊的塊地址記錄到BBI表中,以后主機若要對當前塊(數據區)訪問時,只需讀BBI表就可以找到相應映射塊,從而代替壞塊的訪問。這樣就使文件系統所見邏輯塊地址LBA(Logical Block Address)變成連續的,但實際上物理塊地址PBA(Physical Block Address)可能并不連續。上述方法就是壞塊管理的精髓。出于保守設計本文共選50塊作為重映塊。用數組FlashRemapBlockStatus[FLASH_BAD_BLOCKS_REMAP]標識壞塊映射區的狀態:未使用、已使用還是已經損壞。初始化時認為壞塊映射區中所有塊都是好塊。
3 NFTL壞塊管理設計
3.1 構建BBI表

    用一數組FlashBadBlockTable[2][FLASH_BAD_BLOCKS_REMAP]存放BBI表。第一維為壞塊(數據區)的塊地址,第二維為映射塊地址(重映塊)。
    BBI表的構建可在Flash首次上電時,通過讀取廠商設置在Flash備用區中的壞塊標記識別壞塊,建立壞塊映射表,此法初始化時間與Flash的容量成正比;或通過讀NAND Flash所有塊內容并和0xFF作比較[3],如果不相同,則表示壞塊。這種方法只針對新閃存,并且構建BBI表的時間長,主控芯片的占用率高;另一種方法是在Flash初次上電時先不建立壞塊表,認為當前所有的塊都是好塊,在隨后操作中發現壞塊,并更新BBI表。本文選擇后一種方法。
3.2 壞塊映射表區的設計
    將BBI表通過特殊的方式保存,以后通過此種方式的逆向來識別BBI表。壞塊映射表區的3個塊的設計方法如下:
    (1)在每塊最后一頁的首字節處做特殊標記,用于標識該塊有沒有準備被擦除:0xFF表示沒有準備被擦除;0x00表示該塊已經準備被擦除[4]。
    (2)在每塊的倒數第二頁的首字節處寫0x00,表示該塊存放BBI表數據;并在第2、3、4、5個字節處以大端模式存放校驗和,用于校驗該塊中存放的所有數據的正確性。該頁的剩余字節寫0xFF。
    (3)在第一頁起依次寫:表頭特殊標記(0x0055AAFF)、壞塊總數(FlashBadBlockCount)、BBI表(FlashBadBlockTable)、重映塊狀態(FlashRemapBlockStatus),其結構如圖3所示。

3.3 邏輯地址映射
    在與主機批量數據傳輸時,首先對主機發送的CBW命令解析,從而固件獲得主機請求數據傳輸的LBA,再對LBA地址映射以此獲得相應的PBA,然后再執行主機命令。具體方法:首先讀取當前總的壞塊數FlashBadBlocksCount,如果為0,表示無壞塊,LBA就不用映射,直接返回;如果最后一次訪問地址與LBA同屬于一個塊,那么也不用地址映射;如果當前壞塊的數量為1,判斷LBA塊地址與BBI表中壞塊地址是否相同,從而決定是否采取地址映射;如果當前壞塊的數量不為1,就需要查找BBI表判斷是不是含有LBA的塊地址,如果存在,則要地址重新映射,如果不存在,就不用重新映射??梢圆捎枚址ú楸韺崿F兩地址快速比較[4]。
3.4 壞塊處理
    對映射后的地址進行寫或擦除過程中發現當前塊變壞的處理方法:首先查找映射區中的塊狀態FlashRemapBlockStatus[FLASH_BAD_BLOCKS_REMAP],尋找可用的映射塊。如果50個重映塊都被標記為壞或已使用,則程序進入死循環;如果找到可用的映射塊,則固件對可能出現壞塊的三種情況進行散轉:(1)擦除當前塊時出錯:將當前塊地址與可用的重映塊地址寫入BBI表中,按地址大小排列有利于二分法查表,并返回重映塊地址。(2)復制某頁從交換區到操作地址時失敗:首先獲得當前使用的交換塊的塊地址,然后判斷操作地址是在數據存儲區還是在重映區。如果在重映區,說明當前操作地址所對應的在數據存儲區中的塊已經是壞塊,并且在這次操作中重映塊也變壞,此時就應該標記當前映射塊狀態為壞,并在重映區中尋找下一個可用重映塊,將原來在數據存儲區中的塊地址與更新后的映射塊地址寫入BBI表中,并返回新的映射后的地址;如果在數據存儲區,就進行第一次重映射,更新壞塊表,并且將映射地址返回。然后再完成復制工作。(3)向操作地址寫一頁數據時出錯:將當前地址所在塊中的前面頁從交換塊中相應地址復制到重映塊,然后將操作地址所在當前頁中的沒有寫到的數據從交換塊中復制,并將緩沖區中的數據重新寫到重映射的地址中,并返回重映射地址。函數實現如下:
    DWORD FlashDealBadBlock(DWORD Addr,DWORD Type)
    {
     DWORD i;
     DWORD RemapBlockAddr;
     DWORD SwapBlockAddr;
    while(1)
    {
        RemapBlockAddr=FlashGetNewRemapBlock();
        if(RemapBlockAddr==-1)
         return Addr;
        switch(Type)
         { case 1:
           goto Exit;
           break;
           case 2:
           SwapBlockAddr=FlashGetCurrentSwapBlock();
        for(i=0;i<(Addr&(FLASH_BLOCK_SIZE-1))/
FLASH_PAGE_SIZE+1;i++)
         {
         if(0x00==(FlashCopyPage(SwapBlockAddr+
i*FLASH_PAGE_SIZE,RemapBlockAddr+
i*FLASH_PAGE_SIZE)))
            goto BadRemapBlock;
           }
         goto Exit;
         break;
         case 3:
         SwapBlockAddr=FlashGetCurrentSwapBlock();
         for(i=0;i<(Addr&(FLASH_BLOCK_SIZE-1))/
FLASH_PAGE_SIZE;i++)
           {
         if(0x00==(FlashCopyPage(SwapBlockAddr+
i*FLASH_PAGE_SIZE,RemapBlockAddr+
i*FLASH_PAGE_SIZE)))
            goto BadRemapBlock;
          }
         if(0x00==(FlashCopyPage(Addr,RemapBlockAddr+
i*FLASH_PAGE_SIZE)))
            goto BadRemapBlock;
         goto Exit;
         break;
         default:
         break;
    }
    BadRemapBlock:    FlashMarkRemapBlockBad
(RemapBlockAddr);
}
    Exit:FlashUpdateBadBlockTable(Addr,RemapBlockAddr);
    return RemapBlockAddr+(Addr&(FLASH_BLOCK_SIZE-1));
}
3.5 連續讀寫操作
    當主機與設備建立批量傳輸數據連接時,固件通過解析CBW封包獲得起始LBA。對該地址進行映射和壞塊管理從而獲得PBA。設置一個變量,當此變量有效時,表示主機對Flash仍需要讀或寫數據,直到此變量失效為止。同時將主機上一次讀寫扇區的地址存入另一個變量,此變量在連續讀中作用不大,但在連續寫時,通過與上一次寫操作地址所在塊做比較,判斷是否同屬一個塊,以此決定是不是需要進行地址跨塊處理。
    本文設計了一種針對NAND型的閃存轉譯層,使NFTL完成地址映射和壞塊管理以及連續讀寫數據的操作。對NAND Flash的分區設計,使塊管理結構清晰,有利于固件的開發。本文沒有對Flash的ECC校驗進行過多的設計,這是因為在實際應用中NAND Flash主要用于存儲多媒體數據(圖片、語音文件)等,并不會對它進行頻繁的寫入或擦除操作,而且多媒體文件數據對數據的完整性不敏感[5],所以不需要對存儲在其中的每一位數據進行嚴格的ECC校驗,可以通過另外設計簡單的校驗方法來代替ECC校驗。
參考文獻
[1] 張雪,楊春林,黃娟.NAND Flash文件系統的設計與實現[J].福建電腦,2007,24(10):147-148.
[2] 羅曉,劉昊.一種基于FAT文件系統的NAND Flash壞塊處理方法[J].電子器件,2008,31(2):716-718.
[3] 鄭桂芬.基于USB的可移動閃盤技術探討[J].計算機工程,2003,29(7):195-197.
[4] 劉榮.圈圈教你玩USB[M].北京:北京航空航天大學出版社,2009.
[5] 楊玲,袁光濤.大容量NAND Flash在多媒體手機中的應用[J].科技咨詢導報,2007,4(1):22-24.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲午夜久久久久久尤物| 亚洲精品小视频在线观看| 亚洲国产精品999| 国产精品少妇自拍| 欧美激情免费观看| 亚洲狼人精品一区二区三区| 亚洲欧美成人| 欧美激情一区二区三区在线| 免费观看成人鲁鲁鲁鲁鲁视频| 久久一区二区视频| 久久嫩草精品久久久精品一| 国产精品午夜在线观看| 欧美大秀在线观看| 亚洲欧美日韩爽爽影院| 亚洲欧美日韩网| 国产精品福利av| 欧美怡红院视频一区二区三区| 国产一区二区丝袜高跟鞋图片| 国产精品成人观看视频免费| 麻豆精品在线观看| 一区二区三区欧美视频| 欧美尤物一区| 国产亚洲精品资源在线26u| 国外成人网址| 激情懂色av一区av二区av| 欧美精品久久久久久久| 欧美在线免费视屏| 久久中文字幕一区| 一本久道久久综合婷婷鲸鱼| 午夜一级在线看亚洲| 麻豆91精品91久久久的内涵| 欧美性色视频在线| 亚洲一级电影| 国产精品夜夜夜一区二区三区尤| 国产亚洲美州欧州综合国| 亚洲欧美日韩一区二区三区在线| 亚洲国产精品美女| 亚洲裸体在线观看| 欧美一区二区播放| 精品69视频一区二区三区| 亚洲天堂免费在线观看视频| 女人天堂亚洲aⅴ在线观看| 国产精品视频免费观看www| 亚洲欧美自拍偷拍| 国产精品视频内| 精品电影在线观看| 免费在线看一区| 欧美日韩亚洲一区二区三区| 国产日产亚洲精品系列| 91久久久久久国产精品| 欧美日韩中文精品| 国产精品美女999| 亚洲精品网址在线观看| 在线免费观看一区二区三区| 久久亚洲精品视频| 欧美高清在线一区二区| 一区二区高清在线观看| 9色国产精品| 99综合电影在线视频| 亚洲综合视频在线| 国产精品theporn| 欧美激情视频在线播放| 亚洲图片激情小说| 国产精品久久久久久久久久久久久久| 亚洲高清视频一区二区| 136国产福利精品导航网址应用| 亚洲欧洲精品一区| 亚洲女同在线| 国产一区二区三区免费不卡| 午夜精品成人在线视频| 久久久精品一区二区三区| 亚洲精品网站在线播放gif| 亚洲一区二区高清视频| 国产精品日产欧美久久久久| 国产精品免费看片| 亚洲高清视频中文字幕| 亚洲素人在线| 亚洲一区二区在| 黑人巨大精品欧美一区二区小视频| 99亚洲伊人久久精品影院红桃| 国产嫩草影院久久久久| 香蕉乱码成人久久天堂爱免费| 亚洲第一在线综合网站| 欧美精品国产精品日韩精品| 欧美日韩精品一二三区| 国产综合18久久久久久| 国产精品爱啪在线线免费观看| 久久女同互慰一区二区三区| 欧美一级播放| 免费在线播放第一区高清av| 国产精品看片资源| 久久国产精品99久久久久久老狼| 亚洲国产精品欧美一二99| 欧美亚洲视频一区二区| 欧美成人官网二区| 国产精品sm| 久久人人爽人人| 性8sex亚洲区入口| 欧美日韩免费观看一区=区三区| 国产一区二区三区高清在线观看| 亚洲综合视频一区| 在线观看不卡av| 一区二区亚洲| 国产精品亚发布| 欧美华人在线视频| 一区二区三区在线观看国产| 久久国产精彩视频| 久久爱www.| 麻豆精品视频在线观看视频| 欧美一区三区三区高中清蜜桃| 国产毛片一区二区| 亚洲欧美在线另类| 欧美激情综合五月色丁香小说| 久久精品国产久精国产爱| 国产精品免费网站在线观看| 国产综合18久久久久久| 国产免费成人av| 亚洲图色在线| 欧美成人xxx| 国产夜色精品一区二区av| 欲香欲色天天天综合和网| 一本久道久久久| 午夜精品久久久| 国产精品一区二区在线观看网站| 亚洲美女黄色片| 伊人色综合久久天天| 欧美激情中文字幕在线| 在线观看欧美成人| 欧美日韩视频在线一区二区观看视频| 亚洲精品资源美女情侣酒店| 久久精品免费看| 国产精品theporn88| 99re6这里只有精品| 久久精品综合一区| 国产精品视频最多的网站| 欧美第十八页| 欧美精品一区二| 中国日韩欧美久久久久久久久| 亚洲欧美在线aaa| 国产精品人成在线观看免费| 欧美一区二区三区四区视频| 亚洲线精品一区二区三区八戒| 亚洲欧美中文另类| 激情久久久久久| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲综合大片69999| 亚洲一二三区在线观看| 欧美第一黄色网| 亚洲精选在线| 伊人成综合网伊人222| 国产精品一区二区男女羞羞无遮挡| 亚洲图片欧美一区| 一本大道久久a久久精品综合| 国产精品一区二区你懂的| 亚洲中无吗在线| 欧美日一区二区三区在线观看国产免| 欧美精品一区二区精品网| 一区二区三区在线免费视频| 久久久噜噜噜久噜久久| 久久久久久久欧美精品| 新67194成人永久网站| 免费欧美网站| 日韩亚洲欧美中文三级| 午夜精品久久久久久久久| 欧美日韩黄色大片| 老司机成人在线视频| 亚洲国产清纯| 国产精品入口日韩视频大尺度| 欧美精品一线| 精品99一区二区三区| 国产亚洲欧美色| 黄色成人在线观看| 国产精品素人视频| 蜜桃久久精品一区二区| 国产麻豆视频精品| 欧美一区激情视频在线观看| 欧美巨乳在线观看| 欧美国产丝袜视频| 欧美一区二区三区啪啪| 狠狠色伊人亚洲综合成人| 久久av一区二区三区| 国产欧美日韩高清| 亚洲电影在线观看| 午夜国产精品视频| 国产精品高清一区二区三区| 国产精品久久午夜| 日韩视频中文| 亚洲精品小视频在线观看| 欧美劲爆第一页| 一区二区视频免费在线观看| 蜜臀久久99精品久久久久久9| 久久九九精品99国产精品| 欧美激情一区二区三区高清视频| 国产欧美69| 欧美区在线播放| 一本色道久久综合亚洲精品高清| 亚洲免费大片| 国产精品成人一区二区三区吃奶| 欧美午夜片在线观看| 欧美精品日韩综合在线| 小处雏高清一区二区三区| 日韩写真视频在线观看| 亚洲一区在线播放| 国语自产在线不卡| 狠狠色狠狠色综合日日91app| 欧美日韩成人一区二区三区| 国语自产精品视频在线看| 在线观看一区二区精品视频| 最新日韩欧美| 欧美精品一区二区三区蜜桃| 亚洲精品乱码视频| 欧美在线免费视频| 一本大道久久a久久精品综合| 亚洲免费高清视频| 亚洲美女视频在线观看| 国产精品激情电影| 一本久道综合久久精品| 国产伦精品免费视频| 久久久99精品免费观看不卡| 国产精品女主播在线观看| 亚洲人成网站777色婷婷| 久久亚洲综合色一区二区三区| 伊人久久亚洲热| 国产日韩欧美精品在线| 激情丁香综合| 亚洲免费观看视频| 国产精品一区在线观看| 国产精品青草久久久久福利99| 亚洲欧美日韩一区在线观看| 国产精品毛片va一区二区三区| 狠狠88综合久久久久综合网| 激情一区二区三区| 欧美在线播放一区| 国产精品久久久久久户外露出| 久久久久久久一区二区| 1024亚洲| 欧美国产日韩二区| 久久人人看视频| 欧美va亚洲va香蕉在线| 久久久亚洲午夜电影| 国产一区二区三区精品欧美日韩一区二区三区| 亚洲福利一区| 国产精品乱码人人做人人爱| 欧美国产日本高清在线| 欧美日韩精品是欧美日韩精品| 欧美日韩免费观看中文| 亚洲永久免费精品| 国产亚洲欧美激情| 欧美精品性视频| 久久精品人人做人人爽| 免费久久精品视频| 99pao成人国产永久免费视频| 欧美成人激情视频免费观看| 久久久福利视频| 国产精品婷婷午夜在线观看| 亚洲一区区二区| 亚洲一级黄色av| 国产日韩精品在线播放| 最新国产の精品合集bt伙计| 亚洲九九精品| 国产精品区免费视频| 欧美在线视频免费观看| 激情婷婷亚洲| 欧美成人免费视频| 欧美日韩一区二区精品| 一色屋精品视频免费看| 欧美一级成年大片在线观看| 亚洲午夜在线观看| 欧美日韩在线精品| 国产精品成人一区| 美女在线一区二区| 国产精品mv在线观看| 亚洲激精日韩激精欧美精品| 亚洲精品一区二| 国产精品v日韩精品v欧美精品网站| 亚洲午夜性刺激影院| 国产日韩视频一区二区三区| 亚洲精品视频免费| 国产精品乱码一区二区三区| 性一交一乱一区二区洋洋av| 亚洲精品系列| 尤物九九久久国产精品的分类| 国产一区二区观看| 久久精品道一区二区三区| 亚洲激情网站免费观看| 亚洲国产成人久久综合一区| 免费观看成人鲁鲁鲁鲁鲁视频| 国产精品日韩高清| 国产精品久久久久久久久果冻传媒| 欧美日韩国产成人在线| 欧美一级在线亚洲天堂| 这里只有精品丝袜| 亚洲第一精品影视| 欧美激情亚洲| 最新69国产成人精品视频免费| 国产女主播视频一区二区| 先锋影音久久| 西西人体一区二区| 最近中文字幕日韩精品| 欧美一区二区黄| 欧美日韩999| 国产精品女主播在线观看| 欧美午夜视频在线观看| 日韩午夜av在线| 在线观看免费视频综合| 今天的高清视频免费播放成人| 国产免费亚洲高清| 亚洲一级二级在线| 国产伊人精品| 日韩亚洲欧美在线观看| 亚洲精品影视| 在线欧美日韩精品| 久久久久88色偷偷免费| 欧美激情按摩| 亚洲欧洲在线免费| 久久久噜噜噜久久久| 亚洲精品黄色| 在线亚洲激情| 亚洲国产日韩在线| 亚洲激情中文1区| 久久久久久噜噜噜久久久精品| 男男成人高潮片免费网站| 国产精品第一区| 亚洲免费观看在线观看| 欧美大胆人体视频| 亚洲一区二区影院| 国产精品影片在线观看| 在线日韩电影|