1. 程式人生 > >⑳tiny4412 Linux驅動開發之MMC子系統驅動程式

⑳tiny4412 Linux驅動開發之MMC子系統驅動程式

本次我們來說一下SDIO子系統的控制器的開發部分,這部分也是和硬體平臺相關的,在說這個之前,我們先來了解一下相關硬體的基礎知識和概念.

MMC MMC全稱MultiMedia Card,由西門子公司和SanDisk公司1997年推出的多媒體記憶卡標準。MMC卡尺寸為32mm x24mm x 1.4mm,它將存貯單元和控制器一同做到了卡上,智慧的控制器使得MMC保證相容性和靈活性。MMC卡具有MMC和SPI兩種工作模式,MMC模式是預設工作模式,具有MMC的全部特性。而SPI模式則是MMC協議的一個子集,主要用於低速系統。

SD SD卡全稱Secure DigitalMemory Card,由松下、東芝和SanDisk公司於1999年8月共同開發的新一代記憶卡標準,已完全相容MMC標準。SD卡比MMC卡多了一個進行資料著作權保護的暗號認證功能,讀寫速度比MMC卡快4倍。SD卡尺寸為32mm x 24mm x2.1mm,長寬和MMC卡一樣,只是比MMC卡厚了0.7mm,以容納更大容量的存貯單元。SD卡與MMC卡保持向上相容,也就是說,MMC卡可以被新的設有SD卡插槽的裝置存取,但是SD卡卻不可以被設有MMC插槽的裝置存取。

SDIO SDIO全稱Secure DigitalInput and Output Card,SDIO是在SD標準上定義了一種外設介面,它使用SD的I/O介面來連線外圍裝置,並通過SD上的I/O資料介面與這些外圍裝置傳輸資料。現在已經有很多手持裝置支援SDIO功能,而且許多SDIO外設也被開發出來,目前常見的SDIO外設有:WIFI Card、GPS Card、Bluetooth Card等等。

eMMC eMMC全稱Embedded MultiMediaCard,是MMC協會所制定的內嵌式儲存器標準規格,主要應用於智慧手機和移動嵌入式產品等。eMMC是一種嵌入式非易失性儲存系統,由快閃記憶體和快閃記憶體控制器兩部分組成,它的一個明顯優勢是在封裝中集成了一個快閃記憶體控制器,它採用JEDEC標準BGA封裝,並採用統一快閃記憶體介面管理快閃記憶體。eMMC結構由一個嵌入式儲存解決方案組成,帶有MMC介面、快快閃記憶體儲裝置及主控制器,所有這些由一個小型BGA封裝。由於採用標準封裝,eMMC也很容易升級,並不用改變硬體結構。eMMC的這種將Nand Flash晶片和控制晶片封裝在一起的設計概念,就是為了簡化產品記憶體儲器的使用,客戶只需要採購eMMC晶片放進產品中,不需要處理其它複雜的Nand Flash相容性和管理問題,減少研發成本和研發週期。

本次是以SD卡拔插做為實驗物件,所以,這裡詳細講一下SDIO和SD卡的基礎.SDIO是一種應用很廣泛的介面,下面給出一張圖清晰地表明瞭這一點:

SD卡物理結構

一張SD卡包括有儲存單元、儲存單元介面、電源檢測、卡及介面控制器和介面驅動器5個部分,儲存單元是儲存資料部件,儲存單元通過儲存單元介面與卡控制單元進行資料傳輸:電源檢測單元保證SD卡工作在合適的電壓下,如出現掉電或上狀態時,它會使控制單元和儲存單元介面復位:卡及介面控制單元控制SD卡的執行狀態,它包括有8個暫存器;介面驅動器控制SD卡引腳的輸入輸出。

SD卡總共有8個暫存器,用於設定或表示SD卡資訊,參考下表,這些暫存器只能通過對應的命令訪問,對SD卡進行控制操作並不是像操作控制器GPIO相關暫存器那樣一次讀寫一個暫存器的,它是通過命令來控制,SDIO定義了64個命令,每個命令都有特殊意義,可以實現某一特定功能,SD卡接收到命令後,根據命令要求對SD卡內部暫存器進行修改,程式控制中只需要傳送組合命令就可以實現SD卡的控制以及讀寫操作。

名稱 bit寬度 描述
CID 128 卡識別號(Card identification number):用來識別的卡的個體號碼(唯一的)
RCA 16 相對地址(Relative card address):卡的本地系統地址,初始化時,動態地由卡建議,主機核准。
DSR 16 驅動級暫存器(Driver Stage Register):配置卡的輸出驅動
CSD 128 卡的特定資料(Card Specific Data):卡的操作條件資訊
SCR 64 SD配置暫存器(SD Configuration Register):SD卡特殊特性資訊
OCR 32 操作條件暫存器(Operation conditions register)
SSR 512 SD狀態(SD Status):SD卡專有特徵的資訊
CSR 32 卡狀態(Card Status):卡狀態資訊

SDIO匯流排

1).匯流排拓撲

SD卡一般都支援SDIO和SPI這兩種介面,共3種模式,分別是4bit模式,1bit模式和SPI模式,SD卡匯流排拓撲參考下圖。雖然可以共用匯流排,但不推薦多卡槽共用匯流排訊號,要求一個單獨SD匯流排應該連線一個單獨的SD卡。

SD卡使用9-pin介面通訊,其中3根電源線、1根時鐘線、1根命令線和4根資料線,具體說明如下:

●CLK:時鐘線,由SDIO主機產生;   ●CMD:命令控制線,SDIO主機通過該線傳送命令控制SD卡,如果命令要求SD卡提供應答(響應),SD卡也是通過該線傳輸應答資訊; ●D0-3:資料線,傳輸讀寫資料:SD卡可將D0拉低表示忙狀態;  ●VDD、VSS1、VSS2:電源和地訊號。

SDIO不管是從主機控制器向SD卡傳輸,還是SD卡向主機控制器傳輸都只以CLK時鐘線的上升沿為有效。SD卡操作過程會使用兩種不同頻率的時鐘同步資料,一個是識別卡階段時鐘頻率FOD,最高為400kHz,另外一個是資料傳輸模式下時鐘頻率FPP,這個頻率按MHz來計算,可以通過配置暫存器的方式修改.

2).匯流排協議

SD匯流排通訊是基於命令和資料傳輸的。通訊由一個起始位(“0”),由一個停止位(“1”)終止。SD通訊一般是主機發送一個命令(Command),從裝置在接收到命令後作出響應(Response),如有需要會有資料(Data)傳輸參與.SD匯流排的基本互動是命令與響應互動.

SD資料是以塊(Black)形式傳輸的,SDHC卡資料塊長度一般為512位元組,資料可以從主機到卡,也可以是從卡到主機。資料塊需要CRC位來保證資料傳輸成功。CRC位由SD卡系統硬體生成。HOST控制器可以控制使用單線或4線傳輸,本開發板設計使用4線傳輸下圖為主機向SD卡寫入資料塊操作示意:

SD資料傳輸支援單塊和多塊讀寫,它們分別對應不同的操作命令,多塊寫入還需要使用命令來停止整個寫入操作。資料寫入前需要檢測SD卡忙狀態,因為SD卡在接收到資料後程式設計到儲存區過程需要一定操作時間。SD卡忙狀態通過把D0線拉低表示。資料塊讀操作與之類似,只是無需忙狀態檢測.使用4資料線傳輸時,每次傳輸4bit資料,每根資料線都必須有起始位、終止位以及CRC位,CRC位每根資料線都要分別檢查,並把檢查結果彙總然後在資料傳輸完後通過D0線反饋給主機.SD卡資料包有兩種格式,一種是常規資料(8bit寬),它先發低位元組再發高位元組,而每個位元組則是先發高位再發低位,4線傳輸示意如下圖.

4線同步傳送,每根線傳送一個位元組的其中兩個位,資料位在四線順序排列傳送,DAT3資料線發較高位,DAT0資料線發較低位。另外一種資料包傳送格式是寬位資料包格式,對SD 卡而言寬位資料包傳送方式是針對SD卡SSR(SD狀態)暫存器內容傳送的,SSR暫存器總共有512bit,在主機發出ACMD13命令後SD卡將SSR暫存器內容通過DAT線傳送給主機。寬位資料包格式見下圖:

3).命令

SD命令由主機發出,以廣播命令和定址命令為例,廣播命令是針對與SD主機匯流排連線的所有從裝置傳送的,定址命令是指定某個地址裝置進行命令傳輸。

3.1 命令格式

SD命令格式固定為48bit,都是通過CMD線連續傳輸的(資料線不參與),見下圖:

SD 命令的組成如下: ●起始位和終止位:命令的主體包含在起始位與終止位之間,它們都只包含一個數據位,起始位為0,終止位為1。 ●傳輸標誌:用於區分傳輸方向,該位為1時表示命令,方向為主機傳輸到SD卡,該位為0時表示響應,方向為SD卡傳輸到主機。 命令主體內容包括命令、地址資訊/引數和CRC 校驗三個部分。 ●命令號:它固定佔用6bit,所以總共有64個命令(代號CMD0~CMD63),每個命令都有特定的用途,部分命令不適用於SD卡操作,只是專門用於MMC卡或者SD I/O卡。 ●地址/引數:每個命令有32bit地址資訊/引數用於命令附加內容,例如,廣播命令沒有地址資訊,這32bit用於指定引數,而定址命令這32bit用於指定目標SD卡的地址。 ●CRC7校驗:長度為7bit的校驗位用於驗證命令傳輸內容正確性,如果發生外部干擾導致傳輸資料個別位狀態改變將導致校準失敗,也意味著命令傳輸失敗,SD卡不執行命令。

3.2 命令型別

SD命令有4種類型:   ●無響應廣播命令(bc),傳送到所有卡,不返回任務響應; ●帶響應廣播命令(bcr),傳送到所有卡,同時接收來自所有卡響應; ●定址命令(ac),傳送到選定卡,DAT線無資料傳輸; ●定址資料傳輸命令(adtc),傳送到選定卡,DAT線有資料傳輸。

另外,SD卡主機模組系統旨在為各種應用程式型別提供一個標準介面。在此環境中,需要有特定的客戶/應用程式功能。為實現這些功能,在標準中定義了兩種型別的通用命令:特定應用命令(ACMD)和常規命令(GEN_CMD)。要使用SD卡製造商特定的ACMD命令如ACMD6,需要在傳送該命令之前無傳送CMD55命令,告知SD卡接下來的命令為特定應用命令。CMD55命令只對緊接的第一個命令有效,SD卡如果檢測到CMD55之後的第一條命令為ACMD則執行其特定應用功能,如果檢測發現不是ACMD命令,則執行標準命令。

3.3 命令描述

SD卡系統的命令被分為多個類,每個類支援一種“卡的功能設定”。下表列舉了SD卡部分命令資訊,更多詳細資訊可以參考SD簡易規格檔案說明,表中填充位和保留位都必須被設定為0.雖然沒有必須完全記住每個命令詳細資訊,但越熟悉命令對後面程式設計理解非常有幫助。