SDIO 卡 spa
SDIO 卡是在 SD 內存卡接口的基礎上發展起來的接口, SDIO 接口兼容之前的 SD 內存卡,而且能夠鏈接 SDIO 接口的設備,目前根據 SDIO 協議的 SPEC , SDIO 接口支持的設備總類有藍牙,網卡,電視卡等。 設計
SDIO 協議是由 SD 卡的協議演化升級而來的,不少地方保留了 SD 卡的讀寫協議,同時 SDIO 協議又在 SD 卡協議之上添加了 CMD52 和 CMD53 命令。因爲這個, SDIO 和 SD 卡規範間的一個重要區別是增長了低速標準,低速卡的目標應用是以最小的硬件開始來支持低速 I/O 能力。低速卡支持相似調制解調器 , 條形碼掃描儀和 GPS 接收器等應用。高速卡支持網卡,電視卡還有「組合」卡等,組合卡指的是存儲器 +SDIO 。 orm
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 這樣的設計是爲了簡化 DEVICE 的設計,全部的通訊都是由 HOST 端發出命令開始的。在 DEVICE 端只要能解溪 HOST 的命令,就能夠同 HOST 進行通訊了。 it
SDIO 的 HOST 能夠鏈接多個 DEVICE ,以下圖所示 : io
這個是同 SD 的總線同樣的 , 其中有以下的幾種信號 function
1. CLK 信號 :HOST 給 DEVICE 的時鐘信號 . form
2. CMD 信號:雙向的信號,用於傳送命令和反應。
3. DAT0-DAT3 信號 : 四條用於傳送的數據線。
4. VDD 信號 : 電源信號。
5. VSS1 , VSS2: 電源地信號。
在 SDIO 總線定義中 ,DAT1 信號線複用爲中斷線。在 SDIO 的 1BIT 模式下 DAT0 用來傳輸數據, DAT1 用做中斷線。在 SDIO 的 4BIT 模式下 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 的每次操做都是由 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 向 DEVICE 設備傳送,其後 6 位爲命令號,這裏是 110100b ,用十進制表示爲 52 , CMD52 的名字也由此而來。緊接着是讀寫標誌位。
而後是操做的功能號。也就是 function number 。若是爲 0 則指示爲 CCCR 寄存器組。
緊接着是寄存器地址,用 17 指示,因爲功能寄存器有 128K 地址, 17 位正好能尋址。
再下來 8 位 Write data or Staff Bits 的意思是說,若是當前爲寫操做,則爲數據,不然 8 位爲填充位。無心義。
最後 7 位爲 CRC 校驗碼。最後一位爲結束位 0 。
對於 CMD52 的 Response 是 48 位,命令格式以下:
總結下, CMD52 是由 HOST 發往 DEVICE 的,它必須有 DEVICE 返回來的 Response 。 CMD52 不須要佔用DAT 線,讀寫的數據是經過 CMD52 或者 Response 來傳送。每次 CMD52 只能讀或者寫一個 byte .
CMD53 命令:
CMD52 每次只能讀寫一個字節,由於有了 CMD53 對讀寫進行了擴展, CMD53 容許每次讀寫多個字節或者多個塊(BLOCK) 。 CMD53 的命令格式以下:
第一位是 1, 爲開始位,而後是一位方向位,老是 1 ,表明方向爲 HOST 向 DEVICE 設備傳送,其後 6 位爲命令號,這裏是 110101b ,用十進制表示爲 53 , CMD53 的名字也由此而來。
而後是 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 是否讀寫完畢。