<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于STM32 SDIO接口驅(qū)動(dòng)SD卡的設(shè)計(jì)(下)

          基于STM32 SDIO接口驅(qū)動(dòng)SD卡的設(shè)計(jì)(下)

          作者:?陳啟武 王飛 袁彬 時(shí)間:2017-03-07 來源:電子產(chǎn)品世界 收藏

          接上篇
          2.1  卡初始化
               實(shí)現(xiàn)IO驅(qū)動(dòng)卡,最重要的步驟是 SD卡的初始化。 STM32F1的SDIO控制器可支持SD2.0 高容量卡(SDHC,最 大32G)、SD2.0 標(biāo)準(zhǔn)容量卡(SDSC,最大 2G)以及SD1.x 卡和 MMC卡,本文采用SDHC作為數(shù)據(jù)采集模塊的存儲(chǔ)單 元??ǖ念愋筒煌?,所支持的協(xié)議也不同。因此在初始化過 程中,主控制器必須先判斷卡的類型,獲得卡的基本信息, 最后完成卡的初始化,即對(duì)相關(guān)的寄存器進(jìn)行配置。SD卡 的初始化流程如圖5所示。
          首 先 , 要 初 始 化 與 S D 卡 連 接 的 硬 件 資 源 , 如 對(duì)

          本文引用地址:http://www.ex-cimer.com/article/201703/344894.htm

          圖5  SD卡的初始化流程
          STM32F1的SDIO、GPIO和NVIC等相關(guān)的寄存器進(jìn)行配置。
          然后執(zhí)行卡上電操作,發(fā)送CMD0指令,對(duì)卡進(jìn)行軟復(fù)位。 上電重置之后,主控制器通過CMD8指令區(qū)分SD卡類型, 只有SD2.0的卡才會(huì)響應(yīng)該指令,MMC卡和SD1.x的卡不會(huì) 響應(yīng);在發(fā)送CMD8的時(shí)候,參數(shù)需要設(shè)置VSH位以獲得主 控制器的供電情況。接著發(fā)送應(yīng)用命令A(yù)CMD41(發(fā)送該命 令之前要先發(fā)送 CMD55),設(shè)置參數(shù)的HCS 位以告訴 SD 卡,主控制器是否支持高容量卡(SDHC)。SD 卡接收到 ACMD41 后,返回SD 卡的OCR 寄存器內(nèi)容,主控制器通過 OCR 寄存器CCS位完成對(duì)SD 2.0卡的識(shí)別。
          識(shí)別卡的類型后,便可發(fā)送CMD2 和 CMD3 命令,分 別用于獲得卡 CID 寄存器數(shù)據(jù)和卡相對(duì)地址(RCA)。獲得 卡 RCA 之后,便可以發(fā)送 CMD9(帶 RCA 參數(shù)),獲得 SD 卡的 CSD 寄存器內(nèi)容,其包括SD卡的容量和扇區(qū)大小等十 分重要的信息。至此,SD卡的初始化基本結(jié)束,最后通過 CMD7 命令,選中要操作的SD卡,即可開始對(duì)  SD 卡進(jìn)行讀 寫操作。
          SD卡初始化函數(shù)關(guān)鍵代碼如下:
          SD_Error SD_Init(void)

          {
          SD_Error errorstatus = SD_OK; //重置SD_Error狀態(tài) GPIO_Configuration();  //SDIO 外設(shè)底層引腳初始化 SDIO_DeInit(); //對(duì)SDIO的所有寄存器進(jìn)行復(fù)位 errorstatus=SD_PowerON();    //SD卡上電
          if(errorstatus==SD_OK)
          errorstatus=SD_InitializeCards(); //初始化 SD 卡,識(shí)別卡類型

          if(errorstatus==SD_OK)errorstatus=SD_GetCardInfo(&SDCardInfo);    //獲取卡信


          if(errorstatus==SD_OK)

          e r r o r s t a t u s = S D _ S e l e c t D e s e l e c t ( (u 3 2 ) ( S D C a r d In f o. RCA<<16));       //選中 SD 卡
          return errorstatus; //初始化未成功,返回錯(cuò)誤信息
          }
          2.2  SDIO驅(qū)動(dòng)卡讀/寫數(shù)據(jù)
          S D 卡 初 始 化 完 成 后 , 就 可 以 使 用 S D I O 向 S D 卡 讀 、 寫數(shù)據(jù)了。 SDIO控制器與SD卡一般是以數(shù)據(jù)塊的形式進(jìn) 行通信。SD數(shù)據(jù)的讀寫主要用到SDIO的數(shù)據(jù)FIFO寄存器
          (SDIO_FIFO)。SDIO_FIFO包括接收和發(fā)送FIFO,他們 由一組連續(xù)的32 個(gè)地址上的 32 個(gè)寄存器組成,主控制器可 以使用 FIFO 讀寫多個(gè)操作數(shù)。要從SD卡讀數(shù)據(jù),必須讀 SDIO_FIFO 寄存器,要寫數(shù)據(jù)到 SD 卡,則要寫 SDIO_FIFO寄存器。有關(guān)SDIO數(shù)據(jù)FIFO的讀、寫用到的固件庫(kù)函數(shù)分
          別是:uint32_t SDIO_ReadData (void) 和 void SDIO_WriteData (uint32_t Data)。通過調(diào)用這些接口函數(shù),可以很方便地實(shí) 現(xiàn)SDIO驅(qū)動(dòng)層的設(shè)計(jì)。

          3 結(jié)論
          通過SD卡主控制器的設(shè)計(jì),將SD卡的存儲(chǔ)方式創(chuàng)新性 地應(yīng)用到快捷鐵路貨車監(jiān)測(cè)系統(tǒng)的數(shù)據(jù)采集模塊,簡(jiǎn)化了監(jiān) 測(cè)系統(tǒng)的設(shè)計(jì),減小了系統(tǒng)的尺寸,提高了系統(tǒng)的可靠性, 并且方便了與上位機(jī)的數(shù)據(jù)通信。本設(shè)計(jì)采用ARM Cortex?- M3內(nèi)核的32位微控制器STM32F103作為主控制器,詳細(xì)介 紹了SD卡和SDIO接口原理,所設(shè)計(jì)的硬件電路和軟件滿足 SD卡驅(qū)動(dòng)的功能要求,可加快整個(gè)監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)進(jìn)程。



          關(guān)鍵詞: STM32 SDIO SD

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();