基于STM32 DIO接口驅動(dòng)SD卡的設計(上)
引言
隨著(zhù)鐵路貨運速度的提高,時(shí)速160km/h的快速貨車(chē)運 行安全智能監測系統已成為研究的重要課題。由于貨車(chē)具有 運行周期長(cháng)的特點(diǎn),監測系統采集到的各種實(shí)時(shí)的數據, 包括防滑控制、軸溫預警、列車(chē)定位、轉向架失穩等信息, 需要大量的存儲空間。主控制器采集到這些數據后,需要通 過(guò)存儲卡將數據保存下來(lái),然后通過(guò)GPRS無(wú)線(xiàn)模塊讀取卡 數據信息發(fā)送到通用計算機上,以作進(jìn)一步的分析和處理。 目前常用的存儲器有 U 盤(pán)、FLASH 芯片、SD 卡等。SD卡是 一種容量大(最大可達32GB)、性?xún)r(jià)比高、體積小、訪(fǎng)問(wèn) 接口簡(jiǎn)單、易于集成的存儲卡,采用SD卡可解決上述采集 數據的存儲和傳輸問(wèn)題;采用ARM Cortex ?-M3內核的32位 微控制器STM32F103作為主控制器,STM32F103 自帶標準 的SD卡接口,使用其自帶的SDIO接口驅動(dòng),在4位SD模式 下,最高通信速度可達 24MHz,最高每秒可傳輸12M字節數 據,可快速地實(shí)現對SD卡的訪(fǎng)問(wèn)。
1 硬件功能原理與設計
1.1 SD卡簡(jiǎn)介
S D 卡 ( S e c u r e D i g i t a l Memor y Card) 是一種基于半 導體閃存工藝的存儲卡,它的 外形和接口如圖1 所示。 S D 卡 有 9 個(gè) 引 腳 與 外 部 通 信 , 支 持 SPI和SDIO兩種模式, 不同模 式下,SD卡引腳功能描述如表1所示。在具體的通信過(guò)程中,主機只能選擇一種通信模式。
圖1 SD卡的外形和接口
主控制器STM32F103可支持SDIO模式,在該模式下,CS為主控制器向SD卡發(fā)送的片選信號,CMD為主控制器向SD卡 發(fā)送的命令/響應信號,CLK為主控制器向SD卡發(fā)送的時(shí)鐘 信號,DAT0、DAT1和DAT2分別為SD卡的3個(gè)數據線(xiàn)。
SD卡的內部結構如圖2所示,SD卡內部不僅有大量的 存儲單元,還具有卡接口控制器、寄存器以及SDIO和SPI兩 種模式的對外接口等。外部主控制器并不直接訪(fǎng)問(wèn)卡內存儲 單元,而是通過(guò)卡的接口控制器與存儲器單元接口相連來(lái)訪(fǎng) 問(wèn)卡的外部信號線(xiàn)??▋却鎯卧淖x、寫(xiě)、擦除等操作由 卡接口控制器根據主控器發(fā)出的命令自動(dòng)處理完成,而主控 制器無(wú)需知道卡內如何操作、管理存儲單元,這將大大降低 主控制器對存儲器操作的負擔。SD卡內部有6個(gè)寄存器,其 中四個(gè)信息寄存器用來(lái)設置和保存卡的關(guān)鍵信息,另外兩個(gè) 狀 態(tài) 寄 存 器 用 來(lái)配 置 和 操 作 卡 當 前的狀態(tài)。
1.2 SDIO接口
原理
S D I O( S e c u r e D i g i t a l I n p u t a n d O u t p u t ) , 即 安全 數 字 輸 入 輸 出接口。 它由SD存 儲 卡 的 規 范 發(fā) 展 而 來(lái) , 在 機 械 、 電 路 、 功 耗 、 信 號 與 軟 件 上 與 多
圖2 SD卡的內部結構
表1 SD卡在不同模式下的引腳定義
種存儲卡完全兼容,可支持多媒體卡(MMC卡)、SD存儲卡、SDIO卡;并且可擴展性較強,可以連接多種SDIO接口 設備,如藍牙、WIFI、GPRS、照相機等。SDIO與SD卡規范 的一個(gè)重要區別是增加了低速標準,以最小的硬件開(kāi)支支持 低速I(mǎi)/O數據傳輸能力。
STM32F1的 SDIO控制器包含2個(gè)部分:SDIO 適配器模 塊和 AHB 總線(xiàn)接口,其功能框圖如圖3所示。SDIO_D[7:0] 為SDIO數據總線(xiàn),如果一個(gè) SD卡接到了總線(xiàn)上,可以通過(guò) 主機配置數據傳輸方式使用SDIO_D0或SDIO_D[3:0],所有 的數據線(xiàn)都工作在推挽模式。復位后默認情況下,SDIO_ D 0 用 于 數 據 傳 輸 , 初 始 化 后 主 機 可 以 改 變 數 據 總 線(xiàn) 的 寬 度,采用4位總線(xiàn)SDIO_D[3:0]傳輸數據。
SDIO_CMD為命令/響應接口。SDIO的命令分為應用 相關(guān)命令(ACMD)和通用命令(CMD)兩部分,發(fā)送應 用相關(guān)命令之前必須先發(fā)送通用 命令。每發(fā)送一個(gè)命令, SD卡都會(huì )給出一個(gè)應答,以告知主機該命令的執行情況或 返回主機所需的數據,這個(gè)應答我們稱(chēng)之為響應,響應也在 SDIO_CMD線(xiàn)上串行傳輸。STM32F1的 SDIO 控制器支持 2 種響應類(lèi)型,即:短響應(48位)和長(cháng)響應(136位),這 兩種響應類(lèi)型都帶 CRC 錯誤檢測。
SDIO_CK為卡時(shí)鐘輸出接口。根據卡類(lèi)型的不同,可 能有好幾個(gè)區間,這就涉及到時(shí)鐘頻率的設置,SDIO_CK 與 SDIO適配器時(shí)鐘(SDIOCLK)的關(guān)系為:
SDIO_CK=SDIOCLK/(2+CLKDIV)
上式中,SDIOCLK 為SDIO掛接在A(yíng)HB總線(xiàn)上的接口時(shí) 鐘(對于STM32F1系列是72MHz);CLKDIV 則是時(shí)鐘分頻 系數,可以通過(guò)SDIO的 SDIO_CLKCR 寄存器進(jìn)行設置(要 確保SDIO_CK不超過(guò)卡的最大操作頻率)。
1.3 硬件連接
主 控 制 器 選 用 大 容 量 、 增 強 型 的 芯 片 STM32F103ZET6,其與SD卡座的電路連接圖如圖4所示。 SDIO_D0(PC8)、SDIO_D1(PC9)、SDIO_D2(PC10) 和SDIO_D3(PC11)這4個(gè)引腳接上拉電阻,通過(guò)3.3V的電
源給SD卡端提供灌電流,從而提高STM32F103ZET6芯片的
圖3 STM32F1的SDIO控制器功能框圖
圖4 STM32F103ZET6與SD卡座的電路連接圖 驅動(dòng)能力;
SDIO_CK(PC12)直接與卡的CLK端相連,用 于向SD卡發(fā)送時(shí)鐘信號。除了SDIO接口的連接外,還有兩根控制線(xiàn):SD_CD(PD5)用于檢測SD卡接口與卡座是否接好,若完全接好則該引腳為低電平,否則為高電平;SD_ WP(PD6)用于檢測SD卡當期是否設置寫(xiě)保護,寫(xiě)保護時(shí) 該引腳為高電平,否則為低電平。
2 軟件設計
軟件設計主要包括硬件層配置以及驅動(dòng)層配置。硬件 層配置主要包括配置SD I O 相關(guān)寄存器、 識別卡類(lèi)型、 獲 取卡信息,實(shí)現對SD卡的初始化;驅動(dòng)層配置主要是利用 SDIO接口驅動(dòng)SD卡進(jìn)行讀、寫(xiě)操作。利用ST官方提供的固 件庫函數可大大提高軟件設計的效率,STM32F1 的 SDIO 相 關(guān)操作的函數分布在源文件 stm32f10x_sdio.c 以及對應的頭 文件 stm32f10x_sdio.h 中。(未完待續)
評論