SDIO驅動的命令從何玩起?
SDIO卡
SDIO卡是在SD記憶體卡介面的基礎上發展起來的介面,SDIO介面相容以前的SD記憶體卡,並且可以連線SDIO介面的裝置,目前根據SDIO協議的SPEC,SDIO介面支援的裝置總類有藍芽,網絡卡,電視卡等。
SDIO協議是由SD卡的協議演化升級而來的,很多地方保留了SD卡的讀寫協議,同時SDIO協議又在SD卡協議之上添加了CMD52和CMD53命令。由於這個,SDIO和SD卡規範間的一個重要區別是增加了低速標準,低速卡的目標應用是以最小的硬體開始來支援低速I/O能力。低速卡支援類似調變解調器,條形碼掃描器和GPS接收器等應用。高速卡支援網絡卡,電視卡還有“組合”卡等,組合卡指的是儲存器
SDIO和SD卡的SPEC間的又一個重要區別是增加了低速標準。SDIO卡只需要SPI和1位SD傳輸模式。低速卡的目標應用是以最小的硬體開支來支援低速I/O能力,低速卡支援類似MODEM,條形掃描器和GPS接收器等應用。對組合卡來說,全速和4BIT操作對卡記憶體儲器和SDIO部分都是強制要求的。
在非組合卡的SDIO裝置裡,其最高速度要只有達到25M,而組合卡的最高速度同SD卡的最高速度一樣,要高於25M。
SDIO匯流排
SDIO匯流排和USB匯流排類似,SDIO匯流排也有兩端,其中一端是主機(HOST)端,另一端是裝置端(DEVICE),採用HOST-
DEVICE
SDIO的HOST可以連線多個DEVICE,如下圖所示:
這個是同SD的匯流排一樣的,其中有如下的幾種訊號
1.CLK訊號:HOST給DEVICE的時鐘訊號.
2.CMD訊號:雙向的訊號,用於傳送命令和反應。
3.DAT0-DAT3訊號:四條用於傳送的資料線。
4.VDD訊號:電源訊號。
5.VSS1,VSS2:電源地訊號。
在SDIO匯流排定義中,DAT1訊號線複用為中斷線。在SDIO的
SDIO命令:
SDIO總線上都是HOST端發起請求,然後DEVICE端迴應請求。其中請求和迴應中會資料資訊。
1.Command:用於開始傳輸的命令,是由HOST端發往DEVICE端的。其中命令是通過CMD訊號線傳送的。
2.Response:迴應是DEVICE返回的HOST的命令,作為Command的迴應。也是通過
CMD線傳送的。
3.Data:資料是雙向的傳送的。可以設定為1線模式,也可以設定為4線模式。資料是通過DAT0-DAT3訊號線傳輸的。
SDIO的每次操作都是由HOST在CMD線上發起一個CMD,對於有的CMD,DEVICE需要返回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),這個同其功能號是對應的(0~7),每個功能都對應一個128K位元組大小的暫存器,這個見下面的圖。功能號之所以取值範圍是1~7,而沒有包含0,是因為功能0並不代表真正的功能,而代表CIA暫存器,即Common I/O Area,這個紀錄著SDIO卡的一些基本資訊和特性,並且可以改寫這些暫存器。其中地址0x1000~0x17fff是SDIO卡的CIS區域,就是基本資訊區域,Common Information Structure。初始化的時候讀取並配對SDIO裝置。
這些暫存器的詳細分割槽已經其對應的功能,在開發過程中都是需要仔細研讀的,這些都在協議的SPEC中都有詳細說明,這裡就不在羅索了。
CMD52命令:
SDIO裝置為了和SD記憶體卡相容,SD卡所有Command和Response完全相容,同時加入了一些新的Command和Response。例如,初始化SD記憶體卡使用ACMD41,而SDIO卡裝置則用CMD5通知DEVICE進行初始化。
但二者最重要的區別是,SDIO卡比SD記憶體卡多了CMD52和CMD53命令,這兩個命令可以方便的訪問某個功能的某個地址暫存器。
CMD52命令是IO_RW_DIRECT命令的簡稱,其命令格式如下
首先第一位為0,表明是起始位,第二位為傳輸方向,這裡為1,代表方向為HOST向