《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 嵌入式系統中基于SPI協議的SD卡擴展實現
嵌入式系統中基于SPI協議的SD卡擴展實現
2014年微型機與應用第19期
蔡紅專1, 劉 強1, 陳 琎2
1.西京學院 研究生部,陜西 西安 710123; 2.米脂縣職業教育中心,陜西 榆林 718100
摘要: 介紹了在嵌入式系統中一種基于SPI協議實現對SD卡的擴展方法,結合FatFs文件系統,使小型嵌入式系統也能容易、方便地擴展大容量存儲器。并在STM32上成功移植,打開SD卡中TXT文本,并通過串口輸出文本中的內容。
Abstract:
Key words :

  摘 要: 介紹了在嵌入式系統中一種基于SPI協議實現對SD卡的擴展方法,結合FatFs文件系統,使小型嵌入式系統也能容易、方便地擴展大容量存儲器。并在STM32上成功移植,打開SD卡中TXT文本,并通過串口輸出文本中的內容。

  關鍵詞: 嵌入式系統;SPI協議;SD卡;FatFs文件系統;移植

0 引言

  近年來,在各種嵌入式系統設計中,對大量數據的存儲需求越來越高,例如音樂、圖片以及經過A/D轉換后得到的大量實時數據的存儲。SD卡是一種基于 Flash 的新一代存儲器,具有體積小、容量大、數據傳輸快、移動靈活、安全性能好等優點,是許多便攜式電子儀器理想的外部存儲介質選擇。MCU可以通過SD模式或者SPI模式訪問SD卡,具備串行通信和隨機存取的能力,這很適合SD卡與單片機之間的互連和通信[1]。雖然只有少數高檔的單片機才提供SD卡接口,但幾乎所有單片機都支持SPI通信。本文著重介紹基于SPI協議擴展SD卡,并結合FatFs Module完成文件系統的設計。

  FatFs是針對小型嵌入式系統的一種通用的FAT文件系統模塊,由標準C語言編寫,并且完全與磁盤I/O層相獨立。所以,對于8051、AVR、PIC、Z80、ARM等MCU,只需要修改文件系統中很少的一部分,FatFs就可以被應用到基于這些低成本MCU的控制系統中。

1 MCU與SD卡接口的設計


001.jpg

  SD卡只能兼容3.3 V的I/O電平,所以要求MCU能夠支持3.3 V的I/O端口輸出,或者提供電平轉換電路,否則很容易損壞SD卡。本文提供一種5 V和3.3 V電平間的轉換電路,如圖1和圖2分別是3.3 V轉5 V電路和5 V轉3.3 V的電路。在SPI模式下,CS/MOSI/MISO/CLK都需要加10 kΩ~100 kΩ左右的上拉電阻,如圖3所示SD卡接口連接圖[2]中R0,R1,R2,R3為4個上拉電阻。

002.jpg

2 SPI協議的介紹


003.jpg

  SD卡協議包含如圖4[3]所示3個基本函數層次。其中SPI模式基礎層主要包括產生片選信號函數、SD卡在SPI模式時的初始化函數、單字節讀/寫函數、雙字節讀/寫函數等底層函數的封裝。SPI模式中間層主要包括對SD卡命令的寫函數、數據讀取函數、響應的讀寫等函數。SD卡的API層主要包括對各種類型SD卡的初始化、SD卡扇區的讀/寫函數、SD卡的信息(容量、廠家等)讀取等具有具體功能的應用函數。

3 SD卡的初始化


004.jpg

  SD卡在上電后默認工作在SD模式狀態,所以要連續發送大于74個最大頻率不超過400 kHz的CLK時鐘來完成與SD卡時鐘的同步,之后開始CMD0的操作,直到CS為有效電平(低電平)SPI模式就被啟用了。接下來按照圖5所示初始化流程來完成SD卡的初始化工作。通過SD卡的初始化,可以識別出插入卡槽中SD卡的類型(MMC、V1、V2或者V2HC),然后就可以開始對SD卡進行數據讀寫操作。

4 FatFs介紹


005.jpg

  FatFs模塊的層次如圖6所示,其中應用層主要是由FatFs模塊提供給MCU的一系列具有獨立操作功能的接口函數,而用戶無需了解FatFs模塊的內部結構和FAT文件系統協議,MCU只需要調用其中的API接口函數就可以完成在PC機上讀/寫文件操作。

  FatFs模塊主要實現FAT協議。使用時,直接將FatFs模塊提供的ff.c和ff.h文件包含到程序中,除非有必要,一般不用修改就可使用。

  最底層包括用戶移植代碼,需要根據不同MCU,編寫存儲媒介的讀/寫接口函數和供給文件創建修改時的實時時鐘函數。

5 程序移植

  移植 FatFs 主要分為三步:

  (1) 數據類型:在 integer.h 中定義好數據的類型。這里需要了解所使用的編譯器和MCU的數據類型,并定義好數據類型,基本上不需要修改。

  (2) 配置:打開 ffconf.h文件,根據對文件操作功能的需求,分別對宏定義設置文件系統的定義配置,以裁剪不必要的API操作函數。如表1配置API函數表所示,其中標有“X”的選項函數即被裁剪掉。例如,_FS_READONLY設為0時,FatFs為讀/寫文件系統;設為1時,系統為只讀,在宏匯編中裁剪掉與寫操作相關的函數。_FS_MINIMIZE,選擇性裁剪API函數。_USE_STRFUNC,選擇性裁剪與字符操作相關的API函數。_USE_MKFS設為1時,結合_FS_READONLY為1來使能API函數f_mkfs(),在驅動器上創建文件系統。_USE_FASTSEEK,設為1,使能快速搜索特性。_USE_LABEL設為1,啟用磁盤卷標功能。_USE_FORWARD設為1時,結合_FS_TINY為1,使能f_forward()函數,讀取文件數據轉移到數據流設備。_CODE_PAGE指定在目標系統上使用的OEM代碼頁,例如,設936為簡體中文。_FS_RPATH用于配置相對路徑的功能。

008.jpg

006.jpg

  (3) 函數編寫:打開diskio.c進行底層驅動編寫,實際上需要編寫6個接口函數,如圖7中diskio結構圖所示[4]。其中前5個接口函數與MCU底層I/O接口相關,而get_fattime()與系統的RTC時鐘相關。

  ①DSTATUS disk_initialize(BYZE Drive):函數初始化邏輯驅動器,為對SD卡讀/寫做準備,函數成功時,其返回值的STA_NOINIT標志位被清零,Drive是指定邏輯驅動器號。應用程序在操作時不應直接調用此函數,而是調用FatFs模塊中提供的API函數,如f_mount。

  ②DSTATUS disk_status(BYTE Drive):返回磁盤驅動器的當前狀態。Drive是指定邏輯驅動器號,不調用此函數的情況下,函數體內可以直接返回0。

  ③DRESULT disk_read(BYTE Drive,BYTE* Buffer,DWORD SectorNumber,BYTE SectorCount):從磁盤驅動器的扇區上讀取數據。Drive是指定邏輯驅動器號,Buffer為指向存儲讀取數據的數組的指針,SectorNumber為開始讀取的扇區號,SectorCount為需要讀取的扇區數,函數成功后返回0。

  ④DRESULT disk_write(BYTE Drive,const BYTE* Buffer,DWORD SectorNumber,BYTE SectorCount):向磁盤驅動器的扇區寫入數據。Drive是指定邏輯驅動器號,Buffer為指向寫入操作的數據字節數組的指針,SectorNumber為開始寫入的扇區號,SectorCount為需要寫入的扇區數,函數成功后返回0。

  ⑤DRESULT disk_ioctl(BYTE Drive,BYTE Command,void* Buffer):存儲媒介控制函數。Drive是指定邏輯驅動器號,Command是指定的命令代碼,Buffer是指向參數緩沖區的指針,函數成功后返回0。

  ⑥DWORD get_fattime(void):獲取當前時間。返回一個32位無符號整數,代表的時鐘信息如表2所示[5]。在簡單使用時,可以令該函數直接返回一個固定的常數。

009.jpg

6 結束語

  本文簡述了一種免費開源的FatFs文件系統基于SPI模式下,使各種小型嵌入式系統能夠擴展、管理SD卡這種大容量存儲器,并在STM32上成功移植,效果演示圖如圖8所示,讀出SD卡中TEXT文件夾下的“liuqiang.txt”文件里的內容等信息,并通過串口打印出來。

007.jpg

參考文獻

  [1] 段琪煒,周洪利. 基于MMC卡的嵌入式文件系統的設計與實現[J].現代計算機,2006(7):94-96,109.

  [2] 李寧. ARM開發工具RealViewMDK使用入門[M].北京:北京航空航天大學出版社,2008: 266-280.

  [3] 王永虹,徐煒,郝立平. STM32系列為ARM Cortex-M3微控制器原理與實踐[M].北京:北京航空航天大學出版社,2008: 305-313.

  [4] 張洪濤,莫文承,李兵兵. 基于SPI協議的 SD卡讀寫機制與實現方法[J]. 電子元器件應用,2008( 3):42-43,47.

  [5] 譚浩強. C程序設計(第三版)[M].北京:清華大學出版社,2006.


此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产乱肥老妇国产一区二| 狠狠久久五月精品中文字幕| 亚久久调教视频| 99视频有精品| 99国产精品一区| 99ri日韩精品视频| 99亚洲一区二区| 99精品黄色片免费大全| 亚洲品质自拍| 亚洲精品九九| 亚洲免费观看高清在线观看 | 亚洲高清在线观看一区| 国产精品一区二区你懂得 | 欧美不卡视频一区发布| 久久国产一区二区三区| 夜夜嗨av一区二区三区四季av| 亚洲男人的天堂在线| 亚洲日本中文字幕| 国产视频久久| 欧美体内she精视频在线观看| 老妇喷水一区二区三区| 亚洲欧洲av一区二区| 99精品免费| 亚洲国产精彩中文乱码av在线播放| 精久久久久久久久久久| 国产一区二区三区四区五区美女 | 亚洲国产天堂久久综合| 激情一区二区| 狠狠色2019综合网| 黑人巨大精品欧美一区二区 | 国产精品一区二区三区乱码| 欧美色偷偷大香| 欧美日韩国产精品一卡| 欧美精品日韩一区| 欧美精品久久99| 欧美久久一级| 欧美日韩高清在线| 欧美日韩日本国产亚洲在线| 欧美日韩国产综合一区二区| 欧美日韩国产片| 欧美人妖另类| 欧美日韩日本网| 国产精品国产三级国产a| 国产精品色网| 国产日韩一区在线| 国产一区二区三区四区在线观看| 国产性色一区二区| 黄色小说综合网站| 亚洲精品1区| 在线亚洲免费| 99综合在线| 亚洲毛片在线看| 狠狠色狠狠色综合人人| 国产专区综合网| 国内成人在线| 国产亚洲精品久久飘花| 国产精品永久免费观看| 国产亚洲成年网址在线观看| 激情综合网激情| 亚洲国产精品一区二区尤物区| 亚洲乱码日产精品bd| 亚洲午夜精品| 欧美一区二区播放| 亚洲欧洲日本专区| 亚洲影院在线| 久久精品一区二区三区不卡| 欧美成人精品在线播放| 欧美高清hd18日本| 国产精品av免费在线观看| 国产欧美精品va在线观看| 韩国v欧美v日本v亚洲v| 亚洲国产婷婷香蕉久久久久久| 一区二区高清在线观看| 欧美一级理论片| 亚洲日本中文字幕| 亚洲伊人一本大道中文字幕| 久久久国产91| 欧美日韩1080p| 国产精品视频一区二区三区| 永久555www成人免费| 一本久道综合久久精品| 香蕉久久国产| 亚洲美女黄网| 欧美在线视频播放| 欧美大片在线观看一区二区| 欧美日韩在线一区| 黑丝一区二区| 一本久道综合久久精品| 亚洲国产精品ⅴa在线观看 | 欧美日韩高清一区| 国产亚洲福利| 日韩午夜中文字幕| 久久精品国产亚洲一区二区| 亚洲天堂成人在线观看| 久久婷婷激情| 国产精品久线观看视频| 亚洲国产精品视频| 午夜日韩电影| 在线综合+亚洲+欧美中文字幕| 欧美怡红院视频| 欧美精品一区二区三| 国产一区二区高清视频| 亚洲国产精品成人综合| 这里只有精品丝袜| 亚洲国产精品第一区二区| 亚洲欧美日韩视频二区| 日韩视频一区二区三区在线播放免费观看| 欧美亚洲一区在线| 欧美日韩精品系列| 伊人久久大香线蕉综合热线 | 欧美一区二区精品| 亚洲特级毛片| 牛牛影视久久网| 国产视频一区二区三区在线观看| 亚洲精品视频一区二区三区| 久久精品人人| 欧美亚洲免费电影| 欧美午夜不卡视频| 亚洲精品一线二线三线无人区| 欧美在线精品免播放器视频| 亚洲图片欧美午夜| 欧美成人精品在线视频| 国精产品99永久一区一区| 亚洲一区二区三区在线播放| 99re这里只有精品6| 老色鬼久久亚洲一区二区| 国产欧美不卡| 亚洲一区二区动漫| 亚洲婷婷综合久久一本伊一区| 欧美成人黑人xx视频免费观看| 国产一区久久久| 一本色道久久精品| 夜夜狂射影院欧美极品| 蜜臀va亚洲va欧美va天堂| 国产一区二区三区黄| 亚洲免费中文字幕| 亚洲欧美制服另类日韩| 欧美午夜宅男影院在线观看| 亚洲精品日韩精品| 日韩小视频在线观看| 欧美国产日产韩国视频| 亚洲国产精品欧美一二99| 91久久久久久国产精品| 男人的天堂成人在线| 国产香蕉久久精品综合网| 中文在线资源观看网站视频免费不卡| 亚洲午夜视频在线| 国产精品99久久久久久久久| 国产精品美女www爽爽爽视频| 一本久久综合亚洲鲁鲁五月天 | 一区二区三区欧美日韩| 久久av资源网| 欧美一区二区三区精品电影| 欧美精品电影| 最新日韩中文字幕| 夜久久久久久| 欧美三区在线| 亚洲婷婷综合久久一本伊一区| 亚洲一区二区三区四区五区午夜 | 亚洲国产欧美日韩精品| 亚洲伦理中文字幕| 欧美伦理影院| 一区二区高清视频| 香蕉国产精品偷在线观看不卡| 国产精品毛片在线| 欧美一区二区三区日韩| 久久综合狠狠| 亚洲欧洲日产国产综合网| 日韩亚洲精品电影| 老司机精品福利视频| 国产精品国产三级国产专播品爱网| 亚洲欧美99| 久久av红桃一区二区小说| 国语对白精品一区二区| 91久久精品国产91久久性色tv| 欧美黄色一区二区| 中国亚洲黄色| 亚洲综合第一| 久久国产精品毛片| 在线免费高清一区二区三区| 日韩视频精品在线观看| 欧美视频在线观看 亚洲欧| 亚洲字幕一区二区| 欧美一区二区三区另类 | 亚洲高清视频一区| 中日韩高清电影网| 国产日韩欧美二区| 亚洲激精日韩激精欧美精品| 久久久另类综合| 激情欧美国产欧美| 亚洲精品视频一区二区三区| 欧美亚洲成人网| 久久aⅴ国产紧身牛仔裤| 欧美精品三级在线观看| 亚洲影视在线播放| 蜜桃av一区二区| 亚洲视屏在线播放| 免费一级欧美片在线播放| 在线亚洲成人| 蜜桃久久av一区|