1. SDIO接口介紹:
SDIO 就是 SD 的 I/O 接口的意思实苞。 用來解決和模塊間的高速通信問題,常見于嵌入式系統(tǒng)烈疚。速度可達到25Mbps
更具體的說黔牵,SD 本來是記憶卡的標(biāo)準(zhǔn),但是現(xiàn)在也可以把 SD 拿來插上一些外圍接口使用,這樣的技術(shù)便是 SDIO。
SDIO 通過 SD 的 I/O 管腳來連接外部的外圍 device 并傳輸數(shù)據(jù)爷肝。這些外圍設(shè)備猾浦,我們稱為 SDIO 卡,常見的有:
· Wi-Fi card(無線網(wǎng)絡(luò)卡)?
· CMOS sensor card(照相模塊)?
· GPS card?
· GSM/GPRS modem card?
· Bluetooth card?
· ?Radio/TV card(很好玩)
SDIO?的應(yīng)用將是未來嵌入式系統(tǒng)最重要的接口技術(shù)之一灯抛,并且也會取代目前?GPIO?式的?SPI?接口金赦。
2. SDIO總線
SDIO總線 和 USB總線 類似,SDIO也有兩端对嚼,其中一端是HOST端夹抗,另一端是device端。所有的通信都是由HOST端 發(fā)送 命令 開始的纵竖,Device端只要能解析命令漠烧,就可以相互通信。?
CLK信號:HOST給DEVICE的 時鐘信號磨确,每個時鐘周期傳輸一個命令沽甥。?
CMD信號:雙向 的信號,用于傳送 命令 和 反應(yīng)乏奥。?
DAT0-DAT3 信號:四條用于傳送的數(shù)據(jù)線摆舟。?
VDD信號:電源信號。?
VSS1,VSS2:電源地信號恨诱。
SD/SDIO的傳輸模式分為三種
spi mode ? ? ? ? ?——(標(biāo)準(zhǔn)的spi模式)
1-bit mode ? ?????—— cmd line媳瞪、 data line、clk line照宝、irq Line
4-bit mode ? ? ? ?——1 cmd line 蛇受、3 data line、clk
3. SDIO的命令與響應(yīng)
SDIO總線上都是HOST端發(fā)起請求厕鹃,然后DEVICE端回應(yīng)請求兢仰。
SDIO 命令由6個字節(jié)組成。(48bit)
a – Command:用于開始傳輸?shù)拿罴敛辏怯蒆OST端發(fā)往DEVICE端的把将。其中命令是通過CMD信號線傳送的。
b – Response:回應(yīng)是DEVICE返回的HOST的命令忆矛,作為Command的回應(yīng)察蹲。也是通過CMD線傳送的。
c – Data:數(shù)據(jù)是雙向的傳送的催训∏⒁椋可以設(shè)置為1線模式,也可以設(shè)置為4線模式漫拭。數(shù)據(jù)是通過DAT0-DAT3信號線傳輸?shù)摹?/p>
SDIO命令為:6字節(jié)亚兄,48bit
SDIO的每次操作都是由HOST在CMD線上發(fā)起一個CMD,對于有的CMD采驻,DEVICE需要返回Response儿捧,有的則不需要。?
對于讀命令:首先HOST會向DEVICE發(fā)送命令挑宠,緊接著DEVICE會返回一個握手信號菲盾,此時,當(dāng)HOST收到回應(yīng)的握手信號后各淀,會將數(shù)據(jù)放在4位的數(shù)據(jù)線上懒鉴,在傳送數(shù)據(jù)的同時會跟隨著CRC校驗碼。當(dāng)整個讀傳送完畢后碎浇,HOST會再次發(fā)送一個命令临谱,通知DEVICE操作完畢,DEVICE同時會返回一個響應(yīng)奴璃。?
從機在收到主機相關(guān)命令后悉默,開始發(fā)送數(shù)據(jù)塊給主機,所有數(shù)據(jù)塊都帶CRC校驗(由硬件自動處理)苟穆,單個數(shù)據(jù)塊讀的時候抄课,在收到1個數(shù)據(jù)塊以后即可以停止了唱星,不需要發(fā)送停止命令(CMD12)。但是多塊數(shù)據(jù)讀的時候跟磨,SD卡將一直發(fā)送數(shù)據(jù)給主機间聊,直到接到主機發(fā)送的STOP命令(CMD12)。
(1)??? 發(fā)送 CMD17 (單塊)或 CMD18 (多塊)讀命令抵拘,返回 0x00
(2)??? 接收數(shù)據(jù)開始令牌 0xfe (或 0xfc ) + 正式數(shù)據(jù) 512Bytes + CRC 校驗 2Bytes, 默認(rèn)正式傳輸?shù)臄?shù)據(jù)長度是 512Bytes 哎榴,可用 ? ? ? ? ? ? ? ? ? ? ? ? ? CMD16 設(shè)置塊長度。
對于寫命令:首先HOST會向DEVICE發(fā)送命令僵蛛,緊接著DEVICE會返回一個握手信號尚蝌,此時,當(dāng)HOST收到回應(yīng)的握手信號后充尉,會將數(shù)據(jù)放在4位的數(shù)據(jù)線上驼壶,在傳送數(shù)據(jù)的同時會跟隨著CRC校驗碼。當(dāng)整個寫傳送完畢后喉酌,HOST會再次發(fā)送一個命令,通知DEVICE操作完畢泵喘,DEVICE同時會返回一個響應(yīng)泪电。
?數(shù)據(jù)塊寫操作同數(shù)據(jù)塊讀操作基本類似,只是數(shù)據(jù)塊寫的時候纪铺,多了一個繁忙判斷相速,新的數(shù)據(jù)塊必須在SD卡非繁忙的時候發(fā)送。這里的繁忙信號由SD卡拉低SDIO_D0鲜锚,以表示繁忙突诬,SDIO硬件自動控制,不需要我們軟件處理
(1)??? 發(fā)送 CMD24 (單塊)或 CMD25 (多塊)寫命令芜繁,返回 0x00
(2)??? 發(fā)送數(shù)據(jù)開始令牌 0xfe (或 0xfc ) + 正式數(shù)據(jù) 512Bytes + CRC 校驗 2Bytes
SD卡的擦除步驟:
(1)??? 發(fā)送 CMD32 旺隙,跟一個參數(shù)來指定首個要擦除的起始地址( SD 手冊上說是塊號)
(2)??? 發(fā)送 CMD33, ,指定最后的地址
(3)??? 發(fā)送 CMD38 骏令,擦除指定區(qū)間的內(nèi)容
此 3 步順序不能顛倒蔬捷。、
4. SDIO ?WIFI實例
SDIO 接口的 wifi榔袋,首先周拐,它是一個 sdio 卡 設(shè)備,然后具備了 wifi 的功能凰兑,所以 SDIO 接口的 WiFi 驅(qū)動就是在 wifi 驅(qū)動 外面套上了一個 SDIO 驅(qū)動 的外殼妥粟。
SDIO驅(qū)動仍然符合設(shè)備驅(qū)動的分層與分離思想。
設(shè)備驅(qū)動層(wifi 設(shè)備):
核心層(向上向下提供接口)
主機驅(qū)動層(實現(xiàn) SDIO 驅(qū)動)
我們主要關(guān)心 core 目錄(CORE 層)吏够,其中是媒體卡的通用代碼勾给。包括 core.c host.c stdio.c滩报。?
CORE 層完成了?
1. 不同協(xié)議和規(guī)范的實現(xiàn)?
2. 為 HOST 層的驅(qū)動提供了接口函數(shù)?
3. 完成了 SDIO 總線注冊?
4. 對應(yīng) ops 操作?
5. 以及支持 mmc 的代碼