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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

cmd52命令发送 mmc_Linux SD/MMC/SDIO驱动分析(新)

發(fā)布時間:2025/3/19 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cmd52命令发送 mmc_Linux SD/MMC/SDIO驱动分析(新) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、SD/MMC/SDIO概念區(qū)分

SD(SecureDigital)與?MMC(MultimediaCard)

SD?是一種?flash memory card?的標準,也就是一般常見的?SD?記憶卡,而?MMC?則是較早的一種記憶卡標準,目前已經(jīng)被?SD?標準所取代。在維基百科上有相當詳細的?SD/MMC?規(guī)格說明:[http://zh.wikipedia.org/wiki/Secure_Digital]。

SDIO(SecureDigital I/O)

SDIO?是目前我們比較關(guān)心的技術(shù),SDIO?故名思義,就是?SD?的?I/O?接口(interface)的意思,不過這樣解釋可能還有點抽像。更具體的說明,SD?本來是記憶卡的標準,但是現(xiàn)在也可以把?SD?拿來插上一些外圍接口使用,這樣的技術(shù)便是?SDIO。

所以?SDIO?本身是一種相當單純的技術(shù),透過?SD?的?I/O?接腳來連接外部外圍,并且透過?SD?上的?I/O?數(shù)據(jù)接位與這些外圍傳輸數(shù)據(jù),而且?SD?協(xié)會會員也推出很完整的?SDIO stack?驅(qū)動程序,使得?SDIO?外圍(我們稱為?SDIO?卡)的開發(fā)與應用變得相當熱門。

現(xiàn)在已經(jīng)有非常多的手機或是手持裝置都支持?SDIO?的功能(SD?標準原本就是針對?mobile device?而制定),而且許多?SDIO?外圍也都被開發(fā)出來,讓手機外接外圍更加容易,并且開發(fā)上更有彈性(不需要內(nèi)建外圍)。目前常見的?SDIO?外圍(SDIO?卡)有:

· Wi-Fi card(無線網(wǎng)絡卡)

· CMOS sensor card(照相模塊)

· GPS card

· GSM/GPRS modem card

· Bluetooth card

· ?Radio/TV card(很好玩)

SDIO?的應用將是未來嵌入式系統(tǒng)最重要的接口技術(shù)之一,并且也會取代目前?GPIO?式的?SPI?接口。

SD/SDIO?的傳輸模式

SD?傳輸模式有以下?3?種:

· SPI mode(required)

· 1-bit mode

· ?4-bit mode

SDIO?同樣也支持以上?3?種傳輸模式。依據(jù)?SD?標準,所有的?SD(記憶卡)與?SDIO(外圍)都必須支持?SPI mode,因此?SPI mode?是「required」。此外,早期的?MMC?卡(使用?SPI?傳輸)也能接到?SD?插糟(SD slot),并且使用?SPI mode?或?1-bit mode?來讀取。

Secure digital I/Ocard,pin out

SD?的?MMCMode

SD?也能讀取?MMC?內(nèi)存,雖然?MMC?標準上提到,MMC?內(nèi)存不見得要支持?SPI mode(但是一定要支持?1-bit mode),但是市面上能看到的?MMC?卡其實都有支持?SPI mode。因此,我們可以把?SD?設定成?SPI mode?的傳輸方式來讀取?MMC?記憶卡。

SD?的?MMC Mode?就是用來讀取?MMC?卡的一種傳輸模式。不過,SD?的?MMC Mode?雖然也是使用?SPI mode,但其物理特性仍是有差異的:

· MMC?的?SPI mode?最大傳輸速率為?20 Mbit/s;

· SD?的?SPI mode?最大傳輸速率為?25 Mbit/s。

為避免混淆,有時也用?SPI/MMC mode?與?SPI/SD mode?的寫法來做清楚區(qū)別

參考網(wǎng)站:https://www.sdcard.org/developers/overview/capacity/

http://www.interfacebus.com/Secure_Digital_IO_Card_Pinout.html

二、MMC子系統(tǒng)介紹

MMC代碼分布

MMC子系統(tǒng)代碼主要在drivers/mmc目錄下,共有三個目錄:

Card:存放閃存卡(塊設備)的相關(guān)驅(qū)動,如MMC/SD卡設備驅(qū)動,SDIOUART;

Host:針對不同主機端的SDHC、MMC控制器的驅(qū)動,這部分需要由驅(qū)動工程師來完成;

Core:整個MMC的核心層,這部分完成不同協(xié)議和規(guī)范的實現(xiàn),為host層和設備驅(qū)動層提供接口函數(shù)。

MMC子系統(tǒng)框架

Linux MMC子系統(tǒng)主要分成三個部分:

MMC核心層:完成不同協(xié)議和規(guī)范的實現(xiàn),為host層和設備驅(qū)動層提供接口函數(shù)。MMC核心層由三個部分組成:MMC,SD和SDIO,分別為三類設備驅(qū)動提供接口函數(shù);

Host 驅(qū)動層:針對不同主機端的SDHC、MMC控制器的驅(qū)動;

Client 驅(qū)動層:針對不同客戶端的設備驅(qū)動程序。如SD卡、T-flash卡、SDIO接口的GPS和wi-fi等設備驅(qū)動。

三、SD 總線協(xié)議

SD總線通信是基于指令和數(shù)據(jù)比特流,起始位開始和停止位結(jié)束。SD總線通信有三個元素:

Command:由host發(fā)送到卡設備,使用CMD線發(fā)送;

Response:從card端發(fā)送到host端,作為對前一個CMD的相應,通過CMD線發(fā)送;

Data:即能從host傳輸?shù)絚ard,也能從card傳輸?shù)絟ost,通過data線傳輸。

Commands

以下是四種用于控制卡設備的指令類型,每個command都是固定的48位長度:

1、broadcast commands(bc), no response:廣播類型的指令,不需要有響應;

2、broadcast commands with response(bcr):廣播類型的指令且需要響應;

3、addressed(point-to-point) commands(ac):由HOST發(fā)送到指定的卡設備,沒有數(shù)據(jù)的傳輸;

4、address(point-to-point) data transfercommands(adtc):由HOST發(fā)送到指定的卡設備且伴隨有數(shù)據(jù)傳輸。

指令格式:

Card register

幾個主要的寄存器:OCR,CID,CSD,RCA和SCR。

Operation condition register(OCR):32位的OCR包含卡設備支持的工作電壓表;

Card identification number register (CID):包含用于在卡識別階段的卡信息,包括制造商ID,產(chǎn)品名等;

Card specific data register(CSD):CSD寄存器提供了如何訪問卡設備的信息,包括定義了數(shù)據(jù)格式,錯誤校驗類型,最大訪問次數(shù),數(shù)據(jù)傳輸率等;

Relative card address register(RCA):存放在卡識別階段分配的相對卡地址,缺省相對卡地址為0000h;

SD card configuration register(SCR):SCR是一個配置寄存器,用于配置SD memory card的特殊功能。

Response

所有的response都通過CMD線發(fā)送到host端,R4和R5響應類型是SDIO中特有的:

1、R1(normal response command):用來響應常用指令;

2、R2(CID,CSD register):用來響應CMD2和CMD10或CMD9,并把CID或CSD寄存器作為響應數(shù)據(jù);

3、R3(OCR register):用來響應ACMD41指令,并把OCR寄存器作為響應數(shù)據(jù);

4、R6(published RCA response):分配相對卡地址的響應;

5、R7(card interface condition):響應CMD8,返回卡支持的電壓信息;

6、R4(CMD5):響應CMD5,并把OCR寄存器作為響應數(shù)據(jù);

7、R5(CMD52):CMD52是一個讀寫寄存器的指令,R5用于CMD52的響應;

Response 格式:

***詳情請參考spec***

四、SD初始化流程

當host上電后,使所有的卡設備處于卡識別模式,完成設置有效操作電壓范圍,卡識別和請求卡相對地址等操作。

1、發(fā)送指令CMD0使卡設備處于idle狀態(tài);

2、發(fā)送指令CMD8,如果卡設備有response,說明此卡為SD2.0以上;

3、發(fā)送指令CMD55+ACMD41,該指令是用來探測卡設備的工作電壓是否符合host端的要求;

在發(fā)送ACMD41這類指令之前需要先發(fā)送CMD55指令,在SDIO中ACMD41指令被CMD5替代。

4、發(fā)送指令CMD11轉(zhuǎn)換工作電壓到1.8V;

5、發(fā)送指令CMD2獲取CIA;

6、發(fā)送指令CMD3獲取RCA(relative card address)

SD初始化分析

系統(tǒng)上電時,SDI控制器會去掃描總線上的所有設備,然后對掛在總線上卡設備進行初始化。進行掃描和初始化工作都是由mmc_scan函數(shù)來完成,以下是Linux驅(qū)動中初始化流程圖(感謝同事Linkin的圖)。

SDIO、SD和MMC這三者的初始化流程稍有不同,是向下兼容的。

轉(zhuǎn)載:http://blog.csdn.net/paul_liao/article/details/7685869

五、SD卡調(diào)試關(guān)鍵點:

1. 上電時要延時足夠長的時間給?SD?卡一個準備過程,在我的程序里是?5?秒,根據(jù)不同的卡設置不同的延時時間。?SD?卡初始化第一步在發(fā)送?CMD?命令之前,在片選有效的情況下首先要發(fā)送至少?74?個時鐘,否則將有可能出現(xiàn)?SD?卡不能初始化的問題。

2.?SD?卡發(fā)送復位命令?CMD0?后,要發(fā)送版本查詢命令?CMD8?,返回狀態(tài)一般分兩種,若返回?0x01?表示此?SD?卡接受?CMD8,?也就是說此?SD?卡支持版本?2?;若返回?0x05?則表示此?SD?卡支持版本?1?。因為不同版本的?SD?卡操作要求有不一樣的地方,所以務必查詢?SD?卡的版本號,否則也會出現(xiàn)?SD?卡無法正常工作的問題。

3. 理論上要求發(fā)送?CMD58?獲得?SD?卡電壓參數(shù),但實際過程中由于事先都知道了?SD?卡的工作電壓,因此可省略這一步簡化程序。協(xié)議書上也建議盡量不要用這個命令。

4.?SD?卡讀寫超時時間要按照協(xié)議說明書書上的給定值?(?讀超時:?100ms?;寫超時:?250ms)?,這個值要在程序中準確計算出來,否則將會出現(xiàn)不能正常讀寫數(shù)據(jù)的問題。我自己定義了一個計算公式:超時時間?=(?8/clk?)*arg?。

5.?2GB?以內(nèi)的?SD?卡?(?標準卡?)?和?2GB?以上的?SD?卡?(?大容量卡?)?在地址訪問形式上不同,這一點尤其要注意,否則將會出現(xiàn)無法讀寫數(shù)據(jù)的問題。如標準卡在讀寫操作時,對讀或?qū)懨盍钆飘斨械牡刂酚蚍踔?0x10?,表示對第?16?個字節(jié)以后的地址單元進行操作?(?前提是此?SD?卡支持偏移讀寫操作?)?,而對大容量卡讀或?qū)懨盍钆飘斨械牡刂酚蚍踔?0x10?時,則表示對第?16?塊進行讀寫操作,而且大容量卡只支持塊讀寫操作,塊大小固定為?512?字節(jié),對其進行字節(jié)操作將會出錯。

6. 對某一塊要進行寫操作時最好先執(zhí)行擦出命令,這樣寫入的速度就能大大提高。進行擦除操作時不管是標準卡還是大容量卡都按塊操作執(zhí)行,也就是一次擦除至少?512?字節(jié)。

7. 對標準卡進行字節(jié)操作時,起始和終止必須在一個物理扇區(qū)內(nèi),否則將不能進行讀寫操作。實際操作過程中建議用塊操作以提高效率。不管是標準卡還是大容量卡一個讀寫命令只能對一個塊進行操作,不允許跨物理層地址操作。

8. 在寫數(shù)據(jù)塊前要先寫入若干個?dummy data?字節(jié),寫完一個塊數(shù)據(jù)時,主機要監(jiān)測?MISO?數(shù)據(jù)線,如果從機處于忙狀態(tài)這根數(shù)據(jù)線會保持低電平,這樣主機就可以根據(jù)這根數(shù)據(jù)線的狀態(tài)以決定是否發(fā)送下一個命令,在從機沒有釋放?MISO?數(shù)據(jù)線之前,主機絕對不能執(zhí)行其他命令,否則將會導致寫入的數(shù)據(jù)出錯,而且從機也不會響應主機的命令。

9. 在?SPI?模式下,?CRC?校驗是被忽略的,但依然要求主從機發(fā)送?CRC?碼,只是數(shù)值可以是任意值,一般主機的?CRC?碼通常設為?0x00?或?0xFF?。

讀多塊操作和寫多塊操作的傳輸停止形式不一樣,讀多塊操作時用用命令 CMD12 終止傳輸,而寫多塊操作時用 Stop Tran Token( 停止傳輸令牌,值為 0xFD) 終止傳輸。

----------------------------------------------------------------------------------------

1、初始化步驟:

(1) 延時至少 74clock,等待SD卡內(nèi)部操作完成,在MMC協(xié)議中有明確說明。

(2) CS低電平選中SD卡。

(3) 發(fā)送 CMD0 ,需要返回 0x01 ,進入 Idle 狀態(tài)

(4) 為了區(qū)別SD卡是2.0還是1.0,或是MMC卡,這里根據(jù)協(xié)議向上兼容的原理,首先發(fā)送只有SD2.0才有的命令CMD8,如果CMD8返回無錯誤,則初步判斷為2.0卡,進一步發(fā)送命令循環(huán)發(fā)送 CMD55+ACMD41 ,直到返回 0x00 ,確定SD2.0卡初始化成功,進入Ready 狀態(tài),再發(fā)送CMD58命令來判斷是HCSD還是SCSD,到此SD2.0卡初始化成功 。如果CMD8返回錯誤則進一步判斷為1.0卡還是MMC卡,循環(huán)發(fā)送CMD55+ACMD41 ,返回無錯誤,則為SD1.0卡,到此SD1.0卡初始成功,如果在一定的循環(huán)次數(shù)下,返回為錯誤,則進一步發(fā)送CMD1進行初始化,如果返回無錯誤,則確定為MMC卡,如果在一定的次數(shù)下,返回為錯誤,則不能識別該卡,初始結(jié)束。

(5)CS拉高。

2、讀步驟:

(1) 發(fā)送 CMD17 (單塊)或 CMD18 (多塊)讀命令,返回 0x00

(2) 接收數(shù)據(jù)開始令牌 0xfe (或 0xfc ) + 正式數(shù)據(jù) 512Bytes + CRC 校驗 2Bytes, 默認正式傳輸?shù)臄?shù)據(jù)長度是 512Bytes ,可用 CMD16 設置塊長度。

3、 寫步驟:

(1) 發(fā)送 CMD24 (單塊)或 CMD25 (多塊)寫命令,返回 0x00

(2) 發(fā)送數(shù)據(jù)開始令牌 0xfe (或 0xfc ) + 正式數(shù)據(jù) 512Bytes + CRC 校驗 2Bytes

4、 擦除步驟:

(1) 發(fā)送 CMD32 ,跟一個參數(shù)來指定首個要擦除的起始地址( SD 手冊上說是塊號)

(2) 發(fā)送 CMD33, ,指定最后的地址

(3) 發(fā)送 CMD38 ,擦除指定區(qū)間的內(nèi)容

此 3 步順序不能顛倒。

六、SD卡的命令格式及解析

1.SD卡命令組成

SD卡的指令由6字節(jié)(Byte)組成,如下:

Byte1:0 1 x x x x x x(命令號,由指令標志定義,如CMD39為100111即16進制0x27,那么完整的CMD39第一字節(jié)為01100111,即0x27+0x40)

Byte2-5:Command Arguments,命令參數(shù),有些命令沒有參數(shù)

Byte6:前7位為CRC(Cyclic Redundacy Check,循環(huán)冗余校驗)校驗位,最后一位為停止位0

2.SD卡的命令

SD卡命令共分為12類,分別為class0到class11,不同的SDd卡,主控根據(jù)其功能,支持不同的命令集,如下:

Class0 :(卡的識別、初始化等基本命令集)

CMD0:復位SD 卡.

CMD1:讀OCR寄存器.

CMD9:讀CSD寄存器.

CMD10:讀CID寄存器.

CMD12:停止讀多塊時的數(shù)據(jù)傳輸

CMD13:讀 Card_Status 寄存器

Class2 (讀卡命令集):

CMD16:設置塊的長度

CMD17:讀單塊.

CMD18:讀多塊,直至主機發(fā)送CMD12為止 .

Class4(寫卡命令集) :

CMD24:寫單塊.

CMD25:寫多塊.

CMD27:寫CSD寄存器 .

Class5 (擦除卡命令集):

CMD32:設置擦除塊的起始地址.

CMD33:設置擦除塊的終止地址.

CMD38: 擦除所選擇的塊.

Class6(寫保護命令集):

CMD28:設置寫保護塊的地址.

CMD29:擦除寫保護塊的地址.

CMD30: Ask the card for the status of the write protection bits

class7:卡的鎖定,解鎖功能命令集

class8:申請?zhí)囟罴?。

class10 -11 :保留

3.有關(guān)sd卡驅(qū)動和fat fs的實現(xiàn)用了3個文件來實現(xiàn)。

sdboot.c為sd的驅(qū)動(可理解為pdd)層,主要實現(xiàn)一些對sd控制器的配置以及一些基本sd命令的實現(xiàn)和對sd 卡的操作。

sdmmc.c實現(xiàn)了從sd卡讀取nk并跳到內(nèi)存去運行的代碼(基本可以理解為sd驅(qū)動的mdd層)。

sdfat.c文件就是實現(xiàn)fat fs的。mdd層通過fatfs來對pdd層操作以實現(xiàn)讀取文件。

在整個過程中遇到了很多問題,現(xiàn)在列舉如下:

1)sd卡初始化問題

配置gpio有關(guān)sd的功能:SDCMD, SDDAT[3:0]。

使能CLKCON中的SDI位。

時鐘以及計算公式:SDIPRE?? = PCLK/(CLK)-1;INICLK=300000;SDCLK=24000000; MMCCLK=?15000000

cmd0-cmd55-cmd41-cmd2-cmd3-cmd7-cmd6-cmd17

2)對sd卡操作問題

SD卡包括:一個標識寄存器CID,一個相應地址寄存器RCA,一個其他參數(shù)寄存器CSD。

對sd卡的操作是驅(qū)動通過sd controller來發(fā)相應的命令以達到讀寫等操作的:發(fā)送命令通過SDICmdCon[7:0]的除了開始2bit:CmdIndex放置要發(fā)送的命令號;SDICmdCon[8]開始發(fā)送命令來完成的。

檢測卡的插入,直接用中斷引腳的電平來判斷。

判斷插入的卡是否是sd卡,用命令cmd55和cmd41,因為mmc卡對cmd55不做回應。

命令9 就是獲取sd卡中csd寄存器的值的,該值包括很多sd卡的信息,其中就有sd卡的容量。這個值在sd卡接收到cmd9之后會以response的形式存放在sd控制器的SDI Response Register[0,1,2,3]中。在執(zhí)行cmd9,cmd10等這樣的命令的時候,卡的狀態(tài)應該是不選中的,或直接在執(zhí)行它們之前發(fā)送 cmd7(0)不選中卡,不然的話會timeout。

用cmd17 來讀取單個block的數(shù)據(jù),該命令要帶地址參數(shù)(該參數(shù)通過cmd3命令來獲取),然后根據(jù)SDIDSTA和SDIFSTA狀態(tài)值來從sd 控制器的SDIDAT寄存器中讀出要讀的數(shù)據(jù)。該命令與cmd9相反,在執(zhí)行它之前要選中卡。讀完一個block之后要做一些善后工作,為下次讀取做好準備,不然的話checkcmdend就要一直循環(huán)了。因為用的是每次都讀一個block,并地址要以block對齊,這樣就要考慮要讀取的地址是否是 block對齊的,長度是否夠一個block。

SDIDCON這個數(shù)據(jù)控制寄存器也很重要,一些對數(shù)據(jù)的操作形式就是在這里設置的。

3)fat文件系統(tǒng)問題

根據(jù)MBR找到分區(qū)表,根據(jù)分區(qū)表找到該分區(qū)MBR[446B+4個分區(qū)表(每個16B)+2B結(jié)束符)

分區(qū)表中的第9-12字節(jié)為該分區(qū)的啟始地址(單位沒sector),第13-16字節(jié)為分區(qū)的長度(單位也是sector)

http://hjx5548.blog.163.com/blog/static/563676392009111704249875/

六、實例

一、概述

最近在研究WIFI驅(qū)動,驅(qū)動模塊為broamd4330,基于SDIO接口,所以趁機研究了一下內(nèi)核中對于SDIO設備的注冊。

(我使用的linux內(nèi)核版本為3.2.0??? 硬件為samsung 4412)

在介紹內(nèi)核之前,有必要先了解一下MMC? SD? SDIO三種卡,從發(fā)展歷程來看,是先有MMC卡,后來有SD卡,這兩種都是純粹的存儲卡,而SDIO是什么呢,從字面意思理解,應該是SD+IO,也就是既有存儲功能,又有IO控制功能,不過也有純IO功能的SDIO設備(本人用到的WIFI模塊就是這種)。并且,這三種卡可以使用同一個插槽,系統(tǒng)還能正確的識別!!,可能是由于歷史原因,在開始有Linux的時候,還只存在mmc卡(不存在SD和SDIO卡),所以在linux系統(tǒng)里面關(guān)于這三種卡的名稱統(tǒng)統(tǒng)用“mmc“來命名。

下面來看一下CPU與WIFI模塊的物理連接圖

從圖上可以看出,我們的WIFI模塊接的是CPU上的mmc3,數(shù)據(jù)線,時鐘線以及命令線都一一對應。

當然在CPU一端,對于mmc3模塊,還有一個很重要的引腳--“xmmc3CDn”腳,CPU就是根據(jù)該引腳的電平高低來判斷mmc3模塊上是否有卡接入,如果電平為低,表示有卡,如果為高,表示無卡,筆者這里將該引腳固定拉低。

同時在WIFI模塊一端,也有一個很重要的引腳--“WL_SDIO_SPI_HSCI_SEL”引腳?? ,它是用來選擇模塊是工作在SD模式(低電平),還是SPI模式(高電平),筆者這里也將該引腳固定拉低。

好了,簡單的介紹了一些概念以及硬件后,還是要回歸到程序上,從大的方面來講,MMC/SD/SDIO的驅(qū)動程序主要分為兩大塊,主設備驅(qū)動和從設備驅(qū)動。對于上面的例子來說,CPU上的MMC3模塊就是主設備,而WIFI模塊就是從設備。該系列的博文就是分析MMC主設備在內(nèi)核中的注冊,以及對于同一個mmc插槽,系統(tǒng)是如何區(qū)分出MMC SD 以及SDIO設備的。

二、host注冊過程

上面說到了MMC/SD/SDIO(以下簡稱MMC)的驅(qū)動從大的方面來說分為主設備驅(qū)動和從設備驅(qū)動,那本文就來詳細的講述主設備驅(qū)動注冊的過程。

MMC主設備(也就是host)指的是集成于CPU內(nèi)部的MMC controller,筆者用的是4412芯片,從datasheet可以看出,里面集成了四個MMC controller,分別是mmc0,mmc1,mmc2,mmc3。 并且從上一篇文章我們知道,WIFI模塊是接在mmc3 這個host上面。

在linux系統(tǒng)中,將每個host設備封裝成platform_device來逐一進行注冊。

對于筆者所使用的內(nèi)核(3.2.0版本)來說,每一個host設備所對應的platform_device文件位于目錄($KERNEL_SOURCE)/arch/arm/plat-samsung下,分別為dev-hsmmc.c,dev-hsmmc1.c,dev-hsmmc2.c,dev-hsmmc3.c,為了與實際WIFI模塊對應,我們重點進入dev-hsmmc3.c文件看一看:

從上圖可以看出,該文件里面定義了一個名為s3c_device_hsmmc3的platform_device,但是定義好了的platform_device還需要有一個注冊的過程,該過程就發(fā)生在文件($KERNEL_SOURCE)/arch/arm/mach-exynos/mach-$(BOARD).c中,其中有如下的一個函數(shù)調(diào)用:

它的行為就是將數(shù)組skd4x12_devices里面的每一個platform_device項一一注冊進系統(tǒng),并且這個數(shù)組里面就包含了上面所定義的s3c_device_hsmmc3:

所以總結(jié)來說,系統(tǒng)化在初始化的時候,就已經(jīng)將s3c_device_hsmmc3(也就是那個host? mmc3)注冊進了platform總線(其他的mmc0,mmc1,mmc2都是一個道理)。

當然,對于熟悉platform機制的朋友來說,此時僅僅只是注冊了platform_device ,而對應的platform_driver還沒有注冊。

下面就來說說這個platform_driver的注冊,它是在$(KERNEL_SOURCE)/drivers/mmc/host目錄下的sdhci-s3c.c文件中進行的,該文件中有如下的一個注冊函數(shù)調(diào)用:

其中的參數(shù)sdhci_s3c_driver就是上面所說的platform_driver,它也是定義在sdhci-s3c.c文件中,來看一下:

在對sdhci_s3c_driver進行注冊的過程中,系統(tǒng)會根據(jù)sdhci_s3c_driver->driver.name成員變量(此處是“s3c-sdhci”)在platform_bus 總線上尋找同名字的platform_dvice(這個過程稱之為“探測”),通過上面對s3c_device_hsmmc3的注冊分析,發(fā)現(xiàn)s3c_device_mmc3.name也剛好是“s3c-sdhci”,所以他倆剛好可以配對,探測成功,同時當大家查閱s3c_device_hsmmc,s3c_device_hsmmc1以及s3c_device_hsmmc2的時候發(fā)現(xiàn)他們的name成員變量都是“s3c-sdhci”,,所以會有四次成功的探測,每一次探測成功,就會調(diào)用sdhci_s3c_driver.probe函數(shù)---sdhci_s3c_probe,這個函數(shù)至關(guān)重要,在整個驅(qū)動注冊過程中起著核心作用。

上面文章說到了探測函數(shù)sdhci_s3c_probe,現(xiàn)在就來仔細分析這個函數(shù)的作用:

在分析代碼之前,先簡要的概括一下這個函數(shù)的功能:

1、既然是講host的注冊,那么首先必須構(gòu)造出一個host,這個host就是通過sdhci_alloc_host函數(shù)來構(gòu)造出來的,它是一個struct sdhci_host類型的結(jié)構(gòu)體。同時,也通過mmc_alloc_host函數(shù)構(gòu)造了一個struct mmc_host的結(jié)構(gòu)體變量mmc。

2、初始化host的時鐘,設置host的gpio等等其他一些“亂七八糟”的參數(shù)初始化(需要的時候再詳細分析)。

3、通過sdhci_add_host函數(shù)來注冊host。

下面重點來看sdhci_add_host函數(shù)

該函數(shù)主要是對mmc的注冊,同樣mmc也有很多的參數(shù),先來看看他的操作函數(shù)集mmc->ops = &sdhci_ops

其中,request函數(shù)指針指向的函數(shù)用來處理host向從設備發(fā)送命令的請求,

set_ios用來設置電源、時鐘等等之類(需要重點關(guān)注),

get_ro用來判斷是否寫保護

再來看該函數(shù)里面的中斷注冊部分

我們先看一下mmc_add_host這個函數(shù),它的功能就是通過device_add函數(shù)將設備注冊進linux設備模型,最終的結(jié)果就是在sys/bus/platform/devices目錄下能見到s3c-sdhci.1,s3c-sdhci.2,s3c-sdhci.3設備節(jié)點。

中斷注冊函_irq的第一個參數(shù)中斷號就取自于s3c_device_hsmmc3.resource里面的irq參數(shù),sdhci_irq就是中斷服務程序,該中斷函數(shù)一般在插卡、拔卡或者從設備反饋給host信息時會被調(diào)用數(shù)request

中斷服務程序

程序首先讀取寄存器NORINTSTSn的值,該寄存器中有兩個bit分別來表示卡的插入與拔出過程(注意,必須是動態(tài)變化過程,才會讓相應的兩個bit置1),那么接下來的if語句就是從該寄存器的那兩個bit來判斷是否有卡的插入或拔出,并同時清除這兩個bit,準備下一次的檢測,緊接著就調(diào)用中斷的下半部分函數(shù) sdhci_tasklet_card,其實這個函數(shù)也沒做什么事情,就是判讀如果此時有卡的話就通過mmc_detect_chang函數(shù)調(diào)用mmc_rescan函數(shù)。從這個函數(shù)的名字都可以猜出個八九不離十,它的功能就是掃描所插入的卡。

掃描卡的程序

這個函數(shù)我們重點關(guān)注上述兩個地方,其實真正的掃描動作發(fā)生在函數(shù)mmc_rescan_try_freq函數(shù)里面,該函數(shù)的第二個參數(shù)表示以什么樣的頻率去進行掃描,那么可選的頻率值在那個數(shù)組freqs里面,一般當用某個頻率值掃描成功后,就直接退出了,否則,會以下一個更低的頻率值來掃描,筆者所使用的WIFI模塊就是以400KHz的頻率掃描成功的。

掃描過程

該函數(shù)首先發(fā)送復位命令(不過該命令只有SDIO類型的卡才能夠識別),然后發(fā)送CMD0,讓設備進入IDLE模式,緊接著發(fā)送CMD8,獲取該卡所支持的電壓值,最后就是重點了(從1998-2003行),從所調(diào)用的各個函數(shù)名字可以看出,它是在試探該卡是否為SDIO? SD? MMC?

那么接下來的文章就是要分析上面的三個函數(shù),看它是如何識別SDIO、SD、MMC的。

三、SDIO的識別和操作

從上面文章的最后,我們知道host在掃描卡的過程中,其識別的順序為SDIO? SD MMC,并且從它的注釋可以看出,這個順序是很重要的。那這篇文章,我們就看看SDIO的識別過程,它對應的函數(shù)就是mmc_attach_sdio(host)?(函數(shù)位于文件drivers/mmc/core/sdio.c)

這個函數(shù)大概來說做了如下的工作

1、向卡發(fā)送CMD5命令,該命令有兩個作用:

第一,通過判斷卡是否有反饋信息來判斷是否為SDIO設備(只有SDIO設備才對CMD5命令有反饋,其他卡是沒有回饋的);

第二,如果是SDIO設備,就會給host反饋電壓信息,就是說告訴host,本卡所能支持的電壓是多少多少。

2、host根據(jù)SDIO卡反饋回來的電壓要求,給其提供合適的電壓。

3、初始化該SDIO卡

4、注冊SDIO的各個功能模塊

5、注冊SDIO卡

對于以上功能的具體解釋,下面將結(jié)合程序娓娓道來

1、CMD5命令的發(fā)送

第789行的函數(shù)就是發(fā)送的CMD5命令,如果卡對該命令有回饋的話,err就是0,否則,err為非0,直接退出了;并且需要重點說明的一點就是,該函數(shù)的最后一個參數(shù)ocr,它是存儲反饋命令的,SDIO設備對CMD5的反饋命令為R4,下面來仔細分析一下這個R4,因為后面要用到這個R4命令。從SDIO spec文檔里面,我們能得到R4命令的格式

從上圖可以看出,該命令有48位,但我們的ocr變量是32位的,那怎么存儲呢?系統(tǒng)就去掉原命令的開頭8位以及結(jié)尾的8位,只保留中間的32為,也就是截短后的命令格式是如下:

具體各位的描述如下:

C?--???我還不知道

Number 0f IO functions?? --?每個SDIO設備都有功能塊,這三位就記錄了該設備有多少個功能塊,最多7個

Memory Present –?指明該設備是純粹只有功能塊的設備,還是同時包含了存儲空間,如果為0就是前者,如果是1就是后者

Stuff Bits? --?沒有實際用途一般為0

I/O OCR –?該設備所能支持的電壓范圍(具體描述見sdio spec)

2、配置電壓

ocr就是我們上面講的反饋命令R4(截短之后的32位),那么ocr&0x7f的意義是什么呢?從R4的格式就可以看出來,其低24位就代表了所能支持的電壓范圍,我們再來詳細的看一下這24位的OCR格式

現(xiàn)在應該可以知道ocr&0x7f的意義了吧,就是擯棄那些保留的電壓范圍。

重點關(guān)注mmc_select_voltage

第1080行的相與 過程就是判斷host實際所支持的電壓與card所需要的電壓是否匹配,如果匹配,那么ocr的值就非0,否則就為0

簡單介紹下第1082行的ffs函數(shù),它的作用就是返回參數(shù)中第一個為1的bit的位置(ffs(0)=0,ffs(1)=1,ffs(8)=4),那么該函數(shù)用在這里的作用就是取出card需要的實際電壓是多少;

第1090行的mmc_set_ios函數(shù)里面通過調(diào)用sdhci_set_power將host->ios.vdd所代表的電壓寫入寄存器PWRCONn中 完成那個對電壓的重新配置(想要了解更詳細的過程,請跟蹤源代碼)

3、初始化SDIO卡

第821行就是初始化SDIO卡的函數(shù)? 這個函數(shù)很長,也很重要,這里筆者就不列出其程序代碼了,只是列出其中最重要的幾條:

1、通過函數(shù)mmc_alloc_card分配一個mmc_card的變量card

2、通過讀取R4命令中的bit27(也就是Memory Present)來判斷此卡是純IO卡 ,還是同時包含存儲功能。筆者使用的WIFI模塊為純IO功能,所以card->type = MMC_TYPE_SDIO(這個很重要,以后會用到) (接下來重點分析MMC_TYPE_SDIO的情況)

3、通過發(fā)送CMD3命令獲取設備的從地址(relative addr),并且存放在變量card->rca中。筆者使用的WIFI模塊的card->rca = 1

4、通過發(fā)送CMD7,選中相應從地址的卡

5、通過調(diào)用函數(shù)mmc_set_clock設置卡工作的時鐘頻率

6、通過發(fā)送CMD52命令,設置4位數(shù)據(jù)傳輸模式

4、注冊SDIO功能模塊

847行的變量funcs存儲該SDIO卡所包含的IO功能塊的個數(shù),851行到857行就是逐一初始化各個IO功能塊,下面來重點看一下該函數(shù)的內(nèi)容:

第71行就是分配sdio_func結(jié)構(gòu)體變量,該結(jié)構(gòu)體存儲了功能塊的參數(shù)。

第75行就是給功能塊編號,編號是從1到7(因為一個SDIO設備最多只有7個功能塊),存儲在變量func->num中

第78行就是讀取SDIO卡中的FBR寄存器中關(guān)于該卡的功能類型的數(shù)據(jù),存儲在func->class變量中(具體關(guān)于FBR寄存器內(nèi)容,可以參考SDIO spec文檔)

第82行就是讀取SDIO卡中的CIS寄存器的內(nèi)容

上面的程序就是將功能模塊逐個的注冊進設備模型,這里想重點說明一下注冊的名稱(name),它是由三部分組成的,每部分之間用冒號隔開,(即 host的名稱:rca:功能塊編號)。

具體到筆者使用的WIFI模塊,因為其host名稱是mmc2? ,rca = 1,并且有兩個功能模塊(功能模塊編號分別是1和2),所以在/sys/bus/sdio/devices目錄下能見到如下兩個設備名

mmc2:0001:1

mmc2:0001:2

5、注冊SDIO卡

上面的mmc_add_card函數(shù)就是注冊card了(這個card是在第3部分,初始化SDIO卡 里面分配和定義的)

第259行就是給card命名,格式為host名字:從地址,對于筆者的WIFI模塊 就是mmc2:0001

第261到273行就是根據(jù)card->type來分辨出card的類型,給賦予相應的字符串,筆者的WIFI模塊就是"SDIO"

第275行就是打印信息,具體不解釋 筆者的打印信息為? mmc2:new high speed SDIO card at address 0001(通常可以通過查看內(nèi)核啟動信息中是否有該語句來判斷card是否被正確識別)

第283行 就是將card注冊進linux設備模型? 注冊結(jié)果就是可以在/sys/bus/mmc/devices目錄下見到card?的名字,筆者的就是mmc2:0001

總結(jié)

以上是生活随笔為你收集整理的cmd52命令发送 mmc_Linux SD/MMC/SDIO驱动分析(新)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

国产视频二区三区 | 中文字幕在线播放日韩 | 国产又粗又猛又黄又爽的视频 | 狠狠狠色丁香婷婷综合久久88 | 亚洲另类在线视频 | 欧美精品一级视频 | 免费看的国产视频网站 | 久久久国际精品 | 久久久男人的天堂 | 国产麻豆成人传媒免费观看 | 亚洲免费永久精品国产 | 奇米网444| 视频国产一区二区三区 | 免费日韩在线 | 五月婷婷另类国产 | 久久精品国产亚洲精品 | 中文字幕免费中文 | 超碰午夜 | 亚洲va韩国va欧美va精四季 | 亚州av一区 | 中文区中文字幕免费看 | 久草视频国产 | 国产一区二区三区 在线 | 黄色网大全 | 成年人电影毛片 | 精品9999| 夜夜夜| 91亚洲永久精品 | www国产一区 | 黄色视屏av | 国产精品videossex国产高清 | 狠狠狠色丁香婷婷综合久久五月 | 91高清在线| 超碰97公开| 在线天堂8√ | 亚洲精品 在线视频 | 天天爱天天射天天干天天 | 国产精品一区二区中文字幕 | 国产一级在线看 | 国产一区二区中文字幕 | 免费网站观看www在线观看 | 国产一级淫片免费看 | 中文字幕av免费 | 久久精品香蕉 | 美女在线免费观看视频 | 91精品一区二区三区蜜桃 | 国产99自拍| 成人av教育| 97超碰人人看 | 九九热久久免费视频 | 久久少妇 | 国产精品国产三级国产aⅴ9色 | 9在线观看免费高清完整版 玖玖爱免费视频 | 国产成人精品区 | 手机看片| 91热爆在线观看 | 国产尤物视频在线 | 国产69精品久久久久99尤 | 欧美视频18 | 欧美性色综合网站 | 国产品久精国精产拍 | 日韩小视频网站 | 久久国产福利 | 97在线观看免费高清完整版在线观看 | 四虎影院在线观看av | 国产精品第一页在线观看 | 91视频在线免费观看 | 夜夜爱av| 久操久 | 亚洲精品一区二区三区高潮 | 久久久综合九色合综国产精品 | 精品夜夜嗨av一区二区三区 | 黄色www免费 | 国产精品永久在线观看 | 干av在线 | 免费av小说 | 一区二区三区四区五区在线视频 | 在线成人看片 | 国产字幕在线看 | 日本在线观看一区二区三区 | 久久激情综合网 | 成人国产精品久久久久久亚洲 | 久久久久美女 | 亚洲精品久久久久久国 | 在线视频 一区二区 | 久久99国产一区二区三区 | 三上悠亚一区二区在线观看 | 精品国产乱码久久久久久三级人 | 99精品在线播放 | 免费在线成人av电影 | 亚洲精品xxxx| 亚洲综合在| 国产精品久久久久影院 | 精品一区二区三区久久久 | 少妇啪啪av入口 | 欧美不卡视频在线 | 欧美日韩综合在线观看 | 成人av直播 | 色在线国产 | 天天干天天摸天天操 | 91麻豆精品国产91久久久久久 | 久黄色| 久久99国产精品免费网站 | 91九色蝌蚪视频在线 | 欧美成人基地 | www.97视频| 日韩女同av | www国产精品com| 精品国产理论 | 中文字幕日韩精品有码视频 | 色香网 | 丁香资源影视免费观看 | 在线观看av的网站 | 婷婷视频在线播放 | 亚洲精品午夜视频 | 国产精品毛片一区二区 | 国产在线成人 | 国产日产精品久久久久快鸭 | 在线观看亚洲免费视频 | www色片 | 亚洲精品日韩在线观看 | 亚洲三级毛片 | 91香蕉视频黄色 | 日韩av电影网站在线观看 | 91精品国产一区二区三区 | 又黄又爽又色无遮挡免费 | 日韩最新在线视频 | 久久福利小视频 | av丝袜在线 | 激情丁香在线 | 日本中文在线 | 97操碰| 久久精品久久精品久久 | 日韩艹 | 狠狠狠色丁香综合久久天下网 | 麻豆一精品传二传媒短视频 | 亚洲日本国产精品 | 国产午夜三级一区二区三 | 免费黄av | 蜜臀av性久久久久蜜臀av | 国产麻豆精品95视频 | 欧美91精品国产自产 | 国产无套精品久久久久久 | 蜜臀av性久久久久蜜臀av | 国产做aⅴ在线视频播放 | 国产亚洲精品无 | 久久午夜鲁丝片 | 日韩欧美网址 | 中文字幕日韩国产 | 欧美嫩草影院 | 91av色 | 免费视频三区 | 欧美成人影音 | 天天曰天天爽 | 国产精品嫩草55av | 在线观看久 | 国产91精品看黄网站在线观看动漫 | 欧美日韩1区2区 | 精品一二区 | 久久久久久久久久影视 | 久草热久草视频 | 精品欧美在线视频 | 久久久久久久99精品免费观看 | 人人超碰免费 | 免费看黄色大全 | 伊人成人久久 | 999国内精品永久免费视频 | 久久久久久久久久影视 | 国产午夜在线 | 精品一区精品二区高清 | 黄色午夜网站 | 日韩午夜精品 | 色噜噜日韩精品一区二区三区视频 | 欧美亚洲一级片 | 成人a毛片 | 中文字幕亚洲综合久久五月天色无吗'' | 成人网在线免费视频 | 日韩r级电影在线观看 | 久 久久影院 | 国产精品麻豆99久久久久久 | 亚洲免费公开视频 | 久久专区 | 全黄色一级片 | 中文字幕有码在线 | 91成人黄色 | 亚洲国产精品第一区二区 | 日韩专区av | 日韩高清一 | 亚洲精品一区二区精华 | 人人草在线视频 | 日韩精品中文字幕在线 | 最新精品国产 | 一本一道波多野毛片中文在线 | 日韩视频区 | 国产婷婷一区二区 | 国内精品久久久久久久久 | 国产在线观看高清视频 | 免费成人在线观看 | 亚洲影视九九影院在线观看 | 欧美日韩精品二区第二页 | 国产精品一区二区三区视频免费 | www久草| 色婷婷狠狠18 | 黄色免费视频在线观看 | 久久精品日产第一区二区三区乱码 | 国产在线观看免费 | 日韩在线视频观看免费 | 99视频这里有精品 | 中文字幕高清免费日韩视频在线 | 日韩欧美aaa| 亚洲乱码国产乱码精品天美传媒 | 欧美精品乱码久久久久久 | 91在线免费公开视频 | 国产视频一区二区三区在线 | 久久久久麻豆v国产 | 久久精品看片 | 久久久久久久久久网站 | 在线免费观看黄网站 | 国产成人在线播放 | 开心色插| 涩涩伊人 | 日韩午夜电影院 | 欧美日韩在线观看视频 | 国产综合激情 | 五月婷婷色播 | 91视频久久久久 | 狠狠狠狠狠狠狠 | 久久国产手机看片 | 免费看片成人 | a天堂最新版中文在线地址 久久99久久精品国产 | 中文字幕免费高清 | 伊人狠狠色丁香婷婷综合 | 国产va精品免费观看 | 在线观看亚洲电影 | 免费a v在线 | 日韩免费电影一区二区三区 | 肉色欧美久久久久久久免费看 | .国产精品成人自产拍在线观看6 | 在线天堂亚洲 | 天干啦夜天干天干在线线 | 看av在线| 日本丶国产丶欧美色综合 | 精品人人爽 | 久久成人黄色 | 久久99国产精品久久 | 综合久久影院 | 亚洲成人资源在线观看 | 国产免费a | 中文字幕精品三区 | 久久综合国产伦精品免费 | 成人蜜桃| 成人a视频片观看免费 | 超碰在线色 | 日韩视频一二三区 | 天天操天天干天天爽 | 欧美性天天 | 国产福利不卡视频 | 97视频在线观看播放 | 久久激情日本aⅴ | 日韩av在线小说 | 亚洲成人精品久久久 | 欧美日韩中文在线观看 | 日韩成人黄色 | 三三级黄色片之日韩 | 免费高清在线观看电视网站 | av在线免费观看网站 | 国产亚洲精品久久久久久电影 | 视频国产一区二区三区 | 日本久久久久久久久 | 天堂v中文| 色诱亚洲精品久久久久久 | 在线观看免费日韩 | 黄色大全免费观看 | 狠狠五月婷婷 | 开心色婷婷 | 久久精品中文字幕一区二区三区 | 久久久久亚洲国产精品 | 久久黄色成人 | 久草在线在线精品观看 | 久久久精品国产一区二区 | 亚洲一区黄色 | 91香蕉嫩草 | 国产视频 亚洲视频 | 91av在线视频播放 | 色综合久久久久综合 | 免费欧美| 99久久99久久精品国产片 | 五月天丁香 | 欧美性色综合网站 | 亚洲经典在线 | 超碰com| 久久亚洲成人网 | 99爱精品视频 | 黄色三级免费看 | 日韩av高潮 | 国产视频精品久久 | 久久第四色 | 在线观看日韩视频 | 五月开心婷婷 | 色91在线视频 | 国产午夜精品一区二区三区欧美 | 天天亚洲 | 麻豆影视在线观看 | 亚洲夜夜爽 | 国产精品免费成人 | 91av视频在线免费观看 | 国产九色在线播放九色 | 婷婷色在线 | 黄色大片免费播放 | 狠狠色伊人亚洲综合网站色 | 园产精品久久久久久久7电影 | 久久99国产一区二区三区 | 色av色av色av | 日韩高清av在线 | 99热精品久久 | 亚洲精品久久久久久久蜜桃 | 国产精品日韩 | 久久久久久久久精 | 精品国产1区二区 | 久久99久久99免费视频 | 欧美日韩在线看 | 伊人五月天.com | 免费观看av网站 | 亚欧日韩av | 九九热在线视频免费观看 | 亚洲 欧美 国产 va在线影院 | 亚洲精品欧美专区 | 日韩视频一区二区三区在线播放免费观看 | 天海翼一区二区三区免费 | 丁香六月五月婷婷 | 久久久国产高清 | 免费人做人爱www的视 | 免费看色的网站 | 欧美国产在线看 | 狠狠色狠狠综合久久 | 国产欧美精品一区二区三区 | 国产国语在线 | 国产五十路毛片 | 不卡电影免费在线播放一区 | 日韩啪啪小视频 | 超碰在线人人 | 中文字幕在线播放一区 | 九九免费观看视频 | 色综合久久88色综合天天 | www.久久精品视频 | 婷婷色网视频在线播放 | 亚洲人人射 | 成人免费ⅴa | 91人人在线| 天堂av一区二区 | 国产视频综合在线 | 少妇视频一区 | 久久精品99国产精品日本 | 天天做天天爱天天综合网 | 久久观看 | 欧美日韩网站 | 国产xvideos免费视频播放 | 亚洲第一区在线播放 | av直接看| 五月天激情婷婷 | 国产成人av网址 | 91视频网址入口 | 天天躁日日躁狠狠 | 成人免费视频网站在线观看 | 天天草天天干天天 | 亚洲激情在线观看 | av高清不卡| 国产成人在线观看 | 激情欧美xxxx| 成人免费视频播放 | 欧美一级片免费观看 | 色天天| 亚洲成人资源在线观看 | 久久久99精品免费观看app | 草在线视频 | 97免费视频在线 | 久久精品网站免费观看 | 亚洲欧洲一区二区在线观看 | 天天躁日日 | 色婷婷综合久久久久中文字幕1 | 一区二区三区动漫 | а天堂中文最新一区二区三区 | 91免费版在线观看 | 日本爽妇网 | 中文在线中文资源 | 国产精品综合久久久久久 | 黄色电影在线免费观看 | 日本在线观看中文字幕 | www.久久免费视频 | 波多野结衣亚洲一区二区 | 成人av久久 | 日韩在线一级 | 玖玖色在线观看 | 日韩精品视频一二三 | 精品一区免费 | 欧美在线不卡一区 | 久久久久国产免费免费 | 国产精品毛片一区视频播不卡 | 色大片免费看 | 亚洲国产资源 | 美女视频久久久 | 婷婷亚洲五月色综合 | 国产亚洲精品福利 | 天天视频色版 | 在线电影av| 久久国产视频网 | 色播99| 中文字幕免费高清在线观看 | 国产高清第一页 | 亚洲最大激情中文字幕 | 超碰97中文| 一区精品在线 | 国产色女人 | 99r在线观看 | 国产老太婆免费交性大片 | 日韩国产欧美在线视频 | 精品国产乱码久久久久久1区2匹 | 久久国产a | 97超级碰碰碰碰久久久久 | 精品久久久久久久久久 | 欧美在线视频第一页 | 天天爱天天干天天爽 | 国产一区二区三区在线免费观看 | 久久激情视频 久久 | 国产美女精彩久久 | 久久99久久99精品免观看软件 | 五月天久久狠狠 | 国产最新精品视频 | 成人影片在线免费观看 | 日韩欧美一区二区三区视频 | 99久热在线精品 | 中文av在线播放 | 色国产视频 | 亚洲作爱视频 | 国产高清一区二区 | 美女网站黄免费 | 在线中文字母电影观看 | 国产成人一区二区三区在线观看 | 91在线看| 久久电影网站中文字幕 | 91大神电影 | 在线免费观看黄色小说 | 国产69精品久久99不卡的观看体验 | 99精品免费久久久久久久久 | 亚洲欧美国产视频 | 成人黄色中文字幕 | 96精品高清视频在线观看软件特色 | 久久免费精品国产 | 四虎在线免费观看 | 天天夜操 | 99视频这里只有 | 欧美视频日韩视频 | 婷婷六月激情 | 国产福利在线不卡 | 国产精品12| 精品久久久久久久久久久久久久久久 | 天天射天天搞 | 久久精品女人毛片国产 | 亚洲成成品网站 | 日韩黄色在线观看 | 中文在线字幕观看电影 | 在线观看的a站 | 免费看的黄色的网站 | 国产精品久久久av久久久 | 国产精品99精品久久免费 | 国产一区高清在线观看 | 人人草在线观看 | 日日夜夜噜噜噜 | 日本三级中文字幕在线观看 | 免费a视频| 亚洲h在线播放在线观看h | 色成人亚洲网 | 国产女人免费看a级丨片 | 亚洲黄色一级视频 | 亚洲视频在线视频 | 99久e精品热线免费 99国产精品久久久久久久久久 | 国产热re99久久6国产精品 | 免费看特级毛片 | 亚洲最新在线视频 | www.狠狠插.com | 亚洲 欧洲av | 啪啪午夜免费 | 亚洲第一中文字幕 | 黄色免费观看 | 日韩精品久久久久久中文字幕8 | 日韩电影在线视频 | 日日干精品 | 2023av在线 | 国产色拍拍拍拍在线精品 | 亚洲成人频道 | 天天艹天天爽 | 国产精品永久免费观看 | 免费高清在线视频一区· | 欧美黄网站 | 探花视频在线观看 | 欧美在线你懂的 | 一区二区中文字幕在线 | 麻豆果冻剧传媒在线播放 | 国产一区二区三区午夜 | 日韩午夜在线播放 | 久久高清视频免费 | 在线观看一级 | 久久这里只有精品首页 | 免费高清在线观看成人 | 狠狠88综合久久久久综合网 | 久草| 成人av在线亚洲 | 在线观看视频一区二区 | 欧美日韩国产伦理 | 高清在线一区二区 | 国产午夜精品视频 | 深夜国产在线 | 久久国产精品网站 | 亚洲 欧美日韩 国产 中文 | 精品在线视频播放 | 中文字幕在线观看视频免费 | 伊人天堂久久 | 国产精品乱码久久久久久1区2区 | 亚洲综合导航 | 国产一区二区在线免费视频 | 久久综合狠狠综合 | 中文字幕免费观看全部电影 | 伊人五月天 | 天天操天天干天天插 | 日韩免费看 | 天天做天天射 | 香蕉久久久久久av成人 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 日韩字幕在线观看 | 欧美午夜理伦三级在线观看 | 精品亚洲午夜久久久久91 | 国产精品久久久久婷婷二区次 | 99在线视频播放 | 97视频人人澡人人爽 | 国产在线资源 | 日日骑| 久久久久久久久精 | 久久999精品 | 午夜精品久久久久久久99热影院 | 中文字幕在线第一页 | 中文在线最新版天堂 | 国产夫妻性生活自拍 | 亚洲午夜久久久久久久久久久 | 中文字幕在线高清 | 亚a在线 | 亚洲永久精品一区 | 欧美夫妻性生活电影 | 99视频精品| 又黄又网站| 久久久久久网站 | 四川bbb搡bbb爽爽视频 | 国产午夜精品在线 | 国内精品一区二区 | 婷婷综合激情 | 成人国产网址 | 天天干.com| 99免费看片 | 久草视频资源 | 蜜臀av性久久久久av蜜臀三区 | 狠狠色丁香久久婷婷综 | 亚洲一级免费观看 | 国产真实在线 | 国产97碰免费视频 | 国产视频一区二区三区在线 | 亚洲免费永久精品国产 | 成年人视频免费在线播放 | 在线观看91精品视频 | 亚洲精品视频在线免费播放 | 国产欧美综合在线观看 | 97超碰资源总站 | 久久久久综合精品福利啪啪 | 国产伦精品一区二区三区免费 | 亚洲激情一区二区三区 | 伊人久久av| 日本xxxx.com| 国产在线视频一区二区三区 | 在线日韩av| 成人香蕉视频 | 久久99精品久久久久久清纯直播 | 视频精品一区二区三区 | 日本黄色免费在线 | 欧美做受高潮 | www国产亚洲精品久久麻豆 | 狠狠狠色丁香综合久久天下网 | 久久久免费精品国产一区二区 | 黄色激情网址 | 天天射天天做 | 夜夜骑天天操 | 91成人天堂久久成人 | 成人在线播放免费观看 | 国产一级免费在线观看 | 91一区一区三区 | 18性欧美xxxⅹ性满足 | 国产91aaa| 操操日日 | 久久久久国产一区二区三区四区 | 久久久久国产成人免费精品免费 | 亚洲女欲精品久久久久久久18 | 99热超碰在线| 成人在线视 | 国内精品久久久久影院日本资源 | 伊人手机在线 | 国产区精品视频 | 精品国产成人av | 国产精品久久久久久久久久妇女 | 中文字幕精品一区久久久久 | 日韩在线小视频 | 久久精品观看 | 婷婷免费在线视频 | av色图天堂网 | 在线黄色国产电影 | 在线免费观看国产视频 | 成人黄色在线 | 久久国产精品免费一区二区三区 | 国产午夜视频在线观看 | 天天操天天操天天干 | 亚洲精品久久久蜜桃直播 | 日韩欧美视频免费观看 | 在线看欧美 | 97视频在线观看视频免费视频 | 免费在线观看日韩 | 国产小视频网站 | 欧美日韩一区二区视频在线观看 | 天天干天天做天天爱 | 免费观看一级视频 | av中文字幕日韩 | 视频在线观看入口黄最新永久免费国产 | 欧美色就是色 | 亚洲精品美女视频 | 色黄视频免费观看 | 在线观看91| 黄色91免费观看 | 欧美成人日韩 | 亚洲天堂网视频在线观看 | 免费电影一区二区三区 | 久久一区二区免费视频 | 成人99免费视频 | 久久久久成 | 欧美在线观看视频一区二区三区 | 天天干夜夜爱 | 三级黄色大片在线观看 | 在线观看视频你懂的 | 视频在线观看入口黄最新永久免费国产 | av资源免费看 | 日韩精选在线 | 啪一啪在线 | 日本成人免费在线观看 | 狠狠插天天干 | 精品久久中文 | 在线观看中文av | 91精品一区二区三区蜜桃 | 综合伊人av | 国产一级片在线播放 | 国产麻豆电影 | 青青网视频 | 日韩毛片在线一区二区毛片 | 7777xxxx| 日韩高清在线一区二区三区 | 国产最新视频在线观看 | 在线免费日韩 | a电影在线观看 | 亚洲成av人片在线观看www | 国产97在线观看 | 久久久久女人精品毛片九一 | 亚洲精区二区三区四区麻豆 | 亚洲成人av在线 | 欧美日韩精品国产 | 美女网站在线看 | 少妇高潮流白浆在线观看 | av综合站 | 91精品国产网站 | 成年人毛片在线观看 | 国产精品久久久视频 | 国产一区二区免费在线观看 | 亚洲黄色影院 | 91c网站色版视频 | 国模吧一区 | 亚洲成人av在线播放 | 亚洲欧洲中文日韩久久av乱码 | 日日爽视频 | 亚洲精品视频免费看 | 中文字幕高清有码 | 91亚洲精品国产 | 欧美日韩天堂 | 丁香婷婷久久 | 丁香亚洲 | 色婷婷五 | 最近中文字幕国语免费高清6 | 久久久久亚洲最大xxxx | 国产日本在线播放 | 国产一区二区不卡视频 | aa一级片| 97网在线观看 | 国产999精品久久久久久绿帽 | 91精品国产一区 | 天天搞天天干 | 麻豆观看 | 国产高清专区 | 精品99在线 | 久久99热精品这里久久精品 | 久久精品一区 | 日韩性片 | 欧美一级片播放 | 五月天色站 | 毛片黄色一级 | 色综合天天综合网国产成人网 | 国产美女视频一区 | 久久黄色网页 | 在线免费观看的av | 91九色视频在线播放 | 久久在草 | 国产手机在线观看 | 成人免费网站在线观看 | 人人讲下载 | 国产一级精品视频 | 久草在线最新 | 操操爽| av网站免费看 | 97色婷婷人人爽人人 | 九九热视频在线免费观看 | 在线观看国产中文字幕 | 激情五月***国产精品 | 香蕉视频日本 | 久久黄色免费视频 | 免费欧美 | 婷婷伊人五月 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 国产精品自在线 | 精品91在线 | 韩国一区二区三区视频 | 精品二区久久 | 国产在线观看xxx | 最新日韩在线观看视频 | 成年人三级网站 | 麻豆精品视频在线 | 免费观看国产视频 | 国产成人在线免费观看 | 久久99精品久久久久久秒播蜜臀 | 在线看片91 | 一二三区在线 | 国产精品国产精品 | 99爱在线| 91经典在线 | 久久久久久久国产精品 | 国产成人资源 | av 在线观看 | 激情五月婷婷综合网 | 国产高清久久久 | 国产成人精品一区一区一区 | 激情电影在线观看 | 日韩av男人的天堂 | 99超碰在线观看 | 亚洲欧美在线视频免费 | 一区二区三区动漫 | 97超碰人人澡人人 | 中文不卡视频 | 久久久久影视 | 99久久精品午夜一区二区小说 | 国产一二三四在线观看视频 | 欧美精品一区二区在线观看 | 国产一级淫片免费看 | 欧美婷婷综合 | 91成人短视频在线观看 | 日韩黄色免费电影 | 久久99深爱久久99精品 | 久久人人爽人人爽人人 | 久久国产精品影视 | 成人wwwxxx视频| 在线观看av小说 | 欧美日韩国产高清视频 | 日韩免费电影网 | 色综合久久88色综合天天免费 | 丁香av| 99久久er热在这里只有精品15 | 国产精品久久一区二区无卡 | 毛片在线播放网址 | 91亚色免费视频 | 91在线最新 | 超碰在线观看av.com | 在线 国产一区 | 久久精品视频在线免费观看 | 国产最新在线视频 | 亚洲成人在线免费 | 亚州视频在线 | 五月色丁香 | 欧美ⅹxxxxxx | 又粗又长又大又爽又黄少妇毛片 | 国产婷婷色 | 麻豆传媒一区二区 | 亚洲黄色成人 | 国产美女被啪进深处喷白浆视频 | 日韩区欠美精品av视频 | 免费裸体视频网 | 国产在线91精品 | 欧美夫妻性生活电影 | 丝袜网站在线观看 | 日韩精品久久久久久 | 免费a视频在线观看 | 97国产在线 | 久99视频 | 日韩大陆欧美高清视频区 | 亚洲理论在线观看 | 亚洲国产美女精品久久久久∴ | 久久亚洲综合国产精品99麻豆的功能介绍 | 久久久久免费视频 | 激情深爱五月 | 97偷拍视频 | 免费h视频 | 国产精品初高中精品久久 | 久久精品亚洲国产 | 久久久国产精品免费 | 色网站在线免费 | 国产精品久久久久高潮 | 一本一道波多野毛片中文在线 | 国产精品theporn | 日本久久久久久久久久 | 91在线小视频 | av韩国在线 | 国产一线天在线观看 | 日本在线精品视频 | 8x成人在线| 五月综合激情网 | 久久精品官网 | 夜色在线资源 | 欧美日韩在线精品一区二区 | 国产精品91一区 | 国产在线观看污片 | 免费观看福利视频 | av电影免费 | 99成人精品 | 免费情趣视频 | 欧美久久久久久久久 | 欧美日韩视频一区二区三区 | 久精品视频免费观看2 | 国产精品福利在线播放 | 国内成人av| 激情综合网五月激情 | 97超碰精品 | 激情伊人五月天久久综合 | 国产小视频国产精品 | 青青看片 | 国产精品 中文字幕 亚洲 欧美 | 激情婷婷 | 日韩av电影国产 | 久久五月天综合 | 国产 日韩 中文字幕 | 天天干夜夜干 | 午夜精品久久久久久久99婷婷 | 亚洲女同ⅹxx女同tv | 中文在线字幕免费观 | www最近高清中文国语在线观看 | 亚洲春色奇米影视 | 日韩大片在线看 | 日韩av成人在线 | 国产精品大片免费观看 | 97超碰人| www.久艹 | 免费一区在线 | 婷婷色综合网 | 国产字幕在线观看 | 久久成人欧美 | 97视频亚洲 | 黄色亚洲大片免费在线观看 | 国产精品久久久久久久免费观看 | 99热只有精品在线观看 | 97视频免费在线看 | 超碰97av在线| 色综合激情网 | 成人在线视频论坛 | 国产亚洲欧美日韩高清 | 在线免费黄色 | 午夜av电影院 | av丝袜在线 | 日韩性xxx| 伊人五月天av| 国产操在线 | 欧美做受高潮1 | 欧美在线你懂的 | 黄在线免费观看 | 69视频在线播放 | 99久久精品一区二区成人 | 久久歪歪 | 中文字幕乱码在线播放 | 激情久久小说 | 欧美精品中文字幕亚洲专区 | 日韩电影在线视频 | 在线天堂中文www视软件 | 手机在线永久免费观看av片 | 97在线看片 | 激情伊人五月天久久综合 | 日韩精品久久久久 | 91av视频在线免费观看 | 99在线视频网站 | 午夜av电影院 | 色综合狠狠干 | 国产在线国产 | 91视频啊啊啊 | 天天玩夜夜操 | 日日天天av | 四虎在线视频 | 日韩网站在线看片你懂的 | 99热最新 | 午夜精品久久久久久久99热影院 | 天天激情天天干 | 国产拍揄自揄精品视频麻豆 | 超碰com| 国产精品久久久久久一二三四五 | 国产裸体永久免费视频网站 | 中文在线8资源库 | 久久久久久97三级 | 二区三区精品 | 久久av网| 97看片| 久久精品久久精品久久精品 | 91av观看 | 亚洲女人天堂成人av在线 | 成人在线视频网 | 日本精品久久久久久 | 国产精品精 | 91精品免费在线观看 | 中文字幕在线日亚洲9 | 九九久久久久99精品 | 久久免费黄色网址 | 国语自产偷拍精品视频偷 | 日韩精品中文字幕在线观看 | 国产精品自产拍在线观看蜜 | 欧美乱大交 | 91传媒91久久久 | 久久国产精品成人免费浪潮 | 久久国产精品视频 | 国产伦精品一区二区三区四区视频 | 天天色天天上天天操 | 亚洲 精品在线视频 | 色婷婷综合久久久中文字幕 | 91看片看淫黄大片 | 成人一级在线观看 | 狠狠色伊人亚洲综合网站色 | 激情视频网页 | 国产又粗又硬又爽视频 | 国产片免费在线观看视频 | 国产在线国产 | 亚洲精品国偷自产在线99热 | 免费在线中文字幕 | 中文字幕在线视频网站 | 国产精品国产三级国产不产一地 | 在线播放视频一区 | 亚洲高清在线视频 | 国产精品一区二区三区免费看 | 一区中文字幕电影 | 婷婷资源站 | 天天综合网 天天综合色 | 91av99| 色综合www| 日韩在线视频二区 | 亚洲精品一区二区在线观看 | 国产五月天婷婷 | 久久精品一二三区白丝高潮 | 亚洲成人av影片 | 久久久受www免费人成 | 中文av日韩 | 91亚洲精品久久久 | 999久久| 伊色综合久久之综合久久 | 黄色午夜 | av在线在线 | 丁香婷婷社区 | 最新国产一区二区三区 | 97精品国产手机 | 亚洲国产日韩av | 久草视频在线看 | 成年人视频免费在线播放 | 国产高清免费在线观看 | 99国产在线观看 | 国产精品久久久久久久久搜平片 | 丁香综合激情 | 中文字幕在线观看网站 | 欧洲精品在线视频 | 国产激情小视频在线观看 | 亚洲欧美va | 一区二区三区在线免费播放 | 在线不卡中文字幕播放 | 在线观看精品一区 | 欧美精品一区二区性色 | 成年人视频在线免费观看 | 99在线热播 | 国产超碰在线观看 | 在线国产视频一区 | 国产精品久久久精品 | av黄色影院 | 国产精品一区一区三区 | 色99网| 欧美作爱视频 | av在线网站观看 | 国产精品入口久久 | 97视频在线观看免费 | 久久国产a| 五月婷婷综合久久 | 精品一区二区久久久久久久网站 |