天天看點

SD NAND 的 SDIO在STM32上的應用詳解(上篇)

目錄

上篇:

一.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指令集的筆記本電腦 硬碟接口

SD NAND 的 SDIO在STM32上的應用詳解(上篇)

結論:MMC卡是SD卡的前身,也就是說SD将取代MMC卡的地位,MMC卡也用的越來越少,是以我們後面隻講SD卡.

SDIO的主要功能:

(關于不是SD卡的就不介紹了)

1.與SD存儲卡規格版本2.0全相容(向前相容)

2.資料和指令輸出使能信号,用于控制外部雙向驅動器。

SDIO外設挂載在STM32的AHB總線。

SD NAND 的 SDIO在STM32上的應用詳解(上篇)

這樣一來,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的差別。

SD NAND 的 SDIO在STM32上的應用詳解(上篇)
SD NAND 的 SDIO在STM32上的應用詳解(上篇)
SD NAND 的 SDIO在STM32上的應用詳解(上篇)

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 NAND 的 SDIO在STM32上的應用詳解(上篇)

電源檢測單元保證 SD 卡工作在合适的電壓下,如出現掉電或上狀态時,它會使控制單元和存儲單元接口複位;

1.SD卡/SD NAND引腳

1)SD卡引腳

SD NAND 的 SDIO在STM32上的應用詳解(上篇)
SD NAND 的 SDIO在STM32上的應用詳解(上篇)

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 卡的控制以及讀寫操作。

SD NAND 的 SDIO在STM32上的應用詳解(上篇)

1.CID 寄存器(重點了解)

卡識别(CID)寄存器是一個 128 位的寄存器。包含了卡的識别資訊,用于卡識别解析(具有唯一性)。每個讀/寫卡都有一個特殊的識别号。CID 寄存器的結構如下:

SD NAND 的 SDIO在STM32上的應用詳解(上篇)

2.RCA 寄存器(重點了解)

可寫的 16 位SD卡相對位址寄存器,在SD卡的初始化期間,由SD卡向外釋出的卡位址。這個位址用于卡初始化程序之後,主機同卡之間的互動尋址。(在主機向SD卡讀寫資料時,就是發送CMD7選擇/取消選擇 RCA 位址卡,就是靠RCA來确定主機與哪張卡通信)

為啥不用上面的CID呢 ?

答:因為它太長了128位呢,僅此而已

3.CSD 寄存器(2.0)

CSD V2.0 隻适用于高容量

SD NAND 的 SDIO在STM32上的應用詳解(上篇)

4.SCR 寄存器

作為 CSD 寄存器的補充,另一個配置寄存器稱為 SD 卡配置寄存器(SCR)。SCR 提供了 SD 卡的特殊功能的資訊。SCR 是一個 64bit 的寄存器,這個寄存器應該由 SD 廠家設定。

SD NAND 的 SDIO在STM32上的應用詳解(上篇)

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

SD NAND 的 SDIO在STM32上的應用詳解(上篇)

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 NAND 的 SDIO在STM32上的應用詳解(上篇)

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 NAND 的 SDIO在STM32上的應用詳解(上篇)

SD 資料是以塊形式傳輸的,SDHC 卡資料塊長度一般為 512 位元組,資料可以從主機到卡,也可以是從卡到主機。資料塊需要 CRC 位來校驗資料。CRC 位由 SD卡系統硬體生成。STM32 控制器可以控制使用單線或 4 線傳輸(D0-D3)。

SD NAND 的 SDIO在STM32上的應用詳解(上篇)
SD NAND 的 SDIO在STM32上的應用詳解(上篇)

SD 資料傳輸支援單塊和多塊讀寫,它們分别對應不同的操作指令,多塊寫入還需要使用指令來停止整個寫入操作。資料寫入前需要檢測 SD 卡忙狀态,因為 SD 卡在接收到資料後存儲到存儲區(NandFlash)過程需要一定操作時間。SD 卡忙狀态通過把 D0 線拉低表示。

資料傳輸:

使用 4 資料線(D0~D3)傳輸時,每次傳輸 4bit 資料,每根資料線都必須有起始位、終止位以及CRC 位,CRC 位每根資料線都要分别檢查,并把檢查結果彙總然後在資料傳輸完後通過D0 線回報給主機。

SD 卡有兩種資料包格式。

1.正常資料(8bit 寬):正常資料發送是先低位元組,再高位元組的順序,但是每個位元組則是先高位後低位

SD NAND 的 SDIO在STM32上的應用詳解(上篇)

資料位在四線順序排列發送,DAT3 資料線發較高位,DAT0 資料線發較低位。

2.寬位資料(SD 存儲寄存器):寬位資料從高位開始傳輸。

對 SD 卡而言寬位資料包發送方式是針對 SD 卡 SSR(SD 狀态)寄存器内容發送的,SSR 寄存器總共有 512bit,在主機發出ACMD13 指令後(當然在發送ACMD13 之前需要發送CMD55 ) SD 卡将 SSR 寄存器内容通過資料線發送給主機。

【本文轉載自CSDN,作者:rivencode】

全文目錄内容分為三篇【上/中/下】原文連結跳轉如下:

SD NAND 的 SDIO在STM32上的應用詳解(上篇): http://www.longsto.com/news/58.html

SD NAND 的 SDIO在STM32上的應用詳解(中篇): http://www.longsto.com/news/59.html

SD NAND 的 SDIO在STM32上的應用詳解(下篇): http://www.longsto.com/news/60.html