藏得很深!三分鐘掃盲SD卡
本文轉(zhuǎn)載自微信公眾號(hào)「小麥大叔」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系小麥大叔公眾號(hào)。
SD
SD卡(secure digital card)是SD卡協(xié)會(huì)開(kāi)發(fā)的低成本,非易失性存儲(chǔ)卡格式(相比較于RAM,SD卡掉電數(shù)據(jù)不丟失);
隨著本世紀(jì)電子技術(shù)的高速發(fā)展,對(duì)于這種中等型號(hào),節(jié)能、節(jié)省空間的存儲(chǔ)器設(shè)備的需求一直在快速增長(zhǎng);
sd卡
SD卡具有SDHC的速度等級(jí),范圍;2級(jí)(以2 MB / s的速度運(yùn)行);4級(jí)(以4MB / s的速度運(yùn)行);6級(jí)(以最高6 MB / s的速度運(yùn)行);10級(jí)(以最高的速度運(yùn)行) 10 MB /秒;
SDXC卡以超高速運(yùn)行,并以最高30 Mb/s的速度運(yùn)行;還有視頻速度等級(jí),數(shù)據(jù)傳輸速率高達(dá)90MB/s。
SD卡速度級(jí)別
SD卡還具有不同的尺寸或形狀因子,包括standard SD卡, mini SD卡 and micro SD卡;
卡尺寸分類(lèi)
SD卡可以是通常具有高達(dá)4 GB的存儲(chǔ)容量的標(biāo)準(zhǔn)SD卡,也可以是高達(dá)64 GB的高容量卡(SDHC)以及達(dá)到TB級(jí)的擴(kuò)展容量(SDXC)。
卡容量
接口
SD卡可以在SD總線(xiàn)模式或SPI總線(xiàn)模式下運(yùn)行,通常可以使用SDIO總線(xiàn)或者SPI對(duì)SD進(jìn)行驅(qū)動(dòng);
下面主要以micro SD為例,就SDIO模式和SPI模式做簡(jiǎn)單做一下介紹;
microSD引腳輸出,SD模式
引腳 | 引腳名稱(chēng) | 信號(hào)功能 |
---|---|---|
1 | DAT2 | 數(shù)據(jù)位2 |
2 | CD / DAT3 | 卡檢測(cè)/數(shù)據(jù)位3 |
3 | CMD | 命令行 |
4 | Vdd | 電源電壓2.7v / 3.6v |
5 | Clk | 時(shí)鐘 |
6 | VS | 地 |
7 | DAT0 | 數(shù)據(jù)位0 |
8 | DAT1 | 數(shù)據(jù)位1 |
microSD引腳輸出,SPI模式
引腳 | 引腳名稱(chēng) | 信號(hào)功能 |
---|---|---|
1 | NC | 沒(méi)有連接 |
2 | /CS | 片選 |
3 | DI | 主輸出/從屬(MOSI) |
4 | Vdd | 電源電壓2.7v / 3.6v |
5 | Clk | 時(shí)鐘 |
6 | Vss | 地 |
7 | DO | 主進(jìn)/從出(MISO) |
8 | RSV | 已預(yù)留 |
micro SD的引腳發(fā)布如下圖所示;
協(xié)議
SD協(xié)議中,由于命令數(shù)據(jù)線(xiàn)和數(shù)據(jù)線(xiàn)是分開(kāi)的,因此我們需要關(guān)注,命令的傳輸格式,以及數(shù)據(jù)的傳輸格式;
命令傳輸
命令以48位數(shù)據(jù)包的形式通過(guò)雙向CMD引腳進(jìn)行傳輸。
這些命令包包括命令索引,變量和CRC位。該命令始終通過(guò)主機(jī)發(fā)送,最終由SD卡接收。
回傳的響應(yīng)數(shù)據(jù)包也為48位。
整體命令如下圖所示;
48位的命令格式
每個(gè)命令的恒定長(zhǎng)度為6個(gè)字節(jié)。第一個(gè)字節(jié)是命令編號(hào)和數(shù)字64的 加法。例如:對(duì)于CMD0:命令編號(hào)0 + 64 = 64 = 0x40(十六進(jìn)制)。
對(duì)于CMD1:十六進(jìn)制命令號(hào)1 + 64 = 65 = 0x41。
隨后是一組四個(gè)字節(jié),稱(chēng)為參數(shù)。
這些參數(shù)通常包含數(shù)據(jù)的地址或塊的長(zhǎng)度。
最后一個(gè)字節(jié)是CRC(循環(huán)冗余校驗(yàn))字節(jié)。
如果未啟用CRC功能,則大多數(shù)SPI模式下的命令都不需要校驗(yàn)字節(jié)。
對(duì)于某些命令,例如CMD0,CRC為0x95,在大多數(shù)情況下,發(fā)送的是0xFF。
啟用CRC要求您從微控制器發(fā)送正確的校驗(yàn)字節(jié)。因此,請(qǐng)確保啟用或禁用了CRC功能。
發(fā)送命令的格式如下所示;
幀格式
R1響應(yīng)0x01表示在響應(yīng)之前發(fā)送的命令已導(dǎo)致卡進(jìn)入空閑狀態(tài)。響應(yīng)字節(jié)0x00表示命令已被接受,SD卡將等待后續(xù)的事件發(fā)生。如果設(shè)置了R1響應(yīng)中的任何其他位,則是錯(cuò)誤的結(jié)果,并且將降低到圖中每個(gè)R1響應(yīng)位中提到的因數(shù)。
不同類(lèi)型的響應(yīng)及其含義如下所示;
響應(yīng)
數(shù)據(jù)傳輸
在數(shù)據(jù)傳輸期間,傳輸?shù)幕締挝环Q(chēng)為塊,通常為512字節(jié),并通過(guò)所有4個(gè)數(shù)據(jù)引腳進(jìn)行傳輸。同樣,在每次塊傳輸之后,將發(fā)送16位CRC數(shù)據(jù)。
請(qǐng)注意,SD卡在狀態(tài)下運(yùn)行。每個(gè)狀態(tài)都有不同的命令集,主機(jī)可以通過(guò)控件更改狀態(tài)。
命令和數(shù)據(jù)信號(hào)通過(guò)時(shí)鐘信號(hào)同步。最初,主機(jī)使用400KHz時(shí)鐘與卡進(jìn)行通信,但最終它會(huì)在傳輸過(guò)程中最大提高時(shí)鐘速度,效率。
因?yàn)樵诔跏蓟?,主機(jī)不知道它是SD卡還是MMC卡。
默認(rèn)情況下,MMC卡在初始化期間默認(rèn)工作在漏極開(kāi)路模式(100-400KHz),而SD卡工作在推挽模式(0-25Mhz)。
因此,最初,主機(jī)使用400KHz來(lái)保持與漏極開(kāi)路和推挽模式的兼容性。
硬件設(shè)計(jì)
SDIO
這是從SD/MMC外設(shè)到SD卡插槽的4 Bit連接的示例。
使用Data[3..0],CLK和CMD信號(hào)。
SD卡插槽暴露在外部環(huán)境中。即使未與任何其他設(shè)備連接,它也可能會(huì)受到人體中積累的靜電電荷的影響,而當(dāng)手指觸摸該靜電時(shí),靜電會(huì)釋放到屏蔽中。
為了符合EMC規(guī)范,必須進(jìn)行一些常規(guī)預(yù)防措施,以過(guò)濾和避免傳導(dǎo)輻射。此外,SD卡規(guī)范還規(guī)定了上拉電阻和串聯(lián)阻抗匹配電阻。
幸運(yùn)的是,當(dāng)SD在移動(dòng)設(shè)備中如此普遍地傳播時(shí),已經(jīng)有集成方案,它可以一次實(shí)現(xiàn)所有這些功能。
CM1624是EMI濾波器和線(xiàn)路終端設(shè)備的組合,帶有集成的TVS二極管,可用于T-Flash / MicroSD接口。
SPI
下面在SPI模式下使用的SD卡的示例,根據(jù)SD Association的規(guī)范連接了MISO,MOSI,CLK和CS信號(hào)。
我們只需要在時(shí)鐘線(xiàn)上應(yīng)用濾波器以在非常惡劣的環(huán)境中改善EMC。
在SDIO模式或者SPI模式下,磁道都以高數(shù)據(jù)速率傳輸數(shù)據(jù)和時(shí)鐘信號(hào)。
為了避免信號(hào)出現(xiàn)毛刺,必須考慮信號(hào)傳播時(shí)間,以確保所有數(shù)據(jù)在時(shí)鐘觸發(fā)讀取或?qū)懭氲牟僮髦?,接口處穩(wěn)定。
所有數(shù)據(jù)信號(hào)的路徑長(zhǎng)度必須在十分之幾毫米的長(zhǎng)度內(nèi)匹配,并且時(shí)鐘長(zhǎng)度必須長(zhǎng)約1毫米。
為避免串?dāng)_,這些走線(xiàn)必須在其周?chē)拖路奖3至己玫慕拥仄矫?,并且還應(yīng)通過(guò)足夠數(shù)量的通孔連接各層。
總結(jié)
本文簡(jiǎn)單介紹了SD卡的分類(lèi)以及常見(jiàn)屬性,另外還簡(jiǎn)單介紹了SD卡的協(xié)議,在硬件設(shè)計(jì)上給出了SPI總線(xiàn)和SDIO總線(xiàn)的示例電路,篇幅有限,軟件部分暫時(shí)沒(méi)有進(jìn)行展開(kāi)介紹;
由于作者能力和水平有限,文中難免存在錯(cuò)誤和紕漏,請(qǐng)不吝賜教。
參考《Secure Digital Input/Output (SDIO) Card Specification》