在STM32F103XX微處理器的基礎(chǔ)上的Micr0 SD卡讀寫的實現(xiàn)
出處:徐建功,趙 捷,李 偉,田 杰 發(fā)布于:2023-06-21 13:48:25
O 引言
STM32F103xx系列微控制器:工作頻率為72MHz,片上集成了高速存儲器(Flash多可達512kB,SRAM多可達64kB),和通過APB總線連接的豐富和增強的外設(shè)和I/O。所有的設(shè)備都提供標(biāo)準(zhǔn)的通信接口(多可有2個IIC接口,3個SPI接口和5個USART接口)。片上還帶有2個12位的ADC,一個12位的雙通道DAC,11各16位計時器。
由于遠程智能心臟檢測儀器對采集到的心電信號是實時處理與存儲的。因此,本文在STM32F103XX微處理器的基礎(chǔ)上,采用Micro SD存儲卡實現(xiàn)了關(guān)鍵心電信號的存儲。
1 硬件電路設(shè)計
1.1 STM32F103xx微處理器簡介
STM32F103XX基于高性能32位RISC的ARMCortex-M3核,工作頻率為72 MHz。片上集成了高速存儲器,通過APB總線連接了豐富、增強的外設(shè)和I/O。所有的設(shè)備都提供標(biāo)準(zhǔn)的通信接口。
主要特點有:內(nèi)核:ARM32位Cortex-M3 CPU,工作頻率72MHz,1.25DMIPS/MHz。單周期乘法和硬件除法。存儲器:片上集成32-512KB的Flash存儲器。6-64KB的SRAM存儲器。時鐘、復(fù)位和電源管理:2.0-3.6V的電源供電和I/O接口的驅(qū)動電壓。POR、PDR和課編程的電壓探測器(PVD)。4-16MHz的晶振。內(nèi)嵌出廠前調(diào)校的8MHz RC振蕩電路。內(nèi)部40 kHz的RC振蕩電路。用于CPU時鐘的PLL。帶校準(zhǔn)用于RTC的32kHz的晶振。低功耗:3種低功耗模式:休眠,停止,待機模式。為RTC和備份寄存器供電的VBAT。調(diào)試模式:串行調(diào)試(SWD)和JTAG接口。
1.2 SPI協(xié)議
由于SPI(setial peripheralinterface)總線占用的接口線少,通信效率高,并且支持大部分處理器芯片,因而是一種理想的選擇。SPI是利用4根信號線進行通信的串行接口協(xié)議,包括主/從兩種模式。4個接口信號為:串行數(shù)據(jù)輸入(MISO,主設(shè)備輸入、從設(shè)備輸出)、串行數(shù)據(jù)輸出(MOSI,主設(shè)備輸出、從設(shè)備輸入)、移位時鐘(SCK)、低電平有效的從設(shè)備使能信號(cs)。一旦檢測到主設(shè)備的時鐘信號,數(shù)據(jù)開始傳輸。
1.3 Micro SD卡簡介
Micro SD卡的接口可以支持2種操作模式:SDIO模式和SPI模式。設(shè)計者可以選擇其中任一模式。SDIO模式允許4線的高速數(shù)據(jù)傳輸,傳輸速率高,但是大部分微控制器無此接口,使用軟件模擬協(xié)議復(fù)雜。SPI模式使用簡單通用的SPI通道接口,即可實現(xiàn)數(shù)據(jù)傳輸,目前大多數(shù)微控制器都提供SPI接口。SPI模式相對于SDIO模式的缺點是損失了傳輸速度,但目前微處理器的處理速度越來越高,利用SPI模式大多都能滿足工程需要。
Micro SD卡要求用全雙工、8位的SPI操作。STM32F103XX微處理器和Micro SD卡之間只需要4根信號線就可以完成數(shù)據(jù)的讀/寫,當(dāng)CS片選信號線為低電平時,微處理器開始所有的總線傳輸。數(shù)據(jù)從微處理器的MOSI引腳同步輸入Micro SD卡的DI引腳,并由Micro SD卡的DO線同步輸入微處理器的MISO引腳,數(shù)據(jù)在CLK信號的上升沿同步輸入和輸出。另外,使用SPI模式時,為了防止在無卡接入或卡驅(qū)動器呈高阻態(tài)時總線懸空,根據(jù)SD卡規(guī)范,這些信號需要在微處理器端用10~100 kΩ的上拉電阻,其硬件連接電路。
2 軟件設(shè)計
軟件設(shè)計一部分是基于STM32固件庫,該固件庫針對基于ARM的32位微處理STM32F101XX和STM32F103XX。其中,包括程序、數(shù)據(jù)結(jié)構(gòu)和覆蓋所有外設(shè)特性的宏單元,還包括設(shè)備驅(qū)動的描述以及每個外圍模塊的實例。因此,使用該固件庫可以節(jié)省許多時間,將更多的時間花費在編程方面,從而減少了在應(yīng)用開發(fā)中的綜合開銷。
2.1 Micro SD卡初始化為SPI總線模式
STM32F103XX微處理器包括2個串行外設(shè)接口(SPI),可以方便地對Micro SD卡接口進行配置。首先對要用到的SPIl接口采用命令SPI_In-it(SPIl,&SPI_InitStructure)進行初始化,并使能SPIl。
剛上電時,Micro SD卡缺省使用專有的SD總線協(xié)議,將Micro SD卡切換到SPI模式,主機需要發(fā)出命令CMDO(GO-IDLE-STATE)。Micro SD卡會檢測到SPI模式選擇信息,因為卡選擇(CS)引腳在該命令和其他所有SPI命令傳送過程中都保持為低電平,故MicroSD卡以R1作為響應(yīng),空閑狀態(tài)位被置為高電平,此時MicrlO SD卡進入空閑狀態(tài),此階段的SPI時鐘頻率不能超過400 kHz。然后發(fā)送命令CMD59決定是否開啟CRC校驗,設(shè)置讀/寫塊數(shù)據(jù)長度,延遲8個時鐘后返回。
2.2 Micro SD卡讀寫單塊數(shù)據(jù)
從Micro SD卡中讀取一個數(shù)據(jù)塊只需要主機發(fā)送CMD17(MSD_READ_SINGLE_BLOCK)命令,并將起始地址作為參數(shù)(此地址必須和介質(zhì)上一個塊的起始位置對齊),然后Micro SD卡會驗證這個字節(jié)地址,并以一個R1命令作為響應(yīng)。在完成Micro SD卡讀取操作后,先發(fā)送一個起始數(shù)據(jù)命令,接著發(fā)送固定數(shù)量的數(shù)據(jù),是2個字節(jié)CRC校驗。
從Micro SD卡中寫入一個數(shù)據(jù)塊與讀取數(shù)據(jù)塊相似。主機發(fā)送CMD24(MSD_WRITE_BLOCK)命令啟動寫操作過程,Micro SD卡將以R1命令響應(yīng)格式進行應(yīng)答。如果命令響應(yīng),則進行寫操作,主機發(fā)送起始令牌,然后發(fā)送固定數(shù)量的數(shù)據(jù)字節(jié)(512 B),返回一個數(shù)據(jù)響應(yīng)令牌,指示需要寫入的數(shù)據(jù)是否完成,是2個字節(jié)的CRC校驗,寫入一個數(shù)據(jù)塊由函數(shù)u8 MSD_WriteBuffer來完成,向Micro SD卡寫數(shù)據(jù)函數(shù)中的參數(shù)與向Micro sD卡讀數(shù)據(jù)函數(shù)中的參數(shù)相同。
2.3 Micro SD卡的文件存儲
由于需要Micro SD卡上的數(shù)據(jù)能夠在計算機上直接讀/寫,所以Micro SD卡文件系統(tǒng)必須與計算機的文件系統(tǒng)一致。目前常用的文件系統(tǒng)主要有微軟的FATl2,F(xiàn)ATl6,F(xiàn)AT32,NTFS,以及Linux系統(tǒng)下的 EXT2,EXT3等。由于微軟Windows的廣泛應(yīng)用,在當(dāng)前的消費類電子產(chǎn)品中,用得多的還是FAT文件系統(tǒng),如U盤、MP3,MP4,數(shù)碼相機等,所以找到一款容易移植和使用、占用硬件資源相對較小而功能又強大的FAT開源文件系統(tǒng),對于單片機系統(tǒng)設(shè)計者來說是很重要的。它完全用標(biāo)準(zhǔn)C語言編寫,所以具有良好的硬件平臺獨立性,可以移植到多種平臺而只需做簡單的修改。需要使用者編寫移植代碼的是FAT FS提供的底層接口,包括存儲介質(zhì)讀/寫接口DiskIO和供給文件創(chuàng)建修改時間的實時時鐘RTC。
FAT FS Module一開始就是為了能在不同的單片機上使用而設(shè)計的,所以具有良好的層次結(jié)構(gòu)。頂層是應(yīng)用層,使用者無需理會FAT FSModule的內(nèi)部結(jié)構(gòu)和復(fù)雜的FAT協(xié)議,只需要調(diào)用Module提供給用戶的一系列應(yīng)用接口函數(shù),如f-open,f-read,f- write,f-Close等就可以像在PC上讀/寫文件那樣簡單。
2.3.1 文件(或目錄)創(chuàng)建
在Micro SD卡上創(chuàng)建文件(或目錄)的過程就是在文件目錄表中申請登記項的過程。首先程序要檢測文件目錄表(FDT)中是否已經(jīng)存在該文件,然后申請空閑的FDT 表項。如果存在同名的文件,則返回,創(chuàng)建文件(或目錄)失敗。申請FDT表項成功后,程序會檢測磁盤剩余的空間是否滿足新創(chuàng)文件數(shù)據(jù)長度的需要,而后尋找個空閑的簇號,并修改對應(yīng)的FDT表項。
2.3.2 文件的讀寫
Micro SD卡上的文件都是以簇(Cluster)為單位存取的。當(dāng)讀取Micro SD卡上的文件時,首先要根據(jù)文件名查找到文件加目錄登記項(F-DT),根據(jù)文件中目錄登記項中起始簇號即可以找到文件在數(shù)據(jù)DATA區(qū)中的簇內(nèi)容,并且可以在FAT表中找到第二個簇號。根據(jù)第二個簇號又能讀取第二簇的數(shù)據(jù)和FAT中第三個簇號,這樣就可以讀取全部文件數(shù)據(jù)。寫文件時要保證 FAT1和FAT2內(nèi)容的一致性,即要對兩個FAT進行同樣的寫操作。在文件的一簇填寫0xFFFFH 表示文件結(jié)束。
2.3.3 文件(或目錄)的刪除
刪除文件的操作需要提供函數(shù)DeleteFile()刪除文件的文件名和擴展名。刪除文件時,不涉及數(shù)據(jù)區(qū)的操作,只須在文件的目錄登記項(FDT)上做一個刪除標(biāo)記,并把文件在FAT表中所占用的簇標(biāo)記為“空簇”。
程序先在FDT中查找是否有同名文件,如果存在同名文件,則將在對應(yīng)的FDT表項中個字節(jié)內(nèi)容改為0xE5H,表示該FDT表項的內(nèi)容已經(jīng)被刪除,新建文件可以使用該表項。還需要將FAT表中所有文件相關(guān)簇項目的內(nèi)容都改成Ox0000,釋放出所對應(yīng)的Micro SD卡磁盤空間。若未找到同名文件,則返回一個錯誤值。程序先在FDT中查找是否有同名目錄項,如果存在同名目錄項,則將對應(yīng)的FDT表項中個字節(jié)內(nèi)容改為0xE5H。然后讀出對應(yīng)目錄的起始簇號,在該簇號中去刪除該目錄下的所有文件。
3 結(jié)語
該方案已經(jīng)成功應(yīng)用于遠程智能心臟檢測儀器中,為心臟檢測儀器的數(shù)據(jù)采集提供了一種非易失性存儲器的解決方案,遠程智能心臟檢測儀器采集得到的數(shù)據(jù)信息以FAT32標(biāo)準(zhǔn)文件的格式保存于Micro sD卡中,數(shù)據(jù)文件可在Windows下讀取,在保證高性價比的同時,又方便了數(shù)據(jù)的進一步分析和處理。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 數(shù)字電源控制與傳統(tǒng)模擬控制的深度對比2026/2/2 11:06:56
- 模擬信號調(diào)理電路技術(shù)設(shè)計與選型運維指南2025/12/30 10:08:16
- 運算放大器壓擺率的核心要點2025/9/5 16:27:55
- 深度剖析放大器穩(wěn)定系數(shù) K 與 Mu 的差異2025/9/2 16:44:05
- 什么是運算放大器失調(diào)電流2025/9/1 17:01:22
- 高速PCB信號完整性(SI)設(shè)計核心實操規(guī)范
- 鎖相環(huán)(PLL)中的環(huán)路濾波器:參數(shù)計算與穩(wěn)定性分析
- MOSFET反向恢復(fù)特性對系統(tǒng)的影響
- 電源IC在惡劣環(huán)境中的防護設(shè)計
- 連接器耐腐蝕性能測試方法
- PCB電磁兼容(EMC)設(shè)計與干擾抑制核心實操規(guī)范
- 用于相位噪聲測量的低通濾波器設(shè)計與本振凈化技術(shù)
- MOSFET在高頻開關(guān)中的EMI問題
- 電源IC在便攜式設(shè)備中的設(shè)計要點
- 連接器結(jié)構(gòu)設(shè)計常見問題分析









