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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > TransFlash存儲(chǔ)卡在嵌入式系統(tǒng)調(diào)試中的應(yīng)用

          TransFlash存儲(chǔ)卡在嵌入式系統(tǒng)調(diào)試中的應(yīng)用

          作者: 時(shí)間:2013-04-24 來源:網(wǎng)絡(luò) 收藏

          摘要:硬件平臺(tái)基于應(yīng)用處理器PXA310,軟件平臺(tái)基于嵌入式Linux的操作系統(tǒng)。首先介紹了與應(yīng)用處理器的連接電路設(shè)計(jì)。然后介紹驅(qū)動(dòng)程序的設(shè)計(jì)和對(duì)的掛載方法。在TF卡驅(qū)動(dòng)程序設(shè)計(jì)中采用了SPI工作模式和FAT32文件系統(tǒng),描述了FAT32文件系統(tǒng)的移植。最后介紹了系統(tǒng)調(diào)試,并展示了TF卡在視頻數(shù)據(jù)采集單元中應(yīng)用的設(shè)計(jì)結(jié)果。
          關(guān)鍵詞:TF卡;;

          0 引言
          調(diào)試一般使用串口、JTAG、USB或網(wǎng)卡來下載系統(tǒng)鏡像到目標(biāo)機(jī)中。使用串口下載鏡像,協(xié)議簡(jiǎn)單,接口通用,但傳輸速率太慢。使用JTAG下載鏡像,傳輸速率較高,但需要專用的JTAG調(diào)試器,價(jià)格較高,限制了調(diào)試環(huán)境。使用USB或網(wǎng)卡下載鏡像速度快、接口通用,但一般做成產(chǎn)品后的嵌入式設(shè)備不需要留出通用的USB或以太網(wǎng)接口,從而增加了設(shè)計(jì)的復(fù)雜性和開發(fā)成本。在移動(dòng)嵌入式產(chǎn)品開發(fā)過程中,如果使用TransFlash(TF)卡代替USB或以太網(wǎng)口,由于TF卡一般又都是移動(dòng)嵌入式產(chǎn)品的必要構(gòu)成部分,這樣做一般可以減小調(diào)試的復(fù)雜性和成本。本文提出使用TF卡更新鏡像的方法,并在實(shí)際的嵌入式系統(tǒng)調(diào)試中成功應(yīng)用。使用TF卡下載系統(tǒng)鏡像,速度與通用性都很好,既省去了調(diào)試中對(duì)其他下載設(shè)備的設(shè)計(jì)需求,又解決了最終產(chǎn)品大容量存儲(chǔ)器的設(shè)計(jì)問題。

          1 TransFIash卡與應(yīng)用處理器的連接電路設(shè)計(jì)
          本文調(diào)試的嵌入式系統(tǒng),是一種視頻數(shù)據(jù)采集與傳輸單元,以PXA310為中央處理器,采集到的視頻數(shù)據(jù)由PXA310進(jìn)行壓縮編碼處理,之后發(fā)送到網(wǎng)絡(luò)中去,供用戶查看。系統(tǒng)調(diào)試過程中,視頻數(shù)據(jù)可以存儲(chǔ)到TF卡中。
          TF卡模塊在系統(tǒng)中主要有兩個(gè)方面的作用:
          一是在嵌入式系統(tǒng)開發(fā)調(diào)試過程中用于將系統(tǒng)鏡像到目標(biāo)版;
          二是作為最終嵌入式系統(tǒng)產(chǎn)品的大容量存儲(chǔ)器。
          SD卡有兩個(gè)可選的通信協(xié)議:SD模式和SPI模式。SD模式是SD卡標(biāo)準(zhǔn)的讀寫方式,但要求主控制器帶有SD卡控制器。PXA310本身沒有TF卡控制器接口,選用SD模式通信就無形中增加了產(chǎn)品的硬件成本,選擇SPI模式可以說是一種最佳的解決方案,相對(duì)于SD模式,SPI模式接口與協(xié)議簡(jiǎn)單、易于操作。這時(shí)TF卡在PXA3 10 MMC/SD/SDIO主控制器控制下工作。

          2 Blob中TF卡的驅(qū)動(dòng)設(shè)計(jì)以及FAT32文件系統(tǒng)移植
          2.1 設(shè)計(jì)TF卡SPI模式驅(qū)動(dòng)
          TF卡操作遵循SD卡協(xié)議,TF卡的操作完全與SD卡相同。相對(duì)于SD模式,SPI模式接口與協(xié)議簡(jiǎn)單、易于操作。PXA310帶有MMC/SD/SDIO主控制器,但由于Blob中沒有提供SD卡與主控制器的具體驅(qū)動(dòng),實(shí)現(xiàn)完整驅(qū)動(dòng)的難度較大,故本文采用GPIO口模擬的SPI模式讀寫TF卡,運(yùn)行到Linux內(nèi)核后再加載主控制器驅(qū)動(dòng)運(yùn)行SD模式的方式,性能與實(shí)現(xiàn)難度都可兼顧。

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

          a.JPG


          SPI模式TF卡總線采用主從問答式協(xié)議。主機(jī)發(fā)送命令Command,TF卡應(yīng)答回復(fù)Response。SD卡命令有兩種,CMDx和ACMDx。ACMD是應(yīng)用指令集,屬于擴(kuò)展指令集,在發(fā)送任何的ACMD之前,必須先發(fā)送CMD55激活,才可以使用ACMD指令集。發(fā)送完一個(gè)ACMD,并且卡響應(yīng)了此指令之后,CMD55的作用就消失了,所以要發(fā)送多個(gè)或多次發(fā)送一個(gè)ACMD,需要循環(huán)發(fā)送CMD55+ACMD。
          2.2 SPI模式初始化TF卡流程
          TF卡默認(rèn)的通信模式是SD模式,本文要在SPI模式下設(shè)計(jì)TF卡驅(qū)動(dòng),需要從SD模式切換到SPI。為此,先將TF卡上電,延時(shí)74個(gè)時(shí)鐘周期后發(fā)送復(fù)位命令CMD0,同時(shí)將SD卡的CS片選信號(hào)置低,若此時(shí)接收到應(yīng)答信號(hào)為0x01,說明TF卡進(jìn)入了SPI模式。
          TF卡與MMC卡都可用SPI模式驅(qū)動(dòng),故在初始化時(shí)可考慮與MMC卡的兼容性。在發(fā)送CMD0成功接收到應(yīng)答信號(hào)后,連續(xù)發(fā)送CMD55+ACMD41,若CMD55回復(fù)0x01而ACMD41回復(fù)0x00,則TF卡初始化成功。若沒有完整的應(yīng)答,則改發(fā)CMD1,若CMD1成功回復(fù)0x00,則MMC卡初始化成功。
          在SPI模式下,TF卡的初始化時(shí)鐘頻率不能超過400 kHz。初始化成功后,就可以配置高速時(shí)鐘下TF卡的讀寫操作了。圖2為TF卡初始化流程圖。

          b.JPG


          在Blob中完成TF卡初始化,還需要初始化PXA310的GPIO口,并根據(jù)對(duì)應(yīng)TF卡的引腳配置其輸入輸出關(guān)系。
          在Blob中,PXA3 10的PXA_SD_D2、PXA_SD_D3、PXA_SD_CMD、PXA_SD_CLK、PXA_SD_D0、PXA_SD_D1這幾個(gè)I/O口并沒設(shè)置為GPIO口,不能在軟件上進(jìn)行讀寫操作,要使用SPI模式,必須將這幾個(gè)IO口設(shè)置為GPIO。通過在MFP寄存器中配置IO口的功能號(hào),再配置相應(yīng)參數(shù)即可實(shí)現(xiàn)。
          2.3 通過SPI讀寫TF卡的程序設(shè)計(jì)
          TF卡的讀寫以塊為單位,初始化完成后,使用CMD16設(shè)置SD卡讀寫塊長(zhǎng)度(512 B),發(fā)送CMD17和CMD24讀單塊寫單塊,發(fā)送CMD18和CMD25讀多塊和寫多塊。實(shí)現(xiàn)TF驅(qū)動(dòng)層中讀寫函數(shù)的邏輯流程如圖3所示。

          c.JPG


          上一頁 1 2 3 下一頁

          評(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); })();