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