Linux內核之mmc子系統-sdio (1)

前言


SDIO

       SDIO卡是在SD內存卡接口的基礎上發展起來的接口,SDIO接口兼容以前的SD內存卡,並且可以連接SDIO接口的設備,目前根據SDIO協議的SPECSDIO接口支持的設備總類有藍牙,網卡,電視卡等。

       SDIO協議是由SD卡的協議演化升級而來的,很多地方保留了SD卡的讀寫協議,同時SDIO協議又在SD卡協議之上添加了CMD52CMD53命令。由於這個,SDIOSD卡規範間的一個重要區別是增加了低速標準,低速卡的目標應用是以最小的硬件開始來支持低速I/O能力。低速卡支持類似調制解調器,條形碼掃描儀和GPS接收器等應用。高速卡支持網卡,電視卡還有“組合”卡等,組合卡指的是存儲器+SDIO

       SDIOSD卡的SPEC間的又一個重要區別是增加了低速標準。SDIO卡只需要SPI1SD傳輸模式。低速卡的目標應用是以最小的硬件開支來支持低速I/O能力,低速卡支持類似MODEM,條形掃描儀和GPS接收器等應用。對組合卡來說,全速和4BIT操作對卡內存儲器和SDIO部分都是強制要求的。

       在非組合卡的SDIO設備裏,其最高速度要只有達到25M,而組合卡的最高速度同SD卡的最高速度一樣,要高於25M

 

SDIO總線

       SDIO總線和USB總線類似,SDIO總線也有兩端,其中一端是主機(HOST)端,另一端是設備端(DEVICE),採用HOST- DEVICE這樣的設計是爲了簡化DEVICE的設計,所有的通信都是由HOST端發出命令開始的。在DEVICE端只要能解溪HOST的命令,就可以同HOST進行通信了。

       SDIOHOST可以連接多個DEVICE,如下圖所示:

 

 

       這個是同SD的總線一樣的,其中有如下的幾種信號

1.       CLK信號:HOSTDEVICE的時鐘信號.

2.       CMD信號:雙向的信號,用於傳送命令和反應。

3.       DAT0-DAT3 信號:四條用於傳送的數據線。

4.       VDD信號:電源信號。

5.       VSS1VSS2:電源地信號。

SDIO總線定義中,DAT1信號線複用爲中斷線。在SDIO1BIT模式下DAT0用來傳輸數據,DAT1用作中斷線。在SDIO4BIT模式下DAT0-DAT3用來傳輸數據,其中DAT1複用作中斷線。

 

SDIO命令:

       SDIO總線上都是HOST端發起請求,然後DEVICE端迴應請求。其中請求和迴應中會數據信息。

1.       Command:用於開始傳輸的命令,是由HOST端發往DEVICE端的。其中命令是通過CMD信號線傳送的。

2.       Response:迴應是DEVICE返回的HOST的命令,作爲Command的迴應。也是通過

CMD線傳送的。

3.       Data:數據是雙向的傳送的。可以設置爲1線模式,也可以設置爲4線模式。數據是通過DAT0-DAT3信號線傳輸的。

  SDIO的每次操作都是由HOSTCMD線上發起一個CMD,對於有的CMDDEVICE需要返回Response,有的則不需要。

       對於讀命令,首先HOST會向DEVICE發送命令,緊接着DEVICE會返回一個握手信號,此時,當HOST收到迴應的握手信號後,會將數據放在4位的數據線上,在傳送數據的同時會跟隨着CRC校驗碼。當整個讀傳送完畢後,HOST會再次發送一個命令,通知DEVICE操作完畢,DEVICE同時會返回一個響應。

       對於寫命令,首先HOST會向DEVICE發送命令,緊接着DEVICE會返回一個握手信號,此時,當HOST收到迴應的握手信號後,會將數據放在4位的數據線上,在傳送數據的同時會跟隨着CRC校驗碼。當整個寫傳送完畢後,HOST會再次發送一個命令,通知DEVICE操作完畢,DEVICE同時會返回一個響應。

 

SDIO的寄存器:

      SDIO卡的設備驅動80%的任務就是操作SDIO卡上的有關寄存器。SDIO卡最多允許有7個功能(function,這個同其功能號是對應的(07,每個功能都對應一個128K字節大小的寄存器,這個見下面的圖。功能號之所以取值範圍是1~7,而沒有包含0,是因爲功能0並不代表真正的功能,而代表CIA寄存器,即Common I/O Area,這個紀錄着SDIO卡的一些基本信息和特性,並且可以改寫這些寄存器。其中地址0x1000~0x17fffSDIO卡的CIS區域,就是基本信息區域,Common Information Structure。初始化的時候讀取並配對SDIO設備。

       這些寄存器的詳細分區已經其對應的功能,在開發過程中都是需要仔細研讀的,這些都在協議的SPEC中都有詳細說明,這裏就不在羅索了。 

 

CMD52命令:

SDIO設備爲了和SD內存卡兼容,SD卡所有CommandResponse完全兼容,同時加入了一些新的CommandResponse。例如,初始化SD內存卡使用ACMD41,而SDIO卡設備則用CMD5通知DEVICE進行初始化。

但二者最重要的區別是,SDIO卡比SD內存卡多了CMD52CMD53命令,這兩個命令可以方便的訪問某個功能的某個地址寄存器。

CMD52命令是IO_RW_DIRECT命令的簡稱,其命令格式如下

首先第一位爲0,表明是起始位,第二位爲傳輸方向,這裏爲1,代表方向爲HOSTDEVICE設備傳送,其後6位爲命令號,這裏是110100b,用十進制表示爲52CMD52的名字也由此而來。緊接着是讀寫標誌位。

      然後是操作的功能號。也就是function number。如果爲0則指示爲CCCR寄存器組。

       緊接着是寄存器地址,用17指示,由於功能寄存器有128K地址,17位正好能尋址。

       再下來8Write data or Staff Bits的意思是說,如果當前爲寫操作,則爲數據,否則8位爲填充位。無意義。

       最後7位爲CRC校驗碼。最後一位爲結束位0

       對於CMD52Response48位,命令格式如下:

 

       總結下,CMD52是由HOST發往DEVICE的,它必須有DEVICE返回來的Response CMD52不需要佔用DAT線,讀寫的數據是通過CMD52或者Response來傳送。每次CMD52只能讀或者寫一個byte

 

CMD53命令:

CMD52每次只能讀寫一個字節,因爲有了CMD53對讀寫進行了擴展,CMD53允許每次讀寫多個字節或者多個塊(BLOCK)CMD53的命令格式如下:

       第一位是1,爲開始位,然後是一位方向位,總是1,代表方向爲HOSTDEVICE設備傳送,其後6位爲命令號,這裏是110101b,用十進制表示爲53CMD53的名字也由此而來。

       然後是1位的讀寫標誌。接着是3位功能號,這個同CMD52都是相同的。Block Mode如果1代表是塊傳輸模式,否則爲字節傳輸模式。

       OP Code爲操作位,如果是0,代表數據往固定的位置讀寫,如果1代表是地質增量讀寫。例如,對地址0固定讀寫16個字節,相當於16次讀寫的地址0,而對地址0增量讀寫16個字節,相當於讀寫0~15地址的數據。

       然後是17位的地址寄存器,可以尋址到128K字節的地址,然後是9位的讀寫的計數,對於字節讀取,讀寫大小就是這個計數,而對於塊讀寫,讀寫的大小是計數乘以塊的大小。

       隨後的7位爲CRC校驗碼。最後一位爲1

       當讀寫操作是塊操作的時候,塊的大小是可以通過設置FBR中的相關寄存器來設置。

       CMD52命令不同的是,CMD53沒有返回的命令的,這裏判斷是否DEVICE設備讀寫完畢是需要驅動裏面自己判斷的,一般有2個方法,1.設置相應的讀寫完畢中斷。如果DEVICE設備讀寫完畢,則對HOST設備發送中斷。2.HOST設備主動查詢DEVICE設備是否讀寫完畢,可以通過CMD命令是否有返回來判斷是否DEVICE是否讀寫完畢。

轉自:http://blog.csdn.net/tanxs001/archive/2010/12/22/6091320.aspx



發佈了56 篇原創文章 · 獲贊 19 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章