wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

專注電子技術學習與研究
當前位置:單片機教程網 >> STM32 >> 瀏覽文章

FATfs 在STM32F107VC上的移植過程

作者:佚名   來源:本站原創   點擊數:  更新時間:2014年08月18日   【字體:
【文件系統將對文件的塊的操作轉換為對物理存儲器扇區的各種操作】
  FatFs是一個通用的文件系統模塊,以小的嵌入式系統的FAT文件系統。 FatFs的編程遵守的ANSI C格式語法標準,因此,它是具有獨立于硬件架構。 在不做任何改變就可以被移植到常用的微控制器中,如8051, PIC, AVR, SH, Z80, H8, ARM等。

FatFs 特點
分離緩沖的FAT結構和每一個文件,適合快速訪問多個文件。
支持多個驅動器和分區。
支持FAT12 , FAT16和FAT32 。
支持8.3格式的文件名(LFN不支持)
支持兩個分區規則: Fdisk和超級軟盤。
優化8/16-bit微控制器。

應用接口
FatFs /微型FatFs模塊提供下列功能。
f_mount – 登記或注銷一個工作領域
f_open -打開或創建文件
f_close – 關閉一個文件
f_read – 讀文件
f_write – 寫文件
f_lseek -移動文件讀/寫指針
f_truncate – 截斷文件
f_sync – 刷新緩存的數據
f_opendir – 打開一個目錄
f_readdir – 閱讀目錄項目
f_getfree -獲取免費集群
f_stat – 獲取文件狀態
f_mkdir – 創建一個目錄
f_unlink – 刪除文件或目錄
f_chmod – 更改屬性
f_utime – 變更時間戳記
f_rename -重命名/移動文件或目錄
f_mkfs – 創建一個文件系統的驅動器
f_forward -轉發文件數據流直接
fgets – 讀一個字符串
fputc – 寫一個字符
fputs – 寫一個字符串
fprintf – 寫格式化字串

Disk I/O Interface

disk_initialize -初始化的磁盤驅動器
disk_status – 獲取磁盤狀態
disk_read – 讀部門(星期日)
disk_write – 收件部門(星期日)
disk_ioctl – 控制裝置依賴功能
get_fattime – 獲取當前時間

一種易于移植和使用的文件系統FatFs Moule

引 言

隨著信息技術的發展,當今社會的信息量越來越大,以往由單片機構成的系統簡單地對存儲媒介按地址、按字節的讀/寫已經不滿足人們實際應用的需要,于是利用文件系統對存儲媒介進行管理成了今后單片機系統的一個發展方向。目前常用的文件系統主要有微軟的FATl2、FATl6、FAT32、NTFS,以及Linux系統下的EXT2、EXT3等。由于微軟Windows的廣泛應用,在當前的消費類電子產品中,用得最多的還是FAT文件系統,如U盤、MP3、MP4、數碼相機等,所以找到一款容易移植和使用、占用硬件資源相對較小而功能又強大的FAT開源文件系統,對于單片機系統設計者來說是很重要的。

FatFs Module是一種完全免費開源的FAT文件系統模塊,專門為小型的嵌入式系統而設計。它完全用標準C語言編寫,所以具有良好的硬件平臺獨立性,可以移植到8051、PIC、AVR、SH、Z80、H8、ARM等系列單片機上而只需做簡單的修改。它支持FATl2、FATl6和FAT32,支持多個存儲媒介;有獨立的緩沖區,可以對多個文件進行讀/寫,并特別對8位單片機和16位單片機做了優化。FatFs Module有個簡化版本Tiny—FatFs,它跟完全版FatFs的不同之處主要有兩點:

①占用內存更少,只要1 KB RAM;

②1次僅支持1個存儲介。
 
 
1:下載代碼fatfs_ff007c,添加到工程,并通過ff.h做相應配置, 我的配置如下
#define _WORD_ACCESS 0
#define _FS_READONLY 0
#define _FS_MINIMIZE 0
#define _FS_TINY 1
...【根據它的注釋進行配合即可】
下圖就是工程中的結構:mmc_sd.c是自己實現的fatfs文件系統與SD卡驅動的銜接文件。
2:移植fatfs前,系統需包含sd卡的驅動程序,至少需要實現下面幾個函數

//SD卡的初始化函數
SD_Init()
//SD卡的卡寄存器讀取函數
SD_GetCardInfo(&SDinfo);
//SD卡讀取一個扇區的函數【在文件系統中是通過邏輯塊與物理塊管理文件,但文件系統對硬件設備操作的最小單元是扇區
SD_ReadBlock(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t BlockSize);
//SD卡讀取多個扇區的函數
SD_ReadMultiBlocks
     (uint8_t* pBuffer, uint32_t ReadAddr, uint16_t BlockSize, uint32_t NumberOfBlocks)
//SD卡寫一個扇區的函數
SD_WriteBlock(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t BlockSize)
//SD卡寫多個扇區的函數
 SD_WriteMultiBlocks
 (uint8_t* pBuffer, uint32_t WriteAddr, uint16_t BlockSize, uint32_t NumberOfBlocks)

3:fatfs與SD驅動的接口函數
就是下面4個簡單的函數,實現了就可以了
DSTATUS MMC_disk_initialize(void)
DRESULT MMC_disk_read(BYTE *buff, DWORD sector, BYTE count)
DRESULT  MMC_disk_write(const BYTE *buff, DWORD sector, BYTE count)
DRESULT  MMC_disk_ioctl(BYTE ctrl, void *buff)
 
disk_ioctl:
DRESULT disk_ioctl (
BYTE drv,
BYTE ctrl,
void *buff
)
CPU調用disk_ioctl函數執行ctrl指令對應的動作,這些指令一般都是通過底層flash驅動讀取flash存儲設備中的一些特殊寄存器(如SD卡中的OCR、CID、RCA等)。通過查找,可以發現在調用該函數前,主調函數先會調用disk_initialize,所以我們可以在disk_initialize中初始化SD接口,并將SD卡中的各個寄存器的值都讀取并存儲起來,以備disk_ioctl使用。【disk_ioctl該函數網絡上有教材說可以直接返回0,那是不行的,因為很多地方用disk_ioctl來獲取SD卡的相關信息后,才做出正確的動作,否則出錯,比如f_mkfs:格式化操作等
The RCA register is not available in SPI Mode. 
OCR: 卡操作電壓寄存器 32位, 只讀,每隔0.1V占1位, 第31位卡上電過程是否完成
CID: 卡身份識別寄存器 128bit,只讀, 廠家號,產品號,串號,生產日期
SCR: 卡配置寄存器, 可寫的 64bit 是否用Security特性(LINUX不支持),以及數據位寬(1bit或4bit)
RCA: 卡地址寄存器: 可寫的 16bit SD host和卡進行協商的一個地址,內核中會在代碼里面記錄這個地址,卡這      邊則寫到RCA寄存器
CSD: 卡專有數據寄存器 部分可讀寫 128bit, 卡容量,最大傳輸速率,讀寫操作的最大電流、電壓,讀寫擦出塊的最大長度



 
f_mount:通過文件系統管理一個存儲設備,需先在該設備上創建文件系統(先格式化創建文件系統f_mkfs),如果已經創建好了,只需通過f_mount掛載后即可使用。
//////////////////////具體代碼的實現//////////////////////////////
DSTATUS MMC_disk_initialize(void)
{
    SD_Error err;
    if ((err = SD_Init()) != SD_RESPONSE_NO_ERROR) {
    return err;
} else {
            //USART_SendString(USART2,"MMC_disk_initialize OK!\n");
}
SD_GetCardInfo(&SDinfo); 
return RES_OK;
}
 
DRESULT MMC_disk_read(BYTE *buff, DWORD sector, BYTE count)
{
sector *= 512;
if (count == 1) {
            SD_ReadBlock(buff,sector,512);
    count = 0;
} else {
            SD_ReadMultiBlocks(buff,sector,512,count);
            count = 0;
}
return count?RES_ERROR:RES_OK; 
}
 
DRESULT  MMC_disk_write(const BYTE *buff, DWORD sector, BYTE count)
{
        sector *= 512;
        if (count == 1) {
    SD_WriteBlock((BYTE *)buff,sector,512);
    count = 0;
} else {
            SD_WriteMultiBlocks((BYTE *)buff,sector,512,count);
            count = 0;
}
return count?RES_ERROR:RES_OK; 
}
//可以搜索下下面的各個命令,只有其中的幾個被使用
DRESULT  MMC_disk_ioctl(BYTE ctrl, void *buff)
{
    DRESULT res;
res = RES_ERROR;
    switch(ctrl) {
case CTRL_SYNC:      
   res = RES_OK;
break;
case GET_SECTOR_COUNT:  
   *(DWORD *)buff = (DWORD)SDinfo.CardCapacity / 512;
   res = RES_OK;
   break;
    case GET_SECTOR_SIZE:  
   *(DWORD *)buff = 512;
res = RES_OK;
   break;
case GET_BLOCK_SIZE:  
   *(DWORD *)buff = (DWORD)SDinfo.CardBlockSize;
res = RES_OK;
break;
    case CTRL_POWER:  
   res = RES_OK;
   break;
case CTRL_LOCK:
res = RES_OK;
   break;
    case CTRL_EJECT:
   break;
case MMC_GET_TYPE:  
   break;
case MMC_GET_CSD:    
   break;
case MMC_GET_CID:
   break;
case MMC_GET_OCR:    
   break;
case MMC_GET_SDSTAT:
   break;
}
return res;
}
/////////////////////應用層/////////////////////////
應用層 通過串口顯示菜單,打開文件,讀寫文件,實現人機交互

char * Menu[] = {
  "create new file: 1 \n",
  "create new  dir: 2 \n",
  "delete     file: 3 \n",
  "delete      dir: 4 \n",
  "open       file: 5 \n",
  "open        dir: 6 \n",
  "read       file: 7 \n",
  "write      file: 8 \n",
};
 
static  void  AppTaskUsartDisp(void )
{
  char err;
  char *pString = NULL;
  pQ = OSQCreate(MsgQArray,20); 
  USART_SendString(USART2,"Usart2 is Ok!\n");
  USART_SendString(USART2,Menu[0]);
  USART_SendString(USART2,Menu[1]);
  USART_SendString(USART2,Menu[2]);
  USART_SendString(USART2,Menu[3]);
  USART_SendString(USART2,Menu[4]);
  USART_SendString(USART2,Menu[5]);
  USART_SendString(USART2,Menu[6]);
  USART_SendString(USART2,Menu[7]);
  while(DEF_TRUE) {
      pString = (char *)OSQPend(pQ,0,&err);
      USART_SendString(USART2,pString);
  }
}
void AppOpenfile (void)
{
    u8 err;
FATFS fs;
FIL file;
FRESULT res;
    char * pBoxData;
    pBoxData = (char *)OSMboxPend(pBox,0,&err);
OSQPost(pQ,pBoxData);
res = f_open(&file,pBoxData, FA_OPEN_EXISTING | FA_READ);
if (res == FR_OK) {
        OSQPost(pQ,"\n OPen succed!\n");
} else {
OSQPost(pQ,"\n OPen failed!\n");
}
f_close(&file);
}
void AppCreatefile (void)
{
    u8 err;
FATFS fs;
FIL file;
FRESULT res;
    char * pBoxData;
    pBoxData = (char *)OSMboxPend(pBox,0,&err);
OSQPost(pQ,pBoxData);
res = f_open(&file,pBoxData, FA_CREATE_NEW | FA_READ);
if (res == FR_OK) {
        OSQPost(pQ,"\n create succed!\n");
} else {
OSQPost(pQ,"\n create failed!\n");
}
f_close(&file);
}
char   fileData[30] = {0};
void AppReadfile (void)
{
    u8 err;
FATFS fs;
FIL file;
FRESULT res;
    char * pBoxData;
u32 br;
    pBoxData = (char *)OSMboxPend(pBox,0,&err);
OSQPost(pQ,pBoxData);
res = f_open(&file,pBoxData, FA_OPEN_EXISTING | FA_READ);
if (res == FR_OK) {
        OSQPost(pQ,"\n OPen succed!\n");
} else {
OSQPost(pQ,"\n OPen failed!\n");
}
res = f_read(&file,fileData,20,&br);
fileData[21] = '\0';
if (res == FR_OK) {
        OSQPost(pQ,"Data:");
OSQPost(pQ,fileData);
} else {
OSQPost(pQ,"\n read failed!\n");
}
f_close(&file);
}
void AppWritefile (void)
{
    u8 err;
u8 Len;
FATFS fs;
FIL file;
FRESULT res;
    char * pBoxData;
u32 br;
    pBoxData = (char *)OSMboxPend(pBox,0,&err);
OSQPost(pQ,pBoxData);
res = f_open(&file,pBoxData, FA_OPEN_EXISTING | FA_READ | FA_WRITE);
if (res == FR_OK) {
        OSQPost(pQ,"\n OPen succed!\n");
} else {
OSQPost(pQ,"\n OPen failed!\n");
}
OSQPost(pQ,"Input:");
pBoxData = (char *)OSMboxPend(pBox,0,&err);
Len = strlen(pBoxData);
res = f_write(&file,pBoxData,Len,&br);
if (res == FR_OK) {
OSQPost(pQ,"\n write OK!\n");
} else {
OSQPost(pQ,"\n write failed!\n");
}
f_close(&file);
}
 
static  void  AppTaskSdCard(void )
{
    u8 err;
char BoxData;
FATFS fs;
FRESULT res;
FIL file;
pBox = OSMboxCreate((void *)0);
res = f_mount(0,&fs);
OSQPost(pQ,"fatfs!\n");
    while (1) {
BoxData = (char)OSMboxPend(pBox,0,&err);    
switch (BoxData) {
case '1'://create new file
   OSQPost(pQ,"new filename:");
AppCreatefile();
   break;
case '2':
   OSQPost(pQ,"2222!\n");
   break;
case '3':
   OSQPost(pQ,"3333!\n");
   break;
case '4':
   OSQPost(pQ,"f4444!\n");
   break;
case '5': //Openfile  
   OSQPost(pQ,"filename:");
AppOpenfile();
   break;
case '6':
   OSQPost(pQ,"6666!\n");
   break;
case '7': //read file:
   OSQPost(pQ,"filename:");
AppReadfile();
   break;
case '8': //write file
   OSQPost(pQ,"filename:\n");
          AppWritefile();
   break;
default:
   OSQPost(pQ,"null!\n");
   break;
}
}
}
 
 
//返回的是 字符串的字符個數
int GetStringFromFifo(sequeue *sq, datatype *buff)
{
    int Count = 0;
do {
   *buff = DeQueue(sq);
if (*buff == NULL || *buff == ENDFLAG ) {
  break;
}
if (++Count <= BUFFERSIZE - 1) {
  buff ++;
} while(1);
*(buff++) = '\0';
return Count;
}
 
datatype InputBuffer[BUFFERSIZE];
 
static  void  AppTaskUsartInput (void *p_arg)
{
   u8 tick=0 , Cnt = 0 ,err;
   NVIC_InitTypeDef  NVIC_InitStruct;
   USART_InitTypeDef USART_InitStructure;
   (void)p_arg;
   NVIC_InitStruct.NVIC_IRQChannel = USART2_IRQChannel;
   NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2;
   NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
   NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
 
   USART_InitStructure.USART_BaudRate = 115200;
   USART_InitStructure.USART_WordLength = USART_WordLength_8b;
   USART_InitStructure.USART_StopBits = USART_StopBits_1;
   USART_InitStructure.USART_Parity = USART_Parity_No;
   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
 
   NVIC_Init(&NVIC_InitStruct);
   STM_EVAL_COMInit(COM1, &USART_InitStructure);
   USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
 
   SetNull(&USART_FIFO);
   pSem = OSSemCreate(0);
     
   while(DEF_TRUE) {
        OSSemPend(pSem,0,&err);
tick++;
        //OSTimeDlyHMSM(0,0,0,10);  
Cnt = GetStringFromFifo(&USART_FIFO,InputBuffer);
//OSQPost(pQ,InputBuffer);
if (Cnt == 1) {
   OSMboxPost(pBox,(void *)InputBuffer[0]);
} else {
   OSMboxPost(pBox,(void *)InputBuffer);        
}  
if(tick&0x01)
{
   GPIO_SetBits(GPIOD,GPIO_Pin_2);
   GPIO_SetBits(GPIOD,GPIO_Pin_4);
GPIO_ResetBits(GPIOD,GPIO_Pin_3);
GPIO_ResetBits(GPIOD,GPIO_Pin_7);
}
else
{
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
GPIO_ResetBits(GPIOD,GPIO_Pin_4);
GPIO_SetBits(GPIOD,GPIO_Pin_3);
GPIO_SetBits(GPIOD,GPIO_Pin_7);
}
   }
}
///////////////測試/////////////////////
 
 
 
關閉窗口

相關文章

freemovies性欧美| 亚洲精品女人| 欧美写真视频一区| 色综合av综合无码综合网站| 欧美中文在线观看| 欧美一区二区二区| 日韩一区二区三区免费视频| aaa大片免费观看| 隣の若妻さん波多野结衣| 亚洲伦理一区二区三区| 艹b视频在线观看| 日本成人看片网址| 日本久久中文字幕| 亚洲人午夜精品免费| 一本久久a久久精品亚洲| 成人av综合在线| 欧美黄在线观看| 一区二区三区自拍视频| 午夜影院免费在线| 美女激情网站| 精品一区二区三区免费站| 中文字幕人妻精品一区| 亚洲天堂一级片| www.五月天色| 欧美在线一区二区三区四| 日韩一区二区电影| 国产精品1区2区3区| 91欧美国产| av日韩精品| 手机在线观看av| 国产日本在线观看| 国产色视频网站| 国产亚洲精品久久久久久青梅| 国产精品久久久久久久成人午夜| 高潮毛片无遮挡| 欧美精品久久久久久久久25p| 天天做天天爱天天高潮| 欧美成人一二三| 亚洲高清一二三区| 国产精品国产三级国产普通话三级 | 成人狠狠色综合| 香蕉久久视频| 刘亦菲久久免费一区二区| aaa在线视频| xxxx 国产| 国产久一道中文一区| 欧美一级视频免费在线观看| 欧洲视频一区二区| 国产精品国产三级国产普通话99| www.日韩在线| 国产精品91一区二区| 日韩精品电影在线| 久久先锋影音| 天堂一区二区在线| 久久久久久夜| 日韩欧美ww| 视频精品一区| 色呦呦在线看| 男人影院在线观看| 免费高清成人| 熟年交尾五十路视频在线播放| 影音先锋男人看片资源站| www.蜜桃av.com| aaa一区二区三区| 国产精品玖玖玖| 99国产精品99| 懂色av蜜臀av粉嫩av分享吧| 国产精品久久无码一三区| 一区二区日韩视频| 99精品视频免费看| 欧美一级淫片aaaaaa| 色wwwwww| 亚洲国产精品无码久久久| 久久久久久少妇| 日本少妇xxxxx| 国产aⅴ激情无码久久久无码| 老司机福利av| 免费91在线观看| xxxx国产视频| 久久久男人的天堂| 丰满少妇一区二区三区| 美女一区二区三区视频| 午夜国产一区二区三区| 91插插插影院| 亚洲最大免费视频| 美女100%露胸无遮挡| 特级片在线观看| 日本视频www| 波多野结衣在线网址| 黄色一级视频免费观看| 波多野结衣国产| 亚洲一级黄色大片| 亚洲色图狠狠干| 亚洲精品爱爱久久| www.午夜| 亚在线播放中文视频| 九色porny丨首页在线| 中文字幕免费在线| 超碰免费在线观看| 白白色在线观看| 亚洲一区二区三区四区| 免费一级欧美片在线观看网站| 欧美亚洲大陆| 欧美激情视频一区二区三区免费| 三级欧美韩日大片在线看| 国产成人免费在线视频| 国产精品女上位| 色天使色偷偷av一区二区| 欧美一区二区三区免费大片| 国产亚洲精品久久久久动| 国外成人在线播放| 国产精品福利视频| 天天做天天躁天天躁| 黄色三级视频在线| 日韩免费成人av| 久久久久久久久久成人| 爱福利一区二区| 免费黄色av网站| 福利小视频在线观看| 日韩精品99| 国产成人短视频在线观看| 久久亚洲精品伦理| 国产精品天天摸av网| 色www精品视频在线观看| 精品亚洲aⅴ在线观看| 98精品在线视频| 欧洲一区二区日韩在线视频观看免费| 成人在线观看你懂的| 在线xxxxx| 国产激情视频网站| 亚洲日本视频在线观看| 区二区三区在线| 国产剧情av在线| 福利写真视频网站在线| 亚洲va久久| 久久电影网站中文字幕 | 欧美国产美女| 国产一区 二区 三区一级| 亚洲激情网站免费观看| 亚洲精品成人网| 欧美性视频在线| 伊人婷婷久久| av在线天堂网| 少妇光屁股影院| 无码任你躁久久久久久久| 精品偷拍激情视频在线观看| 在线欧美成人| 国产精品1区| 99精品视频免费观看视频| 中日韩免费视频中文字幕| 欧美成人精精品一区二区频| 日韩**中文字幕毛片| 老司机午夜免费福利视频| 亚洲一区二区乱码| 成人av一区二区三区在线观看| www.三区| 欧美美女日韩| 日韩午夜av在线| 一区二区三区四区蜜桃| 在线亚洲欧美视频| 欧美三日本三级少妇三99| 亚洲熟女一区二区三区| 国产美女永久免费| 一级毛片免费观看| 国产一区二区三区免费观看在线| 亚洲主播在线| 亚洲成a人在线观看| 欧美精品乱人伦久久久久久| 日韩精品在线播放| 亚洲一区二区三区xxx视频| 国产v亚洲v天堂无码久久久| 伊人手机在线视频| av电影免费看| 欧美三级精品| 日韩主播视频在线| 在线免费一区三区| 国产精品久久久久久久久久免费 | 亚洲午夜91| 最近日韩中文字幕| 欧美日韩日日夜夜| 国产精品视频久久久久| 久久久国产欧美| 在线观看国产小视频| 手机看片1024久久| 麻豆精品av| 久久久久久99久久久精品网站| 亚洲美女激情视频| 国产精品吴梦梦| 自拍偷拍 国产| 亚洲视频在线观看免费视频| 中文日本高清免费| 中国字幕a在线看韩国电影| 99国产精品久久久久久久成人热| 亚洲成人福利片| 欧美重口另类videos人妖| 欧美性猛交xxx乱久交| 国产精品一级视频| 成人在线观看一区| 国产综合精品一区| 黑人欧美xxxx| 成人看片人aa| 无码一区二区精品| 日本亚洲欧美美色| 手机在线观看av| 九九视频精品免费| 亚洲丝袜一区在线| 每日在线观看av| 影音先锋国产在线| 色欧美激情视频在线| 亚洲免费激情| 日韩精品中文字幕在线不卡尤物| 精品在线观看一区二区| 日韩在线一卡二卡| 一日本道久久久精品国产| 免费网站在线观看人| 爽爽淫人综合网网站 | 欧美xxxx吸乳| 在线天堂中文字幕| 日韩一二三四| 最新亚洲激情| 日韩欧美精品在线视频| 亚洲精品二区| www.五月婷婷.com| 午夜视频在线| 日本欧美一区二区| 亚洲天堂2020| 日韩中文字幕组| 亚洲婷婷综合网| 亚洲日本高清| 亚洲一级高清| 精品国产乱码久久久久久免费| 青春草在线视频免费观看| 少妇又紧又色又爽又刺激视频| 自拍视频在线免费观看| 国语产色综合| 色av成人天堂桃色av| 日本一区二区三区免费观看| 久久久久久少妇| 精品孕妇一区二区三区| 久久99国产精品免费| 精品国产区一区二区三区在线观看| 农村妇女精品一二区| 综合蜜桃精品| 丁香综合av| 一本一道综合狠狠老| 亚洲bbw性色大片| 99热在线观看精品| а√最新版地址在线天堂| 99av国产精品欲麻豆| 国产午夜精品美女视频明星a级| 国产精品亚洲a| 国产变态拳头交视频一区二区| 蜜桃a∨噜噜一区二区三区| 欧美优质美女网站| 亚洲天堂第一区| 亚洲一道本在线| 亚洲网址在线观看| 色婷婷久久综合| av 日韩 人妻 黑人 综合 无码| 亚洲AV无码精品自拍| 在线观看电影av| 成人免费毛片片v| 国产ts一区二区| 久草手机视频在线观看| 国产最新视频在线| 国产精品一区二区你懂的| 91高潮精品免费porn| 老司机成人免费视频| 麻豆最新免费在线视频| 99国产精品久久| 成人在线激情视频| 国产黄色免费视频| 成人精品三级| 一本色道久久综合亚洲91 | 欧美日韩蜜桃| 日韩欧美国产中文字幕| 成人精品久久一区二区三区| 欧洲猛交xxxx乱大交3| 免费在线你懂的| 2017欧美狠狠色| 国产精选一区二区| 黄色www视频| 欧美一区二区三区红桃小说| 日韩欧美一区二区不卡| 91精品999| 麻豆影视在线观看| 懂色av一区二区在线播放| 国产在线播放91| 日本精品入口免费视频| 欧美jizz18| 欧美人xxxx| 1314成人网| 青青青草原在线| 久久精品人人做人人爽97| 久久久久久久久久久久久久久久av| www.色播.com| 亚洲人成精品久久久| 亚洲欧美制服第一页| 午夜一区二区三区免费| 成全电影播放在线观看国语| 国产日韩三级在线| 亚洲国产精品综合| 欧美wwwwxxxx| 好吊日精品视频| 欧美一级在线亚洲天堂| 天堂av免费在线观看| 粉嫩一区二区三区四区公司1| 精品三级在线看| 日韩精品卡通动漫网站| 黄色免费网站在线观看| 亚洲一区欧美一区| 亚洲国产精品毛片av不卡在线| 国产夫妻在线视频| 91丨九色丨蝌蚪丨老版| 日本不卡一区二区三区四区| 黄色毛片在线| 国产精品综合二区| 欧美高清视频一区二区三区在线观看| 影音先锋5566中文源资源 | 久久精品一区中文字幕| 日本午夜在线观看| 午夜精品久久久久久久久久蜜桃| 欧美影片第一页| xxxxwww一片| 性欧美videoshd高清| 一本一本久久a久久精品综合麻豆| 日本中文字幕观看| 在线视频91p| 精品久久久在线观看| 在线观看免费视频污| 午夜免费视频在线国产| 精品国产91久久久| 91国内在线播放| 成人ww免费完整版在线观看| 日本国产一区二区| 偷偷色噜狠狠狠狠的777米奇| 欧美xxxx少妇| 宅男噜噜噜66一区二区66| 国产精品无码久久久久一区二区| 免费v片在线观看| 欧美成人精精品一区二区频| 免费一级suv好看的国产网站| 成人免费福利| 亚洲国产精品久久久久秋霞蜜臀| 国产精品久久久免费看| 视频在线观看免费影院欧美meiju| 中文字幕亚洲欧美一区二区三区| 久久久黄色大片| 亚洲成人tv| 久久精品视频导航| 中文字幕一区二区三区免费看| 久久一区91| 国产日韩精品在线播放| 久热中文字幕在线观看| 久久国产婷婷国产香蕉| 成人精品视频在线| 国产麻豆一区二区三区精品| 国产精品资源在线| av动漫在线播放| 草草影院在线观看| 欧美日韩激情在线| 四虎成人免费影院| 久久精品亚洲成在人线av网址| 久久久久久国产精品| 婷婷综合激情网| 久久精品国产免费| 韩国无码av片在线观看网站| 你懂得网站在线| 欧美精品自拍偷拍| 国产精品成人国产乱| 亚洲成av人片一区二区密柚 | 久久久精品国产sm调教网站| 久久成人av| 91精品久久久久久| 蜜桃狠狠狠狠狠狠狠狠狠| 中文字幕一区二区三中文字幕| 性久久久久久久久久久久久久| 成人影院大全| 美女性感视频久久久| 亚洲欧洲国产综合| 成人av在线资源网| 无限资源日本好片| 国产精品亚洲一区二区三区在线观看| 日韩在线激情视频| 亚洲av成人精品日韩在线播放| 国产一区二区精品久久99| 亚洲 自拍 另类小说综合图区| 黄网站视频在线观看| 日韩久久免费视频| av在线资源观看| 国产精品一卡二卡在线观看| 999精品网站| 日韩另类视频| 91sa在线看| 午夜福制92视频| 一区二区三区**美女毛片| 性猛交ⅹxxx富婆video | 爱情岛论坛亚洲品质自拍视频网站 | 精品免费日产一区一区三区免费| 超碰在线免费|