目錄
上篇:
一.SDIO簡(jiǎn)介
二.SD卡簡(jiǎn)介/內(nèi)部結(jié)構(gòu)
1.SD卡/SD NAND引腳
2.SD卡寄存器
3.FLASH存儲(chǔ)器
三.SDIO總線拓?fù)?/p>
中篇:
四.SDIO功能框圖(重點(diǎn))
1.SDIO適配器
2.控制單元
3.命令通道(重點(diǎn))
4.數(shù)據(jù)通道
五.命令與響應(yīng)
1.命令格式
2.命令類型
3.命令描述
4.響應(yīng)類型
六.SD卡/SD NAND功能描述(重重點(diǎn))
1.操作條件確認(rèn)
2.卡識(shí)別模式
3.數(shù)據(jù)傳輸模式
下篇:
七.SDIO外設(shè)結(jié)構(gòu)體
1.SDIO初始化結(jié)構(gòu)體
2.SDIO命令初始化結(jié)構(gòu)體
3.SDIO數(shù)據(jù)初始化結(jié)構(gòu)體
八.SD卡讀寫測(cè)試實(shí)驗(yàn)
1.硬件設(shè)計(jì)
2.代碼講解
3.實(shí)驗(yàn)結(jié)果
一.SDIO簡(jiǎn)介
SDIO (Secure Digital Input and Output)全稱安全數(shù)字輸入/輸出接口,在AHB外設(shè)總線和多媒體卡(MMC)、SD存儲(chǔ)卡、SDIO卡和CE-ATA設(shè)備間提供了操作接口。
多媒體卡(MMC)
MMC(MultiMedia Card)卡由西門子公司和首推CF的SanDisk于1997年推出多媒體卡(MMC)是一種小型(24x32或18x1.4mm)可擦除固態(tài)存儲(chǔ)卡,其全稱為Multi-Media Card,特別應(yīng)用于移動(dòng)電話和數(shù)字影像及其他移動(dòng)終端中。
SD卡:(Secure Digital Memory Card)
SD卡是一種基于半導(dǎo)體快閃記憶器的新一代記憶設(shè)備。SD卡由日本松下、東芝及美國SanDisk公司于1999年8月共同開發(fā)研制。
SD卡數(shù)據(jù)傳送和物理規(guī)范由MMC發(fā)展而來,大小和MMC差不多,但是容納更大容量的存貯單元。SD卡與MMC卡保持著向上兼容,也就是說,MMC可以被新的SD設(shè)備存取,兼容性則取決于應(yīng)用軟件,但SD卡卻不可以被MMC設(shè)備存取。**
應(yīng)用:SD卡的結(jié)構(gòu)能保證數(shù)字文件傳送的安全性,也很容易重新格式化,所以有著廣泛的應(yīng)用領(lǐng)域,音樂、電影、新聞等多媒體文件都可以方便地保存到SD卡中。因此不少數(shù)碼相機(jī)也開始支持SD卡。
SD I/O 卡
本身不是用于存儲(chǔ)的卡,它是指利用 SDIO 傳輸協(xié)議的一種外設(shè)。比如 Wi-Fi Card,它主要是提供 Wi-Fi 功能,有些 Wi-Fi 模塊是使用串口或者 SPI 接口進(jìn)行通信的,但 Wi-Fi SDIO Card 是使用 SDIO 接口進(jìn)行通信的,一般設(shè)計(jì) SD I/O 卡是可以插入到 SD 的插槽
CE-ATA設(shè)備
CE-ATA 一種基于為了節(jié)省接口IO數(shù)量,專為輕薄 筆記本硬盤 設(shè)計(jì)的筆記本硬盤高速通訊接口。 一種使用MMC接口界面,ATA指令集的筆記本電腦 硬盤接口
結(jié)論:MMC卡是SD卡的前身,也就是說SD將取代MMC卡的地位,MMC卡也用的越來越少,所以我們后面只講SD卡.
SDIO的主要功能:
(關(guān)于不是SD卡的就不介紹了)
1.與SD存儲(chǔ)卡規(guī)格版本2.0全兼容(向前兼容)
2.數(shù)據(jù)和命令輸出使能信號(hào),用于控制外部雙向驅(qū)動(dòng)器。
SDIO外設(shè)掛載在STM32的AHB總線。
這樣一來,STM32(主機(jī)),就可以通過AHB總線,控制SDIO外設(shè)的寄存器進(jìn)而控制SDIO外設(shè)讀/寫SD卡,SDIO外設(shè)向SD卡傳輸數(shù)據(jù),或者向SD卡接收數(shù)據(jù)可以使用DMA進(jìn)行傳輸(這樣可以省去很多繁瑣的步驟后面再講)
當(dāng)前版本的SDIO在同一時(shí)間里只能支持一個(gè)SD卡(這是ST公司限制的)
二.SD卡簡(jiǎn)介/內(nèi)部結(jié)構(gòu)
SD卡是一種基于半導(dǎo)體快閃記憶器的新一代記憶設(shè)備。SD卡由日本松下、東芝及美國SanDisk公司于1999年8月共同開發(fā)研制。
SD卡數(shù)據(jù)傳送和物理規(guī)范由MMC發(fā)展而來,大小和MMC差不多,但是容納更大容量的存貯單元。SD卡與MMC卡保持著向上兼容,也就是說,MMC可以被新的SD設(shè)備存取,兼容性則取決于應(yīng)用軟件,但SD卡卻不可以被MMC設(shè)備存取。**
應(yīng)用:SD卡的結(jié)構(gòu)能保證數(shù)字文件傳送的安全性,也很容易重新格式化,所以有著廣泛的應(yīng)用領(lǐng)域,音樂、電影、新聞等多媒體文件都可以方便地保存到SD卡中。因此不少數(shù)碼相機(jī)也開始支持SD卡。
SD卡采用的是采用了NandFlash存儲(chǔ)器,稍后解釋NandFlash與NorFlash的區(qū)別。
1.卡容量
標(biāo)準(zhǔn)容量 SD 卡,支持最大 2GB 的容量。所有的物理規(guī)格文檔都會(huì)定義這種。
高容量 SD 卡(SDHC),支持超過 2GB 的容量。本文檔解釋的規(guī)格最大為 32GB 容量。只有 SDIO支持 2.0 協(xié)議才能夠識(shí)別這種高容量 SD 卡(而SDIO外設(shè)正好最高支持到2.0協(xié)議)。
STM32F10x 系列控制器只支持 SD 卡規(guī)范版本 2.0,即只支持標(biāo)準(zhǔn)容量 SD 和高容量SDHC 標(biāo)準(zhǔn)卡,不支持超大容量 (大于32GB)SDXC 標(biāo)準(zhǔn)卡,所以STM32可以支持的最高卡容量是 32GB。
2.速度等級(jí)
我們定義了 4 個(gè)速度等級(jí),來表示卡的最小速率:(實(shí)際上目前最高 Class10)
● Class 0 – 這種卡不定義具體性能,代表了這個(gè)規(guī)范出來之前的所有卡
● Class 2 – 最小 2MB/s 的性能
● Class 4 – 最小 4MB/s 的性能
● Class 6 – 最小 6MB/s 的性能
● Class 8 – 最小 8MB/s 的性能
● Class 10 – 最小 10MB/s 的性
SD卡的內(nèi)部構(gòu)造:
電源檢測(cè)單元保證 SD 卡工作在合適的電壓下,如出現(xiàn)掉電或上狀態(tài)時(shí),它會(huì)使控制單元和存儲(chǔ)單元接口復(fù)位;
1.SD卡/SD NAND引腳
1)SD卡引腳
SD 卡使用 9-pin 接口通信,其中 3 根電源線、1 根時(shí)鐘線、1 根命令線和 4 根數(shù)據(jù)線,具體說明如下:
CLK:時(shí)鐘線,由 SDIO 主機(jī)產(chǎn)生,即由 STM32 控制器輸出,最高 25MB/s 的接口速度(使用4條并行數(shù)據(jù)線);
CMD:命令控制線,SDIO 主機(jī)通過該線發(fā)送命令控制 SD 卡,如果命令要求 SD 卡提供應(yīng)答(響應(yīng)),SD 卡也是通過該線傳輸應(yīng)答信息(即命令響應(yīng)都是通過CMD命令控制線來串行傳輸?shù)?;
D0-3:數(shù)據(jù)線,傳輸讀寫數(shù)據(jù);SD 卡可將 D0 拉低表示忙狀態(tài); VDD、VSS1、VSS2:電源和地信號(hào)。
2.SD卡寄存器
卡控制單元控制 SD 卡的運(yùn)行狀態(tài),它包括有 8 個(gè)寄存器,接口驅(qū)動(dòng)器控制 SD 卡引腳的輸入輸出
SD 卡總共有 8 個(gè)寄存器,用于設(shè)定或表示 SD 卡信息,這些寄存器只能通過對(duì)應(yīng)的命令訪問(STM32主機(jī)通過驅(qū)動(dòng)SDIO外設(shè)通過CMD命令線向從機(jī)SD卡發(fā)送命令),SDIO 定義了 64 個(gè)命令,每個(gè)命令都有特殊意義,可以實(shí)現(xiàn)某一特定功能,SD 卡接收到命令后,根據(jù)命令要求對(duì) SD 卡內(nèi)部寄存器進(jìn)行修改,程序控制中只需要發(fā)送組合命令就可以實(shí)現(xiàn) SD 卡的控制以及讀寫操作。
1.CID 寄存器(重點(diǎn)了解)
卡識(shí)別(CID)寄存器是一個(gè) 128 位的寄存器。包含了卡的識(shí)別信息,用于卡識(shí)別解析(具有唯一性)。每個(gè)讀/寫卡都有一個(gè)特殊的識(shí)別號(hào)。CID 寄存器的結(jié)構(gòu)如下:
2.RCA 寄存器(重點(diǎn)了解)
可寫的 16 位SD卡相對(duì)地址寄存器,在SD卡的初始化期間,由SD卡向外發(fā)布的卡地址。這個(gè)地址用于卡初始化進(jìn)程之后,主機(jī)同卡之間的交互尋址。(在主機(jī)向SD卡讀寫數(shù)據(jù)時(shí),就是發(fā)送CMD7選擇/取消選擇 RCA 地址卡,就是靠RCA來確定主機(jī)與哪張卡通信)
為啥不用上面的CID呢 ?
答:因?yàn)樗L了128位呢,僅此而已
3.CSD 寄存器(2.0)
CSD V2.0 只適用于高容量
4.SCR 寄存器
作為 CSD 寄存器的補(bǔ)充,另一個(gè)配置寄存器稱為 SD 卡配置寄存器(SCR)。SCR 提供了 SD 卡的特殊功能的信息。SCR 是一個(gè) 64bit 的寄存器,這個(gè)寄存器應(yīng)該由 SD 廠家設(shè)置。
5.OCR 寄存器(重點(diǎn)了解)
32 位的操作條件寄存器(OCR)存儲(chǔ)了卡的 VDD 電壓描述。另外,還包括了狀態(tài)信息位。如果卡的上電程序完成,一個(gè)狀態(tài)位會(huì)被設(shè)置。寄存器還包括另一個(gè)狀態(tài)位,在設(shè)置上電狀態(tài)位后,用來表明卡的容量狀態(tài)。
Bit31 – 卡上電狀態(tài)位(busy),這個(gè)狀態(tài)位在卡的上電流程完成后設(shè)置。
Bit30 – 卡容量狀態(tài)位(CCS),如果是高容量卡,設(shè)置為 1,如果是標(biāo)準(zhǔn)卡,設(shè)置為 0。
卡容量狀態(tài)位只有在上電流程完成,且 Bit31 設(shè)置為 1 之后才有效。主機(jī)可以讀取這個(gè)狀態(tài)位來判斷卡的種類
上面這些寄存器的只要了解即可,后面用的不多,等后面用到再講這樣就能有個(gè)更深刻的認(rèn)識(shí)。
3.FLASH存儲(chǔ)器
1)FLASH簡(jiǎn)介
FLSAH 存儲(chǔ)器又稱閃存,它與 EEPROM 都是掉電后數(shù)據(jù)不丟失的存儲(chǔ)器,但 FLASH存儲(chǔ)器容量普遍大于 EEPROM,現(xiàn)在基本取代了它的地位。我們生活中常用的 U 盤、SD卡、SSD 固態(tài)硬盤以及我們STM32 芯片內(nèi)部用于存儲(chǔ)程序的設(shè)備,都是 FLASH 類型的存儲(chǔ)器。在存儲(chǔ)控制上,最主要的區(qū)別是 FLASH 芯片只能一大片一大片地擦寫,而在“I2C章節(jié)”中我們了解到 EEPROM 可以單個(gè)字節(jié)擦寫。
2)NOR FLASH 和 NAND FLASH的區(qū)別
FLASH 存儲(chǔ)器又分為 NOR FLASH 和 NAND FLASH
NOR 與 NAND 的共性是在數(shù)據(jù)寫入前都需要有擦除操作,而擦除操作一般是以“扇區(qū)/塊”為單位的。
而 NOR 與 NAND 特性的差別,主要是由于其內(nèi)部“地址/數(shù)據(jù)線”是否分開導(dǎo)致的。由于 NOR 的地址線和數(shù)據(jù)線分開,它可以按“字節(jié)”讀寫數(shù)據(jù),符合 CPU 的指令譯碼執(zhí)行要求,而由于 NAND 的數(shù)據(jù)和地址線共用,只能按“塊”來讀寫數(shù)據(jù),所以不符合CPU指令譯碼要求。
所以NOR FLASH 一般應(yīng)用在代碼存儲(chǔ)的場(chǎng)合,如嵌入式控制器內(nèi)部的程序存儲(chǔ)空間。
而 NAND FLASH 一般應(yīng)用在大數(shù)據(jù)量存儲(chǔ)的場(chǎng)合,包括SD 卡、U 盤以及固態(tài)硬盤等,都是 NAND FLASH 類型的。
總結(jié)一句話:NOR FLASH貴而精,NAND FLASH大而便宜
所以我們的SD卡用 NAND FLASH 作為存儲(chǔ)單元
存儲(chǔ)單元是存儲(chǔ)數(shù)據(jù)部件,存儲(chǔ)單元通過存儲(chǔ)單元接口與卡控制
單元進(jìn)行數(shù)據(jù)傳輸
三.SDIO總線拓?fù)?/h2>
總線上的通信是通過傳送命令和數(shù)據(jù)實(shí)現(xiàn)。
在SD卡總線上的基本操作是命令/響應(yīng)結(jié)構(gòu)(主機(jī)發(fā)送命令給SD卡,SD卡是否進(jìn)行響應(yīng),主機(jī)發(fā)生命令和SD卡響應(yīng)都是通過命令線(CMD)傳輸?shù)?有一個(gè)響應(yīng)例外等下說)),這樣的總線操作在命令或總線機(jī)制下實(shí)現(xiàn)信息交換。
在SD/SDIO存儲(chǔ)器卡上傳送的數(shù)據(jù)是以數(shù)據(jù)塊的形式傳輸;在MMC上傳送的數(shù)據(jù)是以數(shù)據(jù)塊或數(shù)據(jù)流的形式傳輸;
SD 卡總線有一個(gè)主機(jī),多個(gè)SD卡,時(shí)鐘線(CLK),電源(VDD)和地信號(hào)(VSS)是所以卡共用。命令線(CMD)和數(shù)據(jù)線(DAT0-3)信號(hào)是根據(jù)每張卡的。
理論上主機(jī)可以與多張卡進(jìn)行數(shù)據(jù)交互,雖然可以共用總線,但不推薦多卡槽共用總線信號(hào),要求一個(gè)單獨(dú) SD 總線應(yīng)該連接一個(gè)單獨(dú)的 SD 卡。
即STM32只能接一張SD卡
SDIO 不管是從主機(jī)控制器向 SD 卡傳輸,還是 SD 卡向主機(jī)控制器傳輸都只以 CLK 時(shí)鐘線的上升沿為有效。SD 卡操作過程會(huì)使用兩種不同頻率的時(shí)鐘同步數(shù)據(jù):
識(shí)別卡階段:時(shí)鐘頻率 FOD,最高為 400kHz
數(shù)據(jù)傳輸模式:時(shí)鐘頻率FPP,默認(rèn)最高為 25MHz
如果通過相關(guān)寄存器配置使 SDIO 工作在高速模式,此時(shí)數(shù)據(jù)
傳輸模式最高頻率為 50MHz
為什么卡識(shí)別階段的頻率低?
卡識(shí)別的時(shí)候?yàn)榱思嫒葑R(shí)別不同版本的SD卡
SD 總線通信是基于命令和數(shù)據(jù)傳輸?shù)?。通訊由一個(gè)起始位(“0”),由一個(gè)停止位(“1”)終止,SD 通信一般是主機(jī)發(fā)送一個(gè)命令(Command),從設(shè)備在接收到命令后作出響應(yīng)(Response),如有需要會(huì)有數(shù)據(jù)(Data)傳輸參與。
SD 數(shù)據(jù)是以塊形式傳輸?shù)?,SDHC 卡數(shù)據(jù)塊長度一般為 512 字節(jié),數(shù)據(jù)可以從主機(jī)到卡,也可以是從卡到主機(jī)。數(shù)據(jù)塊需要 CRC 位來校驗(yàn)數(shù)據(jù)。CRC 位由 SD卡系統(tǒng)硬件生成。STM32 控制器可以控制使用單線或 4 線傳輸(D0-D3)。
SD 數(shù)據(jù)傳輸支持單塊和多塊讀寫,它們分別對(duì)應(yīng)不同的操作命令,多塊寫入還需要使用命令來停止整個(gè)寫入操作。數(shù)據(jù)寫入前需要檢測(cè) SD 卡忙狀態(tài),因?yàn)?SD 卡在接收到數(shù)據(jù)后存儲(chǔ)到存儲(chǔ)區(qū)(NandFlash)過程需要一定操作時(shí)間。SD 卡忙狀態(tài)通過把 D0 線拉低表示。
數(shù)據(jù)傳輸:
使用 4 數(shù)據(jù)線(D0~D3)傳輸時(shí),每次傳輸 4bit 數(shù)據(jù),每根數(shù)據(jù)線都必須有起始位、終止位以及CRC 位,CRC 位每根數(shù)據(jù)線都要分別檢查,并把檢查結(jié)果匯總?cè)缓笤跀?shù)據(jù)傳輸完后通過D0 線反饋給主機(jī)。
SD 卡有兩種數(shù)據(jù)包格式。
1.常規(guī)數(shù)據(jù)(8bit 寬):常規(guī)數(shù)據(jù)發(fā)送是先低字節(jié),再高字節(jié)的順序,但是每個(gè)字節(jié)則是先高位后低位
數(shù)據(jù)位在四線順序排列發(fā)送,DAT3 數(shù)據(jù)線發(fā)較高位,DAT0 數(shù)據(jù)線發(fā)較低位。
2.寬位數(shù)據(jù)(SD 存儲(chǔ)寄存器):寬位數(shù)據(jù)從高位開始傳輸。
對(duì) SD 卡而言寬位數(shù)據(jù)包發(fā)送方式是針對(duì) SD 卡 SSR(SD 狀態(tài))寄存器內(nèi)容發(fā)送的,SSR 寄存器總共有 512bit,在主機(jī)發(fā)出ACMD13 命令后(當(dāng)然在發(fā)送ACMD13 之前需要發(fā)送CMD55 ) SD 卡將 SSR 寄存器內(nèi)容通過數(shù)據(jù)線發(fā)送給主機(jī)。
【本文轉(zhuǎn)載自CSDN,作者:rivencode】
-
芯片
+關(guān)注
關(guān)注
455文章
50714瀏覽量
423136 -
貼片
+關(guān)注
關(guān)注
10文章
873瀏覽量
36925 -
SDIO接口
+關(guān)注
關(guān)注
0文章
8瀏覽量
2287
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論