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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 一種嵌入式系統(tǒng)升級的設(shè)計和實現(xiàn)

          一種嵌入式系統(tǒng)升級的設(shè)計和實現(xiàn)

          作者: 時間:2011-07-20 來源:網(wǎng)絡(luò) 收藏

          1、引言

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

          隨著信息化,智能化,網(wǎng)絡(luò)化的發(fā)展,技術(shù)也將獲得廣闊的發(fā)展空間。技術(shù)全面展開,目前已成為通信和消費類產(chǎn)品的共同發(fā)展方向。在通信領(lǐng)域,數(shù)字技術(shù)正在全面取代模擬技術(shù)。在廣播電視領(lǐng)域,美國已開始由模擬電視向數(shù)字電視轉(zhuǎn)變,歐洲的DVB(數(shù)字電視廣播)技術(shù)已在全球大多數(shù)國家推廣。數(shù)字音頻廣播(DAB)也已進(jìn)入商品化試播階段。而軟件、集成電路和新型元器件在產(chǎn)業(yè)發(fā)展中的作用日益重要。所有上述產(chǎn)品中,都離不開技術(shù)。象前途無可計量的維納斯計劃生產(chǎn)機(jī)頂盒,核心技術(shù)就是采用32位以上芯片級的嵌入式技術(shù)。在個人領(lǐng)域中,嵌入式產(chǎn)品將主要是個人商用,作為個人移動的數(shù)據(jù)處理和通訊軟件。本文提出了利用LPC2148的SD卡嵌入式方案。

          2、總體系統(tǒng)方案

          廠家生產(chǎn)出產(chǎn)品后,用戶購買回去使用,當(dāng)設(shè)備出現(xiàn)了系統(tǒng)漏洞或者用戶不滿足現(xiàn)有功能而提出更多需求時,就要對系統(tǒng)或者維護(hù)系統(tǒng)功能。廠家只需將SD卡取回,把更新后的程序放入SD卡中,然后發(fā)放給用戶,用戶只需把SD卡插入終端設(shè)備。即可達(dá)到系統(tǒng)升級的目的。圖1給出廠商與用戶之間的交流流程圖。圖2給出整個系統(tǒng)流程圖。


          按圖1所示,廠商與用戶交流過程如下:

          (1)廠商將一個類似Boot loader的程序通過ISP方式,將其下載到Flash中,如圖2所示的位置。

          (2)將升級程序放入SD卡中,隨產(chǎn)品一起出廠。

          (3)用戶拿到SD卡后,將其插入SD卡槽,終端設(shè)備開始工作。

          (4)用戶使用一段時間后,若出現(xiàn)問題或者需要升級、維護(hù)時.只需將SD卡返回廠家即可。

          (5)廠家將升級后的程序放入返回的SD卡中,再返回給用戶.或者廠家直接再發(fā)放SD卡給用戶,而無需用戶返回SD卡。

          (6)用戶拿到SD卡后,將其直接插入終端設(shè)備卡后,則可達(dá)到升級的目的。

          出廠前,通過ISP編程方式燒入一個類似于Boot loader的程序。該程序的大致分為3個步驟:

          (1)SPI模式下的SD卡底層驅(qū)動;

          (2)讀出SD卡中的系統(tǒng)程序,并放入指定的Flash地址段中:

          (3)跳轉(zhuǎn)到指定的Flash地址段,執(zhí)行升級后的系統(tǒng)。

          在用戶插入SD卡前,程序不斷判斷SD卡是否插入。用戶插入SD卡后,程序首先驅(qū)動SD卡,使其能正常工作,然后讀取SD卡中的升級程序,并將其放入指定的Flash地址段中。最后,跳轉(zhuǎn)到指定段,開始工作。廠家可根據(jù)需要,任意安排升級程序放置的位置。

          3、系統(tǒng)硬件設(shè)計

          核心處理器采用PHILIPS公司的LPC2148。它是一個支持實時仿真和嵌入式跟蹤的32位ARM7微控制器。帶有32KB和512 KB嵌入的高速Flash存儲器。128位寬度的存儲器接口和獨特的加速結(jié)構(gòu),使32位代碼能夠在最大時鐘速率下運行,并帶有SPI總線。選用該處理器主要考慮其內(nèi)部資源豐富,無需擴(kuò)展存儲器和SPI總線,且性能優(yōu)異,抗干擾能力強,價格低廉,具有極高的性價比。

          該設(shè)計只是產(chǎn)品電路中的一部分。其硬件電路如圖3所示。LPC2148具有同步、全雙工串行接口(SPI),其最大數(shù)據(jù)位頻率為輸入時鐘頻率的1/8,可以設(shè)置為主機(jī)或從機(jī)工作方式。SD卡是通過SPI總線協(xié)議驅(qū)動的,數(shù)據(jù)傳輸中。主機(jī)總是向從機(jī)發(fā)送一個字節(jié)數(shù)據(jù),而從機(jī)也總是向主機(jī)發(fā)送一個字節(jié)數(shù)據(jù)。圖3中左邊為LPC2148,右邊為SD卡插槽。SCKl為串行時鐘,用于LPC2148與SD卡之間的數(shù)據(jù)傳輸時鐘信號:MISOl是一個單向信號,用于將數(shù)據(jù)從SD卡傳輸至LPC2148;MOSll也是一個單向信號。用于將數(shù)據(jù)從LPC2148傳輸至SD卡;SSEL1為選通信號,用于選中SD卡。圖3中的引腳3和引腳6分別接地,引腳4接電源,引腳8用于檢測SD卡是否插入,并可根據(jù)實際要求選定。SD卡與LPC2148之間通過SPI協(xié)議和SD文件系統(tǒng)的組織形式.才能協(xié)調(diào)通訊。

          4、系統(tǒng)軟件設(shè)計

          系統(tǒng)軟件部分首先通過SPI協(xié)議對SD卡初始化,然后根據(jù)SD卡的FAF32文件系統(tǒng)組織形式讀取SD卡中的數(shù)據(jù),將讀取數(shù)據(jù)通過IAP方式將其寫入Flash中,最后用一個跳轉(zhuǎn)程序跳轉(zhuǎn)到該段,以達(dá)到升級的目的。

          4.1 SD卡的初始化

          SD卡(Secure Digital Memory Card)中文翻譯為安全數(shù)碼卡,是一種基于半導(dǎo)體快閃記憶器的新一代記憶設(shè)備,它被廣泛地于便攜式裝置上使用,例如數(shù)碼相機(jī)、個人數(shù)碼助理(PDA)和多媒體播放器等。SD卡由日本松下、東芝及美國SanDisk公司于1999年8月共同開發(fā)研制。大小猶如一張郵票的SD記憶卡,重量只有2克,但卻擁有高記憶容量、快速數(shù)據(jù)傳輸率、極大的移動靈活性以及很好的安全性。

          用戶應(yīng)用程序通常以文件的形式訪問SD卡,并以文件的形式存取數(shù)據(jù);文件系統(tǒng)層是通過調(diào)用SD卡物理層的有關(guān)函數(shù)來的,所以要想以文件系統(tǒng)的形式訪問SD卡,則必須先驅(qū)動SD。SD卡的讀寫操作都是基于命令的,通過向SD卡發(fā)送相應(yīng)的命令并讀取相應(yīng)的響應(yīng)控制SD卡。在對SD卡讀寫前,首先要進(jìn)行初始化操作。這是確保SD卡能在SPI模式下正常讀寫數(shù)據(jù)的前提。SD卡上電復(fù)位后,默認(rèn)是SD模式。為了使SD卡進(jìn)入SPI模式,必須將CS置低(至少延遲74個時鐘)并通過SPI總線發(fā)送CMDn,使SD卡復(fù)位,同時激活,并進(jìn)行內(nèi)部初始化處理,使SD卡退出空閑狀態(tài)。

          SD卡初始化流程圖如圖4所示。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          評論


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