《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 嵌入式系統中基于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時鐘相關。

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

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

 ?、跠RESULT 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。

 ?、軩RESULT 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網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          一区二区视频欧美| 美女主播一区| 亚洲欧洲日本mm| 亚洲国产高清aⅴ视频| 国产美女精品一区二区三区| 亚洲综合精品| 欧美在线|欧美| 欧美国产视频在线| 欧美日本亚洲| 亚洲精品久久久久久久久久久久久| 亚洲国产精品久久久久秋霞影院| 久久精品国产99国产精品澳门| 久久久人人人| 国产精品国内视频| 国产色视频一区| 亚洲精品国产精品国自产观看浪潮| 亚洲图片你懂的| 99国产精品视频免费观看一公开| 国产欧美va欧美不卡在线| 国产精品亚洲综合一区在线观看| 欧美—级a级欧美特级ar全黄| 国产亚洲欧美一区| 欧美经典一区二区| 欧美午夜不卡影院在线观看完整版免费| 亚洲第一精品夜夜躁人人爽| 国产欧美日韩高清| 欧美日韩国产另类不卡| 国产专区欧美专区| 国产精品美女一区二区在线观看| 免费亚洲婷婷| 欧美色视频在线| 国产一区二区三区日韩| 夜夜狂射影院欧美极品| 欧美精品videossex性护士| 亚洲欧美色婷婷| 欧美日韩国产123区| 亚洲小视频在线观看| 久久精品一区二区三区不卡牛牛| 国语自产在线不卡| 欧美交受高潮1| 国内偷自视频区视频综合| 久久超碰97人人做人人爱| 亚洲欧洲另类| 欧美午夜a级限制福利片| 欧美精品免费视频| 在线不卡中文字幕| 亚洲风情在线资源站| 国产精品a久久久久| 欧美电影在线播放| 中文在线不卡视频| 国产一区二区三区四区| 亚洲国产裸拍裸体视频在线观看乱了中文| 亚洲精品123区| 午夜免费日韩视频| 欧美影视一区| 久久人人97超碰国产公开结果| 欧美成人a∨高清免费观看| 亚洲欧美中文在线视频| 麻豆精品在线观看| 极品少妇一区二区| 亚洲自拍都市欧美小说| 91久久线看在观草草青青| 麻豆精品视频在线观看视频| 久久嫩草精品久久久精品| 欧美xx69| 亚洲免费视频网站| 久久爱www| 国产精品久久久99| 欧美日韩在线免费| 一个色综合av| 老鸭窝91久久精品色噜噜导演| 亚洲清纯自拍| 亚洲黄网站黄| 久久综合亚洲社区| 国产区亚洲区欧美区| 亚欧成人精品| 亚洲深夜激情| 久久精品一级爱片| 国产精品sm| 亚洲视频专区在线| 亚洲第一精品影视| 国产在线日韩| 欧美乱人伦中文字幕在线| 老司机aⅴ在线精品导航| 中文在线资源观看视频网站免费不卡| 国模精品一区二区三区色天香| 亚洲精品在线一区二区| 欧美一区二区三区精品电影| 亚洲国产经典视频| 欧美午夜精品久久久久久超碰| 久久久久久综合网天天| 国产亚洲一区二区三区在线观看| 亚洲精品欧美在线| 六月天综合网| 亚洲欧洲三级电影| 欧美午夜片欧美片在线观看| 一区二区三区|亚洲午夜| 影音先锋日韩有码| 亚洲在线1234| 国产精品欧美久久| 午夜精品免费在线| 国产精品一卡| 久久高清国产| 欧美一区激情| 黄色成人在线观看| 亚洲人www| 国产精品视频一二| 国产精品久久国产愉拍| 亚洲电影免费观看高清完整版在线| 午夜精品一区二区三区在线播放| 91久久线看在观草草青青| 国产精品毛片a∨一区二区三区|国| 麻豆91精品| 久久久久久久性| 狠狠色狠狠色综合日日小说| 欧美三区美女| 国内精品**久久毛片app| 黄色成人在线观看| 麻豆精品一区二区av白丝在线| 99国产精品久久久久久久久久| 在线亚洲+欧美+日本专区| 亚洲一级片在线观看| 香蕉成人啪国产精品视频综合网| 国产一区二区高清视频| 亚洲影院污污.| 国产日韩亚洲欧美综合| 国产精品网站一区| 亚洲欧洲视频| 亚洲男人的天堂在线| 亚洲精品欧美| 国产日韩欧美在线播放| 亚洲人人精品| 在线日韩日本国产亚洲| 国产一区二区三区四区老人| 日韩午夜在线视频| 欧美视频不卡中文| 欧美激情欧美激情在线五月| 亚洲欧美日韩在线一区| 在线观看欧美| 久久精选视频| 1024国产精品| 亚洲国产一区二区三区青草影视| 亚洲一级黄色片| 欧美精品粉嫩高潮一区二区| 午夜国产精品视频| 亚洲欧洲偷拍精品| 亚洲免费av观看| 亚洲美女在线看| 亚洲国产一区二区视频| 在线观看日韩av先锋影音电影院| 国产精品国产三级国产aⅴ无密码| 国产日韩在线亚洲字幕中文| 国产日韩欧美| 欧美性片在线观看| 亚洲一区日韩| 久热国产精品视频| 亚洲国产一二三| 欧美欧美天天天天操| 一区二区在线视频播放| 欧美一区二区三区视频| 极品尤物久久久av免费看| 亚洲国产精品一区二区尤物区| 亚洲午夜精品17c| 欧美福利视频一区| 欧美日韩国产区一| 欧美一级成年大片在线观看| 久久综合久久久| 亚洲一级免费视频| 99视频一区| 亚洲制服丝袜在线| 欧美日韩精品久久| 亚洲黄色片网站| 久久精品论坛| 国产日韩精品一区二区三区| 欧美一区二区三区视频在线| 欧美性大战久久久久久久| 久久一区二区三区四区| 日韩一区二区精品葵司在线| 久久gogo国模裸体人体| 国产精品对白刺激久久久| 欧美在线不卡视频| 欧美激情日韩| 久久久久久久久伊人| 欧美精品二区| 欧美精品福利在线| 国产精品久久久久影院色老大| 欧美va亚洲va国产综合| 久久久精品免费视频| 久久精品一区蜜桃臀影院| 欧美一区二区三区视频免费| 亚洲日本一区二区三区| 亚洲美女免费精品视频在线观看| 欧美精品手机在线| 亚洲欧洲日本mm| 在线视频精品一区| 久久久久免费视频| 久久视频一区二区| 亚洲自拍偷拍视频| 国产女主播在线一区二区| 亚洲国产精品第一区二区三区| 国产免费观看久久| 日韩一级黄色片| 欧美精品综合| 亚洲老板91色精品久久| 亚洲精选在线观看| 欧美日韩国产三级| 欧美少妇一区| 欧美jizz19hd性欧美| 国产在线精品一区二区夜色| 影音先锋另类| 亚洲精品在线三区| 久久亚洲不卡| 欧美国产日韩亚洲一区| 亚洲一区综合| 欧美成人69av| 欧美日韩免费一区二区三区视频| 国产精品免费aⅴ片在线观看| 欧美激情久久久久久| 亚洲成人影音| 激情久久久久久久| 欧美精品一区二区三区视频| 国产日产欧美精品| 国产日韩欧美夫妻视频在线观看| 欧美丝袜一区二区三区| 国产精品成人播放| 久久国产精品72免费观看| 欧美承认网站| 欧美午夜精品久久久久久孕妇| 久久一区二区三区国产精品| 欧美日韩国产三区| 麻豆久久婷婷| 午夜在线电影亚洲一区| 日韩午夜视频在线观看| 国产精品试看| 国产欧美日本一区视频| 欧美国产视频在线| 亚洲小说欧美另类婷婷| 亚洲日本欧美日韩高观看| 亚洲国产精彩中文乱码av在线播放| 在线视频免费在线观看一区二区| 国产精品久久网| 久久久久88色偷偷免费| 亚洲国产一区二区三区青草影视| 欧美激情2020午夜免费观看| 欧美久久久久| 久久久久青草大香线综合精品| 国产日韩欧美一区二区三区在线观看| 国产精品美女久久久久aⅴ国产馆| 在线亚洲一区观看| 欧美日韩免费观看一区二区三区| 久久久国产精品一区| 欧美日韩123| 国产色视频一区| 亚洲欧美日韩视频二区| 欧美日本一区二区高清播放视频| 国产麻豆成人精品| 亚洲人精品午夜| 欧美日韩调教| 久久免费国产| 欧美了一区在线观看| 亚洲国产精品99久久久久久久久| 欧美三级午夜理伦三级中文幕| 亚洲人成在线观看网站高清| 国产精品久久久久aaaa九色| 一区二区三区久久| 亚洲激情在线观看视频免费| 欧美一二三区精品| 午夜精品久久久久久久蜜桃app| 免费一级欧美在线大片| 国产精品二区三区四区| 久久www成人_看片免费不卡| 这里只有精品视频| 欧美jizzhd精品欧美巨大免费| 国产精品久久久一本精品| 欧美日本一道本| 国产精品素人视频| 欧美阿v一级看视频| 国产午夜精品久久| 日韩亚洲在线观看| 在线观看欧美一区| 欧美三级电影精品| 亚洲一区免费看| 亚洲大黄网站| 国产精品扒开腿爽爽爽视频| 国产精品日日摸夜夜添夜夜av| 一区二区三区四区国产| 亚洲激情网站免费观看| 欧美一区二区三区精品电影| 欧美福利小视频| 欧美伦理a级免费电影| 久久久久国色av免费看影院| 国产精品日韩精品欧美精品| 国产精品视频精品| 在线中文字幕一区| 亚洲精品欧美极品| av成人免费在线| 9l国产精品久久久久麻豆| 亚洲精品小视频在线观看| 91久久精品国产91久久| 一区二区三区四区五区精品视频| 亚洲茄子视频| 在线观看av不卡| 国产精品久久亚洲7777| 国产精品激情偷乱一区二区∴| 国产欧美在线视频| 亚洲精品一区二区三区四区高清| 99视频一区二区| 国产亚洲a∨片在线观看| 伊人久久婷婷色综合98网| 中文精品视频| 激情欧美一区二区| 午夜精品久久一牛影视| 欧美日韩精品伦理作品在线免费观看| 欧美国产亚洲视频| 欧美日韩在线三级| 国产欧美日本在线| 午夜视频一区| 久久婷婷蜜乳一本欲蜜臀| 欧美私人网站| 久久aⅴ乱码一区二区三区| 国产日韩欧美视频在线| 国语对白精品一区二区| 国户精品久久久久久久久久久不卡| 一本色道久久综合狠狠躁篇的优点| 麻豆精品一区二区av白丝在线| 亚洲狼人精品一区二区三区| 性xx色xx综合久久久xx| 亚洲国产精品va在看黑人|