1. 程式人生 > >SDIO驅動的命令從何玩起?

SDIO驅動的命令從何玩起?

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訊號線複用為中斷線。在SDIO

1BIT模式下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,代表方向為HOST