日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在应用程序中实现对NandFlash的操作

發(fā)布時(shí)間:2023/12/9 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在应用程序中实现对NandFlash的操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

以TC58NVG2S3ETA00?為例:

下面是它的一些物理參數(shù):

圖一

?

?

?

?

?

?

圖二

?

?

?

?

?

?

?

?

?

?

?

圖三

?

?

?

?

?

?

?

?

圖四

?

?

?

?

?

?

?

?

?

?

?

?

?

圖五

?

?

?

圖6-0

圖6-1

?

說明一下,在圖6-1中中間的那個(gè)布局表可以看做是實(shí)際的NandFlash一頁數(shù)據(jù)的布局,其中Data區(qū)域用于存放有效的數(shù)據(jù),也就是我們可以通過類似read、write、pread、pwrite可以訪問的區(qū)域,那每頁中的64字節(jié)的OOB區(qū)域是無法通過前面的幾個(gè)函數(shù)訪問的,他們會(huì)自動(dòng)跳過OOB區(qū)域,訪問OOB區(qū)域需要借助特殊的命令。

簡單說明一下:Data A(512B)對(duì)應(yīng)的ECC校驗(yàn)碼存放在ECC for Data A(4 byte)中,OOB A (8byte) 對(duì)應(yīng)的ECC校驗(yàn)碼存放在緊接著的下一個(gè)ECC for Data A(4 byte)中,雖然用4字節(jié)存放ECC,但是對(duì)于本例,ECC只占3個(gè)字節(jié)。在實(shí)際使用中如果解決方案中用不到OOB A/B/C/D,可以不用管他們對(duì)應(yīng)的ECC,只需要關(guān)心Data區(qū)域?qū)?yīng)的ECC。如果使能了硬件ECC,硬件會(huì)自動(dòng)把計(jì)算生成的ECC寫到OOB中。可以參考http://www.cnblogs.com/pengdonglin137/p/3467960.html 。

讀NandFlash需要按頁讀,即一次讀一頁;寫NandFlash需要按頁寫,即每次寫一頁;擦除NandFlash需要按塊擦,即每次要擦除一塊。

對(duì)與NandFlash等塊設(shè)備的訪問操作,mtd-utils工具集中提供了非常好的支持(可以到http://www.linux-mtd.infradead.org/進(jìn)行了解),要使用mtd-utils工具集首先需要搞到mtd-utils的源碼,并且使用目標(biāo)設(shè)備上的交叉工具編譯鏈進(jìn)行編譯,具體方法可以參考:http://www.cnblogs.com/pengdonglin137/p/3415550.html,其中介紹了如何生成可以再目標(biāo)板上運(yùn)行的mtd-utils工具。關(guān)于mtd-utils工具的使用可以參考:http://www.cnblogs.com/pengdonglin137/p/3415663.html 其中介紹了mtd-utils中常用的工具。

我們可以參考mtd-utils中工具的實(shí)現(xiàn),從而完成在自己的應(yīng)用程序中實(shí)現(xiàn)對(duì)NandFlash的操作。常用的命令如下:

#define MEMGETINFO??????? _IOR('M', 1, struct mtd_info_user)
#define MEMERASE??????? _IOW('M', 2, struct erase_info_user)
#define MEMWRITEOOB??????? _IOWR('M', 3, struct mtd_oob_buf)
#define MEMREADOOB??????? _IOWR('M', 4, struct mtd_oob_buf)
#define MEMLOCK??????????? _IOW('M', 5, struct erase_info_user)
#define MEMUNLOCK??????? _IOW('M', 6, struct erase_info_user)
#define MEMGETREGIONCOUNT??? _IOR('M', 7, int)
#define MEMGETREGIONINFO??? _IOWR('M', 8, struct region_info_user)
#define MEMSETOOBSEL??????? _IOW('M', 9, struct nand_oobinfo)
#define MEMGETOOBSEL??????? _IOR('M', 10, struct nand_oobinfo)
#define MEMGETBADBLOCK??????? _IOW('M', 11, __kernel_loff_t)
#define MEMSETBADBLOCK??????? _IOW('M', 12, __kernel_loff_t)
#define OTPSELECT??????? _IOR('M', 13, int)
#define OTPGETREGIONCOUNT??? _IOW('M', 14, int)
#define OTPGETREGIONINFO??? _IOW('M', 15, struct otp_info)
#define OTPLOCK??????????? _IOR('M', 16, struct otp_info)
#define ECCGETLAYOUT??????? _IOR('M', 17, struct nand_ecclayout_user)
#define ECCGETSTATS??????? _IOR('M', 18, struct mtd_ecc_stats)
#define MTDFILEMODE??????? _IO('M', 19)
#define MEMERASE64??????? _IOW('M', 20, struct erase_info_user64)
#define MEMWRITEOOB64??????? _IOWR('M', 21, struct mtd_oob_buf64)
#define MEMREADOOB64??????? _IOWR('M', 22, struct mtd_oob_buf64)
#define MEMISLOCKED??????? _IOR('M', 23, struct erase_info_user)

?

打開設(shè)備

這里需要注意的是,打開的設(shè)備結(jié)點(diǎn)是/dev/mtd?,而不是/dec/mtdblock?,原因可以參考:

http://www.cnblogs.com/pengdonglin137/p/3316523.html,其中介紹了mtd與mtdblock的區(qū)別。

fd = open ("/dev/mtd0", O_SYNC | O_RDWR);

?

獲取設(shè)備信息

#include <linux/types.h> structmtd_info_user { __u8 type; __u32 flags; __u32 size; // Total size of the MTD __u32 erasesize;__u32 writesize;__u32 oobsize;// Amount of OOB data per block (e.g. 16)/* The below two fields are obsolete and broken, do not use them * (TODO: remove at some point) */ __u32 ecctype;__u32 eccsize; };struct mtd_info_user mtd; ioctl(fd, MEMGETINFO,&mtd) ; 其中type可以用來區(qū)分是NorFlash還是NandFlash。

擦除NandFlash

#include <mtd/mtd-abi.h> #include <linux/types.h>struct erase_info_user {__u32 start;__u32 length; };typedef struct erase_info_user erase_info_t;erase_info_t erase;int isNAND, bbtest = 1;erase.length = DevInfo->erasesize; // erase.length 表示的是擦除大小,也就是一塊的大小,如128KB // DevInfo->size 為某個(gè)/dev/mtdx的大小 // erasse.start應(yīng)該是按塊對(duì)齊遞增 isNAND = (DevInfo->typenum== MTD_NANDFLASH) ? 1 : 0;for (erase.start = 0; erase.start < DevInfo->size; erase.start += DevInfo->erasesize) {if (bbtest) {loff_t offset = erase.start;int ret = ioctl(DevInfo->fd, MEMGETBADBLOCK, &offset); //判斷是不是壞塊if (ret > 0) {if (!quiet)DEBUG ("\nSkipping bad block at 0x%08x\n", erase.start);continue;//發(fā)現(xiàn)是壞塊,應(yīng)該跳過 } else if (ret < 0) {if (errno == EOPNOTSUPP) {bbtest = 0;if (isNAND) {fprintf(stderr, "%s: Bad block check not available\n", DevInfo->dir);return 1;}} else {fprintf(stderr, "\n%s: MTD get bad block failed: %s\n", DevInfo->dir, strerror(errno));return 1;}}}if (!quiet){fprintf(stderr, "\rErasing %d Kibyte @ %x -- %2llu %% complete.", \(DevInfo->erasesize) / 1024, erase.start,(unsigned long long) erase.start * 100 / (DevInfo->size));}if (ioctl(DevInfo->fd, MEMERASE, &erase) != 0) //執(zhí)行擦除操作 {fprintf(stderr, "\n%s: MTD Erase failure: %s\n", DevInfo->dir,strerror(errno));continue;} }

寫NandFlash

這里分為寫數(shù)據(jù)區(qū)和寫OOB區(qū)

寫數(shù)據(jù)區(qū),對(duì)于本例一次要寫一頁,也就是2KB,寫OOB區(qū),對(duì)于本例可以操作的只有32字節(jié),剩下的32字節(jié)用于存放ECC。

struct mtd_oob_buf {__u32 start;__u32 length;unsigned char *ptr; };int nandwrite(DeviceInfo* meminfo) {int imglen = 0, pagelen;bool baderaseblock = false;int blockstart = -1;loff_t offs;int ret, readlen;unsigned char tmp_oob[32];//OOB A/B/C/D,一共32字節(jié)struct mtd_oob_buf OOB_INFO ;sourceaddr = meminfo->head->file_offset; //要讀的部分在鏡像文件中的偏移量sourcelen = meminfo->head->size; //要讀的部分的大小int num_to_read = 0;OOB_INFO.start = 0;OOB_INFO.length = meminfo->head->oob_usr_length; //32字節(jié),用戶可以訪問的OOB的大小,也就是OOB A/B/C/DOOB_INFO.ptr = tmp_oob;pagelen = meminfo->writesize; // 2KBimglen = sourcelen; // 鏡像文件的長度 mtdoffset = meminfo->head->flash_offset; //要寫的部分在/dev/mtdx中的偏移量,以字節(jié)為單位/* Determine if we are reading from standard input or from a file. */if (0 == sourceaddr) {DEBUG("Have no sourceaddr return ****************************\n");return 1;}// Check, if length fits into deviceif ( ((imglen / pagelen) * meminfo->writesize) > (meminfo->size - mtdoffset)) {fprintf (stderr, "Image %d bytes, NAND page %d bytes, OOB area %u bytes, device size %u bytes\n",imglen, pagelen, meminfo->writesize, meminfo->size);perror ("Input file does not fit into device");goto closeall;}while ((imglen>0) && (mtdoffset < meminfo->size)){//blockstart 將來存放的是正在寫的那塊的起始地址,并且是塊對(duì)齊的//mtdoffset 表示的是在某個(gè)mtd設(shè)備中的整體偏移量,可以按塊遞增,也可以按頁遞增//設(shè)置blockstart的目的是:// 假如檢測到一個(gè)好的塊,開始進(jìn)行寫操作,但是在寫的過程中發(fā)生了寫錯(cuò)誤,可以認(rèn)為這塊已經(jīng)//是壞塊了,需要重新再找一個(gè)好的塊,然后重新寫入之前的數(shù)據(jù),因此需要知道剛才那個(gè)壞塊的起始地址// mtdoffset & (~meminfo->erasesize + 1) 這種獲取塊起始地址的算法值得借鑒while (blockstart != (mtdoffset & (~meminfo->erasesize + 1))){blockstart = mtdoffset & (~meminfo->erasesize + 1);offs = blockstart;baderaseblock = false;if (!quiet){fprintf (stderr, "\rWriting data to block %d at offset 0x%x", \blockstart / meminfo->erasesize, blockstart);}/* Check all the blocks in an erase block for bad blocks */// meminfo->fd 是某個(gè)/dev/mtdx的文件描述符do {if ((ret = ioctl(meminfo->fd, MEMGETBADBLOCK, &offs)) < 0){perror("ioctl(MEMGETBADBLOCK)");goto closeall;}if (ret == 1){baderaseblock = true;if (!quiet){fprintf (stderr, "Bad block at %x block(s) ""from %x will be skipped\n",(int) offs, blockstart);}}if (baderaseblock){mtdoffset = blockstart + meminfo->erasesize;}offs += meminfo->erasesize;} while ( offs < blockstart + meminfo->erasesize );}readlen = meminfo->writesize; // 2KBif (0 != sourceaddr){if((meminfo->head->imageType == YAFFS) || (meminfo->head->imageType == OOB_RAW)){writeoob = true;}else{writeoob = false;}memset(writebuf, 0xff, sizeof(writebuf));if(imglen < readlen){num_to_read = imglen;}else{num_to_read = readlen;}// 從鏡像文件中偏移量為sourceaddr處讀取num_to_read個(gè)字節(jié)到writebuf中// ALLIMAGEFD 為鏡像文件的文件描述符if(pread(ALLIMAGEFD, writebuf, num_to_read, sourceaddr) < 0) {perror("fail to pread\n");return -1;}sourceaddr += num_to_read;if(writeoob){memset(tmp_oob, 0xff , OOB_FREE_MAX);// 從鏡像文件中偏移量為sourceaddr+meminfo->head->oob_usr_offset處讀取meminfo->head->oob_usr_length個(gè)字節(jié)到tmp_oob中,其中meminfo->head->oob_usr_offset是OOB A相對(duì)與OOB區(qū)域的偏移量,meminfo->head->oob_usr_length 在本例中為32字節(jié)if(pread(ALLIMAGEFD, tmp_oob, meminfo->head->oob_usr_length, sourceaddr+meminfo->head->oob_usr_offset) < 0){perror("fail to pread\n");return -1;}sourceaddr += meminfo->oobsize;}}if(-1 == pwrite(meminfo->fd, writebuf, meminfo->writesize, mtdoffset)) //寫NandFlash {/*下面這段程序所完成的就是剛才所說的在寫之前檢測到是好塊,但是在寫的過程出現(xiàn)了寫錯(cuò)誤,這個(gè)時(shí)候需要完成?如下流程:1、計(jì)算已經(jīng)在當(dāng)前塊上寫入多少內(nèi)容,比如下面的rewind_blocks是為了計(jì)算在當(dāng)前塊上已經(jīng)寫了多少頁,這里需要注意的是;rewind_bytes又加了一個(gè)readlen,也就是一頁的大小,目的是保證sourceaddr的可以回退到剛開始寫當(dāng)前塊是sourceaddr的值,可以看到在上面的程序中每次將要寫的內(nèi)容讀到writebuf后,sourceaddr已經(jīng)進(jìn)行了自增操作,并沒有保證剛讀到writebuf中的內(nèi)容可以成功寫入。但是mtdoffset進(jìn)行自增的前提是偏移量為mtdoffset的頁寫成功。其實(shí)程序可以這么改進(jìn):將sourceaddr的自增操作跟mtdoffset的自增操作放在一起,此時(shí)rewind_bytes就不需要再加readlen了。對(duì)于oob,一般只有yaffs鏡像中有oob,而向cramfs、jffs2、ubifs這沒有,如果有oob也需要對(duì)rewind_byte進(jìn)行處理2、對(duì)當(dāng)前塊進(jìn)行擦除3、如果需要進(jìn)行壞塊標(biāo)記,則將當(dāng)前塊標(biāo)記為壞塊4、將mtdoffset指向當(dāng)前塊的下一塊起始地址5、恢復(fù)imglen為剛開始處理當(dāng)前塊時(shí)的值,由于imglen也是保證當(dāng)前頁成功寫入后才自減,所以只需要加上rewind_blocks即可*/int rewind_blocks;off_t rewind_bytes;erase_info_t erase;perror("ioctl(MEMEWRITEPAGE)");/* Must rewind to blockstart if we can */rewind_blocks = (mtdoffset - blockstart) / meminfo->writesize; /* Not including the one we just attempted */rewind_bytes = (rewind_blocks * meminfo->writesize) + readlen;if (writeoob){rewind_bytes += (rewind_blocks + 1) * meminfo->oobsize;}sourceaddr -= rewind_bytes;erase.start = blockstart;erase.length = meminfo->erasesize;fprintf(stderr, "Erasing failed write from %08lx-%08lx\n",(long)erase.start, (long)erase.start+erase.length-1);if (ioctl(meminfo->fd, MEMERASE, &erase) != 0){perror("MEMERASE");goto closeall;}if (markbad){loff_t bad_addr = mtdoffset & (~meminfo->erasesize + 1);fprintf(stderr, "Marking block at %08lx bad\n", (long)bad_addr);if (ioctl(meminfo->fd, MEMSETBADBLOCK, &bad_addr)) {perror("MEMSETBADBLOCK");/* But continue anyway */}}mtdoffset = blockstart + meminfo->erasesize;imglen += rewind_blocks * meminfo->writesize;if(writeoob){imglen += rewind_blocks * meminfo->oobsize;}continue;}imglen -= readlen;if(writeoob){imglen -= meminfo->oobsize;OOB_INFO.start = mtdoffset;if (ioctl(meminfo->fd, MEMWRITEOOB, &OOB_INFO)){perror("fail to ioctl");}}mtdoffset += meminfo->writesize;}closeall:if ((imglen > 0)){perror ("Data was only partially written due to error\n");exit (EXIT_FAILURE);}return EXIT_SUCCESS; }

?

對(duì)于寫NandFlash,有的設(shè)備支持一次性把data和oob一塊寫進(jìn)去。代碼如下:

struct mtd_info_user {uint8_t type;uint32_t flags;uint32_t size; // Total size of the MTD uint32_t erasesize;uint32_t writesize;uint32_t oobsize; // Amount of OOB data per block (e.g. 16)/* The below two fields are obsolete and broken, do not use them* (TODO: remove at some point) */uint32_t ecctype;uint32_t eccsize; };struct mtd_epage_buf {unsigned long long start;unsigned long data_len;unsigned long oob_len;unsigned char * data_ptr;unsigned char * oob_ptr; };

#define MEMEWRITEPAGE _IOWR('M', 23, struct mtd_epage_buf)

#define MAX_PAGE_SIZE 8192
#define MAX_OOB_SIZE 512

/*
* Buffer array used for writing data
*/
unsigned char writebuf[MAX_PAGE_SIZE];
char oobbuf[MAX_OOB_SIZE];

int nandwrite(int argc, char * const argv[]) {/*int cnt = 0;*/int fd = -1;/*int ifd = -1;*/int imglen = 0, pagelen;bool baderaseblock = false;int blockstart = -1;struct mtd_info_user meminfo;struct mtd_epage_buf eccbuf;loff_t offs;int ret, readlen;/*process_options(argc, argv);*/mtdoffset = 0; /* reinit */erase_buffer(oobbuf, sizeof(oobbuf));if (pad && writeoob) {fprintf(stderr, "Can't pad when oob data is present.\n");exit (EXIT_FAILURE);}/* Open the device */if ((fd = open(mtd_device, O_RDWR)) == -1) {perror(mtd_device);exit (EXIT_FAILURE);}/* Fill in MTD device capability structure */if (ioctl(fd, MEMGETINFO, &meminfo) != 0) {perror("MEMGETINFO");close(fd);exit (EXIT_FAILURE);}/* Determine if we are reading from standard input or from a file. */if (NULL == sourceaddr) {DEBUG("Have no sourceaddr return ****************************\n");return 0;}pagelen = meminfo.writesize + ((writeoob) ? meminfo.oobsize : 0);/** For the standard input case, the input size is merely an* invariant placeholder and is set to the write page* size. Otherwise, just use the input file size.** TODO: Add support for the -l,--length=length option (see* previous discussion by Tommi Airikka <tommi.airikka@ericsson.com> at* <http://lists.infradead.org/pipermail/linux-mtd/2008-September/* 022913.html>*/imglen = sourcelen;// Check, if file is page-alignedif ((!pad) && ((imglen % pagelen) != 0)) {fprintf (stderr, "Input file is not page-aligned. Use the padding ""option.\n");goto closeall;}// Check, if length fits into deviceif ( ((imglen / pagelen) * meminfo.writesize) > (meminfo.size - mtdoffset)) {fprintf (stderr, "Image %d bytes, NAND page %d bytes, OOB area %u bytes, device size %u bytes\n",imglen, pagelen, meminfo.writesize, meminfo.size);perror ("Input file does not fit into device");goto closeall;}const int allSizeConst = imglen;/*DEBUG("file:%s, line:%d, imglen:%d, mtdoffset:%d, meminfo.size:%d\n", __FILE__, __LINE__, imglen, mtdoffset, meminfo.size);*//** Get data from input and write to the device while there is* still input to read and we are still within the device* bounds. Note that in the case of standard input, the input* length is simply a quasi-boolean flag whose values are page* length or zero.*/while (imglen && (mtdoffset < meminfo.size)) {// new eraseblock , check for bad block(s)// Stay in the loop to be sure if the mtdoffset changes because// of a bad block, that the next block that will be written to// is also checked. Thus avoiding errors if the block(s) after the// skipped block(s) is also bad (number of blocks depending on// the blockalignwhile (blockstart != (mtdoffset & (~meminfo.erasesize + 1))) {blockstart = mtdoffset & (~meminfo.erasesize + 1);offs = blockstart;baderaseblock = false;if (!quiet)fprintf (stdout, "Writing data to block %d at offset 0x%x\n",blockstart / meminfo.erasesize, blockstart);/* Check all the blocks in an erase block for bad blocks */do {if ((ret = ioctl(fd, MEMGETBADBLOCK, &offs)) < 0) {perror("ioctl(MEMGETBADBLOCK)");goto closeall;}if (ret == 1) {baderaseblock = true;if (!quiet)fprintf (stderr, "Bad block at %x block(s) ""from %x will be skipped\n",(int) offs, blockstart);}if (baderaseblock) {mtdoffset = blockstart + meminfo.erasesize;}offs += meminfo.erasesize;} while ( offs < blockstart + meminfo.erasesize );}readlen = meminfo.writesize;if (NULL != sourceaddr) {if (pad && (imglen < readlen)){readlen = imglen;erase_buffer(writebuf + readlen, meminfo.writesize - readlen);}memcpy(writebuf, sourceaddr, readlen);sourceaddr += readlen;} if (writeoob) {memcpy(oobbuf, sourceaddr, meminfo.oobsize);sourceaddr += meminfo.oobsize;}eccbuf.data_ptr = writebuf;eccbuf.data_len = meminfo.writesize;eccbuf.oob_ptr = oobbuf;eccbuf.oob_len = meminfo.oobsize;eccbuf.start = mtdoffset;if (ioctl(fd, MEMEWRITEPAGE, &eccbuf) != 0){int rewind_blocks;off_t rewind_bytes;erase_info_t erase;perror("ioctl(MEMEWRITEPAGE)");/* Must rewind to blockstart if we can */rewind_blocks = (mtdoffset - blockstart) / meminfo.writesize; /* Not including the one we just attempted */rewind_bytes = (rewind_blocks * meminfo.writesize) + readlen;if (writeoob)rewind_bytes += (rewind_blocks + 1) * meminfo.oobsize;sourceaddr -= rewind_bytes;erase.start = blockstart;erase.length = meminfo.erasesize;fprintf(stderr, "Erasing failed write from %08lx-%08lx\n",(long)erase.start, (long)erase.start+erase.length-1);if (ioctl(fd, MEMERASE, &erase) != 0) {perror("MEMERASE");goto closeall;}if (markbad) {loff_t bad_addr = mtdoffset & (~meminfo.erasesize + 1);fprintf(stderr, "Marking block at %08lx bad\n", (long)bad_addr);if (ioctl(fd, MEMSETBADBLOCK, &bad_addr)) {perror("MEMSETBADBLOCK");/* But continue anyway */}}mtdoffset = blockstart + meminfo.erasesize;imglen += rewind_blocks * meminfo.writesize;continue;}imglen -= (readlen + meminfo.oobsize);mtdoffset += meminfo.writesize;

}closeall:close(fd);if ((imglen > 0)) {perror ("Data was only partially written due to error\n");exit (EXIT_FAILURE);}/* Return happy */return EXIT_SUCCESS; }

?

?

讀OOB

讀OOB跟寫OOB類似,只不過使用的命令是MEMREADOOB。

#include <sys/ioctl.h> #include <stdio.h> #include <mtd/mtd-user.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #include <stdlib.h>#define N 32 #define OFS (0) #define block_size (128*1024) #define page_size (2*1024)int main(int argc, const char *argv[]) {int fd;int i, j;unsigned char oob_data[32] ={0x53, 0x50, 0x4c, 0x20, 0, 0xff, 0, 0xff, 0x53, 0x50, 0x4c, 0x20, 0, 0xff, 0, 0xff, 0x53, 0x50, 0x4c, 0x20, 0, 0xff, 0, 0xff, 0x53, 0x50, 0x4c, 0x20, 0, 0xff, 0, 0xff};unsigned char oobbuf[N];struct mtd_oob_buf oob = {0, N, oobbuf};struct mtd_oob_buf my_oob = {0, N, oob_data};fd = open("/dev/mtd0", O_RDWR);if(fd < 0){perror("fail to open\n");exit(-1);}if(ioctl(fd, MEMWRITEOOB, &my_oob)){perror("fail to ioctl");exit(-1);}memset(oobbuf, 0, sizeof(oobbuf));oob.start = OFS;if (ioctl(fd, MEMREADOOB, &oob)){perror("fail to ioctl");exit(-1);}for(i=0; i<N; i++){if(i%8 == 0){printf("\n");}printf("%#x ", oobbuf[i]);}printf("\n\n");close (fd);return 0;}

?

以上只是本人在工作中遇到的,僅供參考。

轉(zhuǎn)載于:https://www.cnblogs.com/pengdonglin137/p/3468953.html

總結(jié)

以上是生活随笔為你收集整理的在应用程序中实现对NandFlash的操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

亚洲精品高清视频 | 久精品视频在线观看 | 国产永久免费 | 欧美 日韩 国产 中文字幕 | 亚洲精品久久久久中文字幕m男 | www.狠狠| 国产精品精品国产色婷婷 | 欧美日韩一区二区三区在线观看视频 | 精品一区二区精品 | 97超级碰| 99久久精品免费看国产 | 综合色婷婷 | 国产视频在线免费观看 | 最近更新的中文字幕 | 日本中文字幕在线观看 | 中文免费在线观看 | 四虎国产永久在线精品 | 久久久久久欧美二区电影网 | 久久香蕉电影网 | 91在线观看黄 | 久草在线免费看视频 | 一区二区三区四区在线免费观看 | 91在线视频在线观看 | 久操久 | 亚州天堂 | 久久久久 免费视频 | 国产精品久久久久久一区二区 | 日韩精品无码一区二区三区 | 在线观看一区二区视频 | 国产999精品久久久影片官网 | 最近中文字幕大全 | 天天摸天天干天天操天天射 | 午夜精品久久久久久久久久久 | 久久久久久久电影 | 欧美色插 | 999成人网| 欧美久久久久久 | 毛片美女网站 | 日韩大片在线看 | 国产在线观看你懂得 | 99九九99九九九视频精品 | 午夜黄色影院 | 五月婷婷毛片 | 人人揉人人揉人人揉人人揉97 | 国产精品在线看 | 精品欧美在线视频 | 狠狠色丁香久久婷婷综合五月 | 手机看片1042 | 免费看一级一片 | 国内精品久久久久久中文字幕 | 国产成人一区二区三区 | 日韩精品最新在线观看 | 天天干人人干 | 最新国产精品久久精品 | 色a网| 国产在线观看免费观看 | 六月激情网 | 国产视频每日更新 | 黄污视频网站大全 | 九九久久免费视频 | 久热久草| 国产91区 | 中文字幕在线观看免费高清电影 | 日韩影视在线 | 中文字幕在线观看完整版 | 国产欧美精品一区二区三区 | 亚洲一区二区三区四区精品 | 国产亚洲精品成人av久久影院 | 五月婷婷在线视频观看 | 韩日电影在线 | 成人影音av | 中文字幕第 | 国产视频观看 | 婷婷日韩| 久久久久久久久久久久久9999 | 干av在线 | 一区二区影院 | 亚洲国产播放 | 国产亚洲精品久久久久秋 | 欧美一级性生活视频 | h文在线观看免费 | 超碰免费97| 尤物一区二区三区 | 婷婷午夜 | 97在线观视频免费观看 | 99看视频在线观看 | 国产免费亚洲高清 | 在线黄频 | 国产精品女同一区二区三区久久夜 | 美女网站色 | 日本久久99 | 特级西西www44高清大胆图片 | 夜夜操夜夜干 | 91精品视频在线观看免费 | 国产成人精品免费在线观看 | 欧美精品一区在线发布 | 久久久精品欧美一区二区免费 | 国产成人精品亚洲精品 | 免费a v在线| 欧美一区二区三区四区夜夜大片 | 开心激情综合网 | 亚洲黄色av网址 | 国产亚洲欧美在线视频 | 国产成人免费观看久久久 | 一区二区久久久久 | av 在线观看| 天堂va欧美va亚洲va老司机 | 91精品国产一区 | 久久综合色婷婷 | 久久99精品一区二区三区三区 | 麻豆影视网 | 91精品国产乱码 | 丁香花在线视频观看免费 | 91 中文字幕 | 中文字幕亚洲综合久久五月天色无吗'' | 成人a免费 | 日韩电影中文字幕 | 热久久影视 | 成年人看片网站 | 久久五月婷婷丁香 | 免费看国产精品 | 久久精品99国产 | 综合网av | 久久草在线视频国产 | 草久在线播放 | 粉嫩一二三区 | 免费男女羞羞的视频网站中文字幕 | www.91成人| 久草资源在线 | 欧美午夜寂寞影院 | 91欧美日韩国产 | 久久国产精品视频观看 | 欧美在线视频一区二区 | 国产精品爽爽久久久久久蜜臀 | 久久综合9988久久爱 | 99视频偷窥在线精品国自产拍 | 超碰97人人射妻 | 国产精品久久久久久久久久久久 | 久久这里有精品 | 在线观看黄色大片 | 手机看片 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 99久久婷婷国产一区二区三区 | 成人毛片a | 狠狠网站| 亚洲a成人v | 国内精品免费 | 激情黄色av| 97爱爱爱| 亚洲最大av网站 | 在线色网站 | 日韩黄色免费电影 | 亚洲精品成人网 | 亚洲国产精品电影 | 日韩在线免费电影 | 久久国产精品视频免费看 | 97在线观看免费观看 | 欧美最爽乱淫视频播放 | 久久婷婷一区二区三区 | 国产电影黄色av | 国产精品爽爽爽 | 伊人小视频 | 国产精品99在线观看 | 久久久久综合精品福利啪啪 | 人人看97 | 成人福利在线 | 日韩在线观看视频网站 | 狂野欧美激情性xxxx | 人人干人人做 | 久久九九久久九九 | www免费网站在线观看 | 激情中文在线 | avhd高清在线谜片 | 免费一级片在线观看 | 久久久久久毛片精品免费不卡 | 精品国产久 | 日韩激情免费视频 | 探花视频在线版播放免费观看 | 免费日韩一级片 | 在线观看香蕉视频 | 国产黄色精品 | 日韩理论在线观看 | 中文字幕国产一区 | 国产日韩中文字幕 | 一区二区三区在线视频观看58 | 韩国精品在线观看 | 欧美久久久一区二区三区 | 91精品日韩 | 黄色av免费在线 | 毛片永久免费 | 亚洲人在线视频 | 毛片一级免费一级 | 久久国产热视频 | 一级电影免费在线观看 | 91精品在线免费观看 | 国产精品成人一区二区三区吃奶 | 欧美国产亚洲精品久久久8v | 国产探花 | 色婷婷综合久久久中文字幕 | 丁香久久婷婷 | 久久精品中文视频 | 午夜视频色 | 国产在线一区二区 | 精品久久久久一区二区国产 | 能在线看的av | 少妇bbb搡bbbb搡bbbb′ | 久久精品久久久精品美女 | 亚洲成人家庭影院 | 精品免费在线视频 | 日韩在线字幕 | 色多视频在线观看 | 成人久久网| 欧美激情视频在线免费观看 | 精品国产一区二区三区久久影院 | 久久久久免费精品国产小说色大师 | 九九久| 亚洲国产中文在线 | 国产高清精品在线观看 | 国产精品igao视频网网址 | 五月天六月丁香 | 97在线观看视频 | 狠狠色丁香婷婷综合最新地址 | 日韩免费专区 | 成人av资源站| 国产三级精品三级在线观看 | 久久免费视频在线观看6 | 国产一级性生活视频 | 国产精品久久久久久高潮 | 青青草华人在线视频 | 91av中文字幕 | 免费看三级 | 日韩资源视频 | 亚洲免费成人av电影 | 天天射综合网视频 | 国产一区在线视频观看 | 午夜av不卡 | 天天躁日日躁狠狠躁 | 另类五月激情 | 国产又黄又硬又爽 | 色之综合网 | 少妇高潮流白浆在线观看 | 日日成人网 | 久久99精品久久久久蜜臀 | 丁五月婷婷 | 激情久久婷婷 | 欧美日韩国产综合网 | 一区二区视频在线看 | 国产 色 | 香蕉在线视频观看 | 久久在草 | 少妇啪啪av入口 | 丁香五月亚洲综合在线 | 在线观看a视频 | 国产福利不卡视频 | 国产视频在线观看一区 | av天天澡天天爽天天av | 日韩在线不卡av | 久久久久久看片 | 久久日本视频 | 国产视频久久久 | 日韩 精品 一区 国产 麻豆 | 永久免费视频国产 | 精品国产乱码久久久久久三级人 | 久久免费视频在线观看 | 亚洲精品黄 | 精品视频免费在线 | 国产精品乱码久久久久久1区2区 | 黄色字幕网| 奇米影视777影音先锋 | 国产精品视频免费看 | 天天干夜夜干 | 17videosex性欧美 | 免费av一级电影 | 黄色电影在线免费观看 | 国产69久久久欧美一级 | 国产一在线精品一区在线观看 | 99久久精品免费看 | 九九色在线观看 | 99久久这里有精品 | 麻豆精品国产传媒 | 开心丁香婷婷深爱五月 | 久久天堂网站 | 天天操天天干天天爱 | 日韩在线观看视频中文字幕 | 色婷婷激情五月 | 国产91成人在在线播放 | 成人羞羞视频在线观看免费 | 日本精品在线视频 | 国产精品九九久久99视频 | 国产精品久久久久久久久费观看 | 女人18精品一区二区三区 | 国产精品自在欧美一区 | 亚洲精品一区二区三区四区高清 | 亚洲黄色小说网址 | 免费日韩一区 | 成人网中文字幕 | 午夜精品一区二区三区在线 | 亚洲天天草 | 精品一区二三区 | 最近能播放的中文字幕 | 国产精品美女在线 | 国内精品久久久久久久 | 精品免费一区二区三区 | 亚洲国产午夜 | 国产麻豆剧传媒免费观看 | 亚洲精品视频网站在线观看 | 在线播放av网址 | 国产精品亚州 | 免费在线观看成人av | 久久午夜影院 | 91精品在线免费 | 国产中文字幕在线视频 | 日韩免费观看一区二区 | 中文字幕黄色网址 | 精品国产精品久久一区免费式 | 玖玖视频国产 | 国产在线精品区 | 婷婷国产在线 | 特片网久久 | 国产亚洲va综合人人澡精品 | 97视频人人免费看 | 欧美精品久久久久久久久免 | 最近中文字幕高清字幕在线视频 | 久久免费精彩视频 | 国产一区二区精品久久 | 免费在线成人av电影 | 免费a级观看 | 五月婷婷六月丁香 | 狠狠色丁香婷婷综合久小说久 | 在线 影视 一区 | 色窝资源 | 中文不卡视频 | 99精品免费久久久久久日本 | 久久撸在线视频 | 成人黄大片视频在线观看 | 免费观看黄 | 国产资源精品在线观看 | 久草在线手机观看 | 日本在线观看中文字幕无线观看 | 欧美精品乱码久久久久久按摩 | 亚洲成色 | 午夜婷婷综合 | 久久免费看片 | 国产精品一区二区久久精品爱涩 | 国产亚洲精品久久网站 | 日韩精品在线播放 | 亚洲黄网址 | 国产福利一区二区三区在线观看 | 中文字幕国产视频 | 一区二区三区精品久久久 | 婷婷激情网站 | 麻豆精品国产传媒 | 黄色一级片视频 | 国产在线视频不卡 | 成人小视频在线观看免费 | 字幕网av| 亚洲美女免费视频 | 久热av| 免费在线观看毛片网站 | 2019中文最近的2019中文在线 | 久久免费视频这里只有精品 | a极黄色片 | 91成人免费观看视频 | 丁香婷婷在线 | 久草在线观看视频免费 | 在线播放一区二区三区 | 国产日韩视频在线观看 | 天天操天天爽天天干 | 婷婷丁香六月 | 欧美成人视 | 亚洲天堂激情 | 日韩草比| 婷婷久久亚洲 | 免费看色视频 | www视频免费在线观看 | 日韩69视频| 久久97久久97精品免视看 | 久久中文字幕导航 | 精品国产一区二区三区在线 | 99热这里只有精品免费 | 亚洲精品2区 | 成人午夜电影免费在线观看 | 久久国内精品视频 | 日韩在线观看一区二区三区 | 国产亚洲综合在线 | 日韩欧美一区二区在线观看 | 日韩黄色免费在线观看 | 深夜免费网站 | 久草在线电影网 | 久久久久麻豆v国产 | 成人av免费播放 | 欧美日韩另类在线观看 | 欧美一级日韩三级 | 波多野结衣电影一区二区 | 美女黄频在线观看 | 天天操天天干天天操天天干 | 久久精品96 | 成人四虎影院 | 美女国产网站 | 亚洲男人天堂a | 在线中文字幕视频 | 欧美另类69 | 久久久性 | 精品国产一二三四区 | 国产精品久久久久久久久毛片 | 特级xxxxx欧美 | 天堂激情网 | 成人免费在线观看入口 | 免费网站看v片在线a | 九色精品免费永久在线 | 91成人精品国产刺激国语对白 | 在线观看免费版高清版 | 久久久久久久久久久精 | 97福利| 欧美精品一区二区在线播放 | 丁香激情综合久久伊人久久 | 久久a级片 | 手机av在线免费观看 | 欧美另类v | 日韩网站在线播放 | 国产成人av在线 | 亚洲狠狠婷婷综合久久久 | 日本性xxx| 韩国在线视频一区 | 国产视频亚洲视频 | 狠狠狠色丁香婷婷综合久久88 | 一区二区三区高清在线 | 婷婷色中文 | 国产日韩欧美综合在线 | 国产一级黄大片 | 91系列在线 | 日韩欧美在线高清 | 国产69精品久久app免费版 | 色悠悠久久综合 | 久久香蕉国产 | 国产成人精品在线观看 | 国产尤物在线观看 | 干干夜夜 | 一级片视频在线 | 深夜免费福利网站 | 久久综合天天 | 久久国产精品久久国产精品 | 一区二区视频在线观看免费 | 在线亚州| 久久99精品久久久久蜜臀 | 中文字幕中文字幕在线一区 | 欧美日韩一二三四区 | 中文字幕在线观看1 | 一区二区三区久久精品 | 久久久久久久毛片 | 欧美大片www | 黄影院| 国产区av在线 | 欧美精品在线一区二区 | 亚洲综合视频网 | 日本久久精 | 99久久婷婷国产综合精品 | 349k.cc看片app | 九精品 | av九九九 | 国产一区二区在线免费 | av免费电影在线 | 中文字幕av全部资源www中文字幕在线观看 | 成人a视频 | 91精品一区二区三区蜜臀 | 人人插人人草 | av免费在线观看1 | 九九国产精品视频 | 久久成人国产精品一区二区 | 不卡中文字幕av | 色国产精品一区在线观看 | 在线播放 日韩专区 | 在线观看日韩免费视频 | 日韩有色 | 伊人伊成久久人综合网小说 | 97成人资源 | 国产香蕉97碰碰久久人人 | 91视频在线观看大全 | 日韩精品高清不卡 | 亚洲精品va| 激情视频免费观看 | 香蕉视频导航 | 日本中文字幕网址 | 欧美大香线蕉线伊人久久 | 91在线看视频 | 激情五月亚洲 | 狠狠色丁香久久婷婷综 | 久草精品在线 | 伊人射 | 亚洲精品久久久久58 | 国产精品igao视频网网址 | 一级精品视频在线观看宜春院 | 久久综合久久久 | 亚洲在线不卡 | 美女视频黄是免费的 | 国产九色在线播放九色 | www麻豆视频 | 久久久久亚洲精品男人的天堂 | 成人在线播放网站 | 在线观看精品一区 | 免费在线一区二区 | 国产精品久久嫩一区二区免费 | 久久精品久久国产 | 国产一级免费观看视频 | 亚洲视频免费在线 | 一区二区精品在线观看 | 99视频在线播放 | 一本一道波多野毛片中文在线 | 美女一级毛片视频 | 国产黄色a | 日韩免费网址 | 国产综合在线视频 | 久久久久久久久毛片 | 92国产精品久久久久首页 | 久草在线观看 | 91毛片在线观看 | www.天天射| 91人人爱| 天天曰夜夜爽 | 日韩视频中文字幕在线观看 | 懂色av一区二区在线播放 | 久久精品视频国产 | 久久精彩视频 | 国内精品久久久久久久97牛牛 | 中文在线天堂资源 | 蜜臀久久99静品久久久久久 | 国产精品男女啪啪 | 四虎欧美 | 欧美成人999 | 久久a v电影 | 激情五月综合网 | 99这里有精品 | av在线播放一区二区三区 | 99超碰在线观看 | 91亚洲综合 | 91看片黄色 | 日韩一区二区免费视频 | 中文超碰字幕 | 青春草视频在线播放 | 国产日韩精品欧美 | 香蕉久草| 国产精品 999 | 免费在线观看午夜视频 | 三级av免费看 | 日韩系列在线观看 | 久久精品一区二区三区视频 | 天天干,天天射,天天操,天天摸 | 三级黄色免费片 | 97成人精品区在线播放 | 亚洲一区精品人人爽人人躁 | 欧美日韩69 | 日本xxxxav| 三级黄色免费 | 欧美国产日韩一区二区三区 | 亚洲人成综合 | 亚洲欧洲精品在线 | 欧美精品一区二区三区一线天视频 | 中文字幕一区二区三区四区久久 | 久久激情五月婷婷 | 中文资源在线观看 | 手机看片午夜 | 尤物97国产精品久久精品国产 | 亚洲精品视频网站在线观看 | 欧美污网站 | 天堂成人在线 | 国产看片免费 | 麻豆91网站 | 91麻豆网站 | 伊人狠狠操 | 国产麻豆精品免费视频 | 婷婷激情欧美 | a午夜电影 | 国产精品综合在线 | 九九免费在线视频 | 国产老太婆免费交性大片 | 欧美一区二区三区免费看 | 另类老妇性bbwbbw高清 | www.夜夜操 | 国产一区二三区好的 | 亚洲国产中文字幕在线观看 | 四虎最新入口 | 亚洲精品一区二区网址 | 日韩女同一区二区三区在线观看 | 日韩成人黄色 | 视频 国产区| www.亚洲在线| 久草在线久草在线2 | 成人av免费播放 | 国产精品久久久久久久久久不蜜月 | 国精产品999国精产品岳 | 韩国一区二区三区视频 | 亚洲一一在线 | 欧美精品成人在线 | 久久综合九色综合久99 | 日韩婷婷 | 国产电影一区二区三区四区 | 欧美日韩国产一区二区三区 | 国产中文字幕视频在线 | 91成人精品国产刺激国语对白 | 久久精品99国产国产 | 国产午夜精品一区 | 亚洲爽爽网 | 国产亚洲精品久久久久久 | 99久久9 | 欧美性受极品xxxx喷水 | 人人澡超碰碰 | 久久免费中文视频 | 欧美精品一区二区在线观看 | 又色又爽又激情的59视频 | 欧美日韩18| 久久最新网址 | 77国产精品 | 色综合色综合久久综合频道88 | 中文字幕在线一二 | 亚洲精品裸体 | 人人爽爽人人 | 久久亚洲综合色 | 久久人人看 | 国产精品免费观看视频 | 国产精品9999久久久久仙踪林 | 国产无吗一区二区三区在线欢 | 国产成人黄色 | 精品中文字幕在线播放 | 国产美女精品视频免费观看 | 久久精品精品电影网 | 久久99精品久久久久久久久久久久 | 日韩精品久久久久 | 91传媒91久久久 | 日韩欧美精品在线观看 | av中文字幕在线免费观看 | 日韩爱爱网站 | 国产无遮挡又黄又爽馒头漫画 | 丁香资源影视免费观看 | 日韩一区二区三区不卡 | 日本三级吹潮在线 | av理论电影 | 国色天香在线 | 97精品一区 | www.人人干 | 91片黄在线观看 | 精品国产aⅴ一区二区三区 在线直播av | 亚洲精品美女久久久 | 亚洲一级二级 | 日韩在线网 | 在线观看黄网站 | av一区二区在线观看中文字幕 | 亚洲在线高清 | 毛片a级片 | 国产免费av一区二区三区 | 中文字幕在线看视频国产中文版 | 久久久久高清毛片一级 | 欧洲亚洲女同hd | 亚洲日本精品 | 91免费视频网站在线观看 | 91成人在线视频 | 国产精品99免视看9 国产精品毛片一区视频 | 色在线亚洲 | 亚洲乱亚洲乱亚洲 | 国产精品99久久久久久人免费 | 国产护士av| 国产一在线精品一区在线观看 | 99视频精品在线 | 国产精品 日韩 | 在线免费亚洲 | 久久亚洲精品国产亚洲老地址 | 中文字幕在线观看第一区 | 欧美极品久久 | 中文字幕一二三区 | 国产成人三级在线 | 亚洲欧美国产日韩在线观看 | 久久久久久久久久久久久国产精品 | 亚洲永久av | 成人a视频在线观看 | 国产成人中文字幕 | 免费国产在线视频 | 狠狠色综合网站久久久久久久 | 丝袜少妇在线 | 99久久久久久 | 免费一级片视频 | 午夜av免费看 | 狠狠的干 | 91精品一区国产高清在线gif | 深爱激情综合 | 香蕉视频在线网站 | 亚洲黄色在线播放 | 久久精品3 | 韩日电影在线 | 亚洲精品一区二区18漫画 | 综合色中文 | 色婷婷激婷婷情综天天 | 亚洲精品国产品国语在线 | 国产小视频国产精品 | 久久久www成人免费毛片 | 中文字幕成人在线观看 | 高清久久久久久 | 五月婷婷综合激情 | 久草在线在线精品观看 | 97成人免费视频 | 欧美一级小视频 | 五月天天天操 | 天天操天天操天天操天天操天天操天天操 | 久久久国际精品 | 1024手机在线看 | 97**国产露脸精品国产 | 日本3级在线观看 | 久久99精品一区二区三区三区 | 黄色视屏在线免费观看 | 国产精品不卡在线观看 | 免费看黄在线观看 | 久久久精品国产免费观看同学 | 日韩一区正在播放 | 伊人色综合久久天天 | 午夜久久久久久久久久久 | 免费国产视频 | 国内视频在线 | 精品视频| 麻豆精品传媒视频 | 在线观看久久久久久 | 综合网在线视频 | 狠狠操精品 | 欧美在线日韩在线 | 免费在线观看av不卡 | 韩国在线一区二区 | 日韩视频1区 | 黄色成人免费电影 | 一级a性色生活片久久毛片波多野 | 天堂av一区二区 | 久久精品亚洲 | 色婷婷色 | 久久精品理论 | 超碰免费av| 欧美精品首页 | 99视频偷窥在线精品国自产拍 | 福利视频午夜 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 91人人爱| 亚洲日本在线一区 | 天天躁日日躁狠狠躁av麻豆 | 四虎永久精品在线 | 五月婷婷六月丁香 | 免费人人干 | 久久精品视频在线 | 天天操天天操一操 | www国产在线| 99中文字幕视频 | 青草草在线视频 | 天海冀一区二区三区 | 成人毛片一区 | 国产v欧美| 中文在线天堂资源 | 亚洲成人网在线 | 中文字幕av在线 | 国产区精品 | 狂野欧美激情性xxxx欧美 | 亚洲午夜电影网 | 国产高清在线免费视频 | 日韩欧美高清不卡 | 免费在线黄色av | 麻豆一区在线观看 | 欧美一级专区免费大片 | 日韩高清在线观看 | 久久人人射 | 国产一级性生活视频 | 日韩中文字幕a | 免费日韩 精品中文字幕视频在线 | 五月婷婷六月丁香 | 亚洲成人家庭影院 | 五月天视频网 | 久久人人97超碰国产公开结果 | 毛片美女网站 | 欧美性黄网官网 | 日韩免费电影 | 色综合咪咪久久网 | 色综合久久88色综合天天6 | 97超碰中文 | 国产在线观看不卡 | 免费观看9x视频网站在线观看 | 一区二区三区三区在线 | 欧美无极色 | 日日色综合 | 日韩欧美高清在线 | 精品一区二区在线观看 | 亚洲高清久久久 | 又黄又刺激的视频 | 欧美日韩二区在线 | 免费在线观看日韩视频 | 国产精品一区在线 | 激情丁香综合五月 | 日韩欧美视频在线 | 黄色一级性片 | 激情五月综合网 | 久久精品高清 | 久久久久99精品成人片三人毛片 | 久久伦理电影网 | 午夜aaaa | 精品免费视频 | 免费观看第二部31集 | 天天天干夜夜夜操 | 日韩中文字幕国产精品 | 日韩综合色 | 亚洲视屏| 欧美日韩一区二区三区在线观看视频 | 精品国产福利在线 | 天天操天天干天天综合网 | 天天操天天干天天综合网 | 日韩精品在线播放 | 欧美在线视频第一页 | 91亚洲精品视频 | 婷婷激情在线 | 91桃色在线观看视频 | 黄色视屏av | 免费精品 | 日日夜日日干 | 亚洲男女精品 | 国产精品毛片一区二区 | 成人免费网视频 | 欧美a级在线 | 人人舔人人爽 | 色婷婷亚洲 | 亚洲视频 视频在线 | 狠狠色噜噜狠狠狠狠2021天天 | 欧美一区二区三区激情视频 | 久草成人在线 | 91av在线播放视频 | 九九视频免费 | 444av| 天天插夜夜操 | 久久久久中文字幕 | 久久不射网站 | 国产日韩精品在线 | 久久久久黄 | 婷婷色影院 | 97人人人| 综合在线色 | 久久精品免视看 | 亚州视频在线 | 国产精品资源在线观看 | avwww在线观看 | 一区二区中文字幕在线 | 97高清视频| 欧美国产日韩在线观看 | 亚洲美女视频在线 | 国产视频亚洲视频 | 欧美亚洲国产精品久久高清浪潮 | av在线免费播放 | 美女av在线免费 | 国产裸体视频网站 | 婷婷丁香花五月天 | 九九视频免费在线观看 | 中文在线√天堂 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 黄色av大片 | 欧美整片sss | 国产二区精品 | 99精品国产亚洲 | 又粗又长又大又爽又黄少妇毛片 | 久久精品—区二区三区 | 亚洲乱码久久久 | 亚洲免费在线观看视频 | 免费欧美 | 日韩在线观看视频在线 | 国产日韩亚洲 | 国产色秀视频 | 久热香蕉视频 | 97色婷婷 | 中文字幕制服丝袜av久久 | 三级av小说| 日日爱网站 | 黄色片亚洲 | 一级免费av| 9免费视频| 99精品国产视频 | 中文字幕高清免费日韩视频在线 | 国产午夜精品久久久久久久久久 | 五月天综合 | 欧美日韩色婷婷 | 国产精品精品国产婷婷这里av | 欧美九九视频 | 中文字幕在线观看完整版 | 欧美一区二区三区特黄 | 欧美日本在线视频 | 欧美激情精品久久久久久免费印度 | 免费看黄色小说的网站 | 久久久久久久久久福利 | 精品国产成人在线影院 | 久久久久久久久久久久久久av | 亚洲最新av在线 | 综合激情网 | 一级一级一片免费 | 天天操人人要 | 国产精品日韩久久久久 | 中文字幕在线一二 | 久久91网| 欧美激情精品久久久久久变态 | 久久影院亚洲 | 日日躁夜夜躁xxxxaaaa | 日韩精品久久中文字幕 | 久久香蕉一区 | av手机版| 国内精品久久久 | 在线亚洲日本 | 波多野结衣一区二区三区中文字幕 | 97精品国产97久久久久久粉红 | 久久中文字幕在线视频 | 香蕉免费 | 91在线播放综合 | 在线观看国产高清视频 | www久久国产 | 国产精品免费一区二区三区 | 日韩丝袜在线观看 | 美女黄濒 | 成人国产一区二区 | 久久成人午夜 | 青草视频在线播放 | 东方av在线免费观看 | 精品久久中文 | 久久久久久久久久久久久久免费看 | 成人黄色电影免费观看 | 色婷婷在线视频 | 麻豆免费在线播放 | 国产在线精品视频 | 亚洲精品字幕在线观看 | 一色屋精品视频在线观看 | 九色琪琪久久综合网天天 | av中文字幕网 | 西西44人体做爰大胆视频 | 91字幕| 欧美一区二视频在线免费观看 | 日本黄色免费看 | 亚洲精选视频在线 | 97精品超碰一区二区三区 | 日韩在线影视 | 91福利区一区二区三区 | 国产一区成人在线 | 在线中文字幕视频 | 亚洲激情在线播放 | 激情开心| 亚洲欧美视频网站 | 五月婷久久| 日日夜夜艹 | 国产精品久久中文字幕 | 国产一区二区在线免费播放 | 最新免费中文字幕 | 干干操操| 亚洲成 人精品 | 99 久久久久| 国产成人333kkk | 亚洲精品视频在线观看网站 | 亚洲激情六月 | 在线视频91| 国产一区二区三区四区大秀 | 国产精品初高中精品久久 | 国产精品久久久久久久久久久久久久 | 亚洲精品成人网 | 制服丝袜在线91 | 日本精品久久 | 欧美午夜一区二区福利视频 | 国产艹b视频| 日韩精品一区二区三区免费观看 | 伊人亚洲精品 | av在线精品| 在线观看一级视频 | 久久精品第一页 | 国产一区在线视频观看 | 国内毛片毛片 | 国产精品美女久久久久久久 | 国产日韩欧美精品在线观看 | 操一草 | 欧美在线视频一区二区三区 | 久久国产精品电影 | 波多野结衣在线中文字幕 | 在线观看免费福利 | 欧美在线视频二区 | 在线观看成人毛片 | 免费手机黄色网址 | 在线观看完整版免费 | 激情婷婷亚洲 | 91久久精品日日躁夜夜躁国产 | 国产日韩欧美视频 | 99久久99久久精品 | 五月婷婷影视 | 麻豆一二三精选视频 | av不卡免费看 | 亚洲精品中文字幕在线观看 | 欧美精品免费在线 | 欧美孕交vivoestv另类 | 亚洲高清在线观看视频 | 91在线看片 | 狠狠网亚洲精品 | 欧美日韩在线视频一区 | 国产精品一区二区av影院萌芽 | 久久字幕 | 天天操夜夜操 | 国产在线成人 | 91九色成人蝌蚪首页 | 久久婷婷五月综合色丁香 | 久久精品99国产国产 | 亚洲最新av在线 |