上一回【Maker電子學】記憶體的原理與應用—PART18,我們介紹了 SD 卡的容量分級以及速度分級標準,並說明了達到不同傳輸速度所使用的技術,包含早期的單端邏輯訊號到較新的差動訊號等技術。這一回我們要開始從軟體的觀點,來看看如何存取 SD 卡或 eMMC。
卡片的電源
在進入軟體的存取協定之前,我們還是要先來看幾個基本的硬體參數,其中最重要的就是電源。
早期的 SD 卡全部運作在 3.3 V(嚴格來說是 2.7 V 到 3.6 V)的電源及介面電壓,而在 SD 3.0 標準出來後,為了降低 EMI 及耗電,較新的 UHS-I 模式都使用 1.8 V(嚴格來說是 1.70 V 到 1.95 V)的介面電壓。由於較新的卡片支援不同的電壓,為了保證系統的相容性,讓舊的裝置可以使用新的卡片、新的裝置也可以使用舊的卡片,SD 卡在初始化的過程中有一個蠻複雜的辨認過程。
首先,為了保證系統的相容性,所有的 SD 卡在一開始工作時,都使用 3.3 V 供電,並使用 3.3 V 完成初始化以及一些卡片辨認的過程,包括卡片支援哪些速度、模式、電壓等。如果卡片支援較新的 1.8 V 低電壓模式,系統可以送出一個「切換電壓」的指令 CMD11,並與卡片同步將電壓從 3.3 V 切換到 1.8 V 的模式,一旦卡片切到 1.8 V 的工作模式,就只能停留在 1.8 V 的模式,直到斷電 reset 重來。
這裡有件事要特別注意的是,當卡片進入 1.8 V 模式時,只有卡片的 I/O 介面電壓(signaling voltage)變成 1.8 V,供應給卡片的電源始終維持 3.3 V 不會改變。
卡片的工作模式
我們之前說過,SD卡從MMC演變過來時,保留了最早最古老的SPI模式,而SD協會也很佛心的在規格中要求所有的卡片都要向前相容到上古時代,直到SDUC出現後,SD協會才在規格中放寬,讓SDUC不用支援SPI模式。
為了SD標準的尊嚴,所有的SD卡在開機時都是處在SD bus模式,如果要將卡片設定成SPI模式,需要將 CS 接腳拉 low,同時送一次CMD0去 reset 卡片,這時卡片就會進入SPI模式。
在 SD 模式下,傳資料的 DAT0-3 都是雙向的,但 SPI 介面的每一隻腳都是固定方向的,我們有辦法用 SPI 介面傳送 CMD0 給 SD 卡的任務嗎?來看看 SD 模式與 SPI 模式的腳位對應就知道了:
(圖片來源:Bird 提供)
SPI 模式的 MOSI 訊號剛好對應到送指令給 SD 卡的 CMD 接腳,因此我們可以用 SPI 的 MOSI 發送 CMD0 指令給 SD 卡,而 SD 卡收到指令後,會用 DAT0 訊號回應對指令的反應,這個訊號剛好接到 SPI 的 MISO,因此我們可以透過 MISO 讀取 SD 卡對 CMD0 指令的回答,來知道指令有沒有發送成功。當然,SD 模式的 clock 接腳也是 SPI 模式的 clock 接腳,所以在兩個模式下都使用這個 clock 訊號來取樣指令或資料訊號。
送指令
SPI 模式的資料傳輸都是以 byte 為單位,而 SD 模式下的指令,又叫做 token,則是 48-bit,因此我們可以用 6 個 SPI 的 byte 傳輸來完成一次 CMD0 的發送。
SD 模式下的指令格式是這樣:
只需不到短短一分鐘...
輸入您的信箱與ID註冊即可享有一切福利!
會員福利
免費電子報
會員搶先看
主題訂閱
好文收藏