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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 應(yīng)用于DM648的FLASH自動(dòng)加載實(shí)現(xiàn)方法

          應(yīng)用于DM648的FLASH自動(dòng)加載實(shí)現(xiàn)方法

          作者: 時(shí)間:2016-09-12 來源:網(wǎng)絡(luò) 收藏

          摘要:為實(shí)現(xiàn)DSP嵌入式系統(tǒng)的應(yīng)用程序自動(dòng)加載功能,提出了基于TI公司的的NOR Flash自動(dòng)加載實(shí)現(xiàn)方法。首先對啟動(dòng)過程進(jìn)行了分析,給出了用戶加載程序的編寫方法。在此基礎(chǔ)上,根據(jù)兩種文件格式的說明,設(shè)計(jì)出轉(zhuǎn)換程序,生成可用于FLASH燒寫的文件。最后在核心板上實(shí)現(xiàn)了在CCS環(huán)境下對Flah編程和程序自動(dòng)加載,證明該方法有效可行。

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

          (以下簡稱DM648)屬于TI公司的DaVinci系列DSP芯片,主要應(yīng)用于智能視頻監(jiān)控、網(wǎng)絡(luò)視頻服務(wù)器、機(jī)器視覺等領(lǐng)域。DM648采用C64x+內(nèi)核,主頻最高可達(dá)1.1GHz,并且代碼與C64x完全兼容。DM648從FLASH中加載引導(dǎo)程序的方法和之前C6x和C5000系列DSP芯片有很大的不同。第一,之前C6x和C5000系列DSP都是在上電后直接將FLASH的前1K空間的復(fù)制到片內(nèi)內(nèi)存運(yùn)行,程序代碼量不能超過1KB,程序功能有限,并且只能用匯編語言實(shí)現(xiàn),編寫難度大且可讀性較差,而針對DM648,可以直接使用C語言實(shí)現(xiàn),代碼量不受1KB限制。第二,C6x和C5000系列DSP的應(yīng)用程序使用CCS環(huán)境編譯,生成的.out格式可執(zhí)行文件需要使用TI提供的轉(zhuǎn)換程序?qū)⒏袷睫D(zhuǎn)換成后綴為.hex的二進(jìn)制文件才可以實(shí)現(xiàn)燒寫。而DM648需要將.out格式可執(zhí)行文件轉(zhuǎn)換為.ais格式后才可以燒寫到FLASH中,使用者編寫程序?qū)崿F(xiàn)文件格式的轉(zhuǎn)換。

          1 FLASH啟動(dòng)流程分析

          DM648有多種啟動(dòng)方式,本次設(shè)計(jì)采用從外部存儲(chǔ)器接門(EMIF)上的NOR FLASH啟動(dòng)。硬件電路需要在芯片復(fù)位前將DM648引腳BOOTMODE[0:3]的電平狀態(tài)配置為0100,F(xiàn)ASTBOOT引腳配置為高電平,由引腳外接1K電阻上拉到3.3 V來實(shí)現(xiàn)。DM648的其他啟動(dòng)方式及配置方法,可以參考文獻(xiàn)。

          復(fù)位之后,DM648從內(nèi)部的ROM空間開始運(yùn)行程序,地址為0x00800000。這部分程序稱為ROM Boot Loader(簡稱RBL),是TI公司直接燒寫到內(nèi)部ROM的,用戶無法更改。RBL首先修改DSP內(nèi)部鎖相環(huán)電路倍頻系數(shù)為20,即CPU的工作時(shí)鐘為外部輸入時(shí)鐘頻率的20倍。這樣可以縮短程序運(yùn)行的時(shí)間;RBL讀取EMIFA接口中地址為0xA0000000的代碼和數(shù)據(jù),該地址為NOR FLASH的第一扇區(qū)起始地址,存放在這個(gè)地址空間的代碼稱為用戶復(fù)制程序UBL,并且UBL程序必須以AIS格式來存放。RBL會(huì)執(zhí)行AIS命令字,將UBL程序各個(gè)數(shù)據(jù)段都復(fù)制到RAM中的運(yùn)行空間,并將控制權(quán)轉(zhuǎn)到UBL。UBL首先完成DM648的初始化工作,配置EMIF接口、DDR2控制器和UART接口,并搜索應(yīng)用程序的AIS鏡像文件,UBL解析AIS鏡像文件,按照鏡像文件的地址將程序復(fù)制到運(yùn)行地址空間中。之后,UBL完成硬件環(huán)境的初步配置,跳轉(zhuǎn)到應(yīng)用程序開始運(yùn)行。使用UBL進(jìn)行二次引導(dǎo)可以將引導(dǎo)程序與應(yīng)用程序功能相脫離,應(yīng)用程序可以專注于功能的實(shí)現(xiàn),并且同一個(gè)UBL程序可以適用于不同的應(yīng)用程序。實(shí)現(xiàn)DM648芯片自啟動(dòng)的操作步驟如圖1所示,以下將分別介紹用戶程序和格式轉(zhuǎn)換程序的編寫方法,最后介紹一個(gè)完整的自動(dòng)加載實(shí)現(xiàn)過程。

          應(yīng)用于DM648的FLASH自動(dòng)加載實(shí)現(xiàn)方法

          2 設(shè)計(jì)

          用戶引導(dǎo)程序UBL完成的主要工作是解析應(yīng)用程序AIS鏡像,并將各段數(shù)據(jù)復(fù)制到RAM中對應(yīng)的運(yùn)行地址。使用C語言在CCS環(huán)境下編寫。內(nèi)存分配方面本次設(shè)計(jì)的UBL程序運(yùn)行空間在16K字節(jié)之內(nèi),因此可以獨(dú)立定義其運(yùn)行空間為片內(nèi)的RAM空間的最初16K字節(jié),即在UBL工程的CMD文件中增加如下代碼,程序分配到RAMUBL空間中運(yùn)行。

          MEMORY

          {

          RAMUBL org=0x00A00000 len=0x00004000

          }

          需要注意的是應(yīng)用程序中需要進(jìn)行初始化的段不可以分配到上述空間運(yùn)行,否則UBL在復(fù)制應(yīng)用程序的過程中就會(huì)覆蓋UBL運(yùn)行中的程序或者數(shù)據(jù),從而造成UBL運(yùn)行崩潰。

          UBL程序的工作流程為:

          1)DEVICE_UARTOInit()初始化串行接口,配置串口通訊的速率、數(shù)據(jù)位、校驗(yàn)位等內(nèi)容,在執(zhí)行下述每個(gè)步驟中通過串行接口將調(diào)試信息發(fā)送給PC機(jī),便于觀察啟動(dòng)過程和確定故障原因。

          2)DEVICE_EMIFInit()配置EMIF寄存器,使DSP可以訪問EMIF接口外接的FLASH芯片。本次設(shè)計(jì)采用16bit異步模式來訪問外部NOR FLASH芯片。

          3)DEVICE_DDR2Init()配置DDR2控制器寄存器,使得DSP可以訪問DDR2寄存器,實(shí)際工程中數(shù)據(jù)需要復(fù)制到DDR2 RAM存儲(chǔ)器中。此時(shí)需要配置DDR2的總線寬度和讀寫時(shí)間參數(shù)等寄存器。

          4)從FLASH芯片中保存的UBL鏡像文件結(jié)束的下一個(gè)扇區(qū)開始查找應(yīng)用程序的AIS鏡像文件魔幻數(shù)。當(dāng)一個(gè)有效的魔幻數(shù)被找到后,UBL會(huì)順序讀取之后的32位AIS命令并執(zhí)行,將所有數(shù)據(jù)段復(fù)制到目的地址中。之后,UBL程序?qū)ump_Close指令的數(shù)據(jù)部分,即應(yīng)用程序入口地址保存到變量gEntryPoint中。

          5)UBL程序會(huì)完成硬件環(huán)境的初步配置,包括配置鎖相環(huán)電路的倍頻系數(shù)從而修改DM648的工作頻率,配置DM648的PSC寄存器關(guān)閉不使用的片上外設(shè)降低芯片功率,配置引腳復(fù)用功能滿足應(yīng)用程序要求等。之后跳轉(zhuǎn)到應(yīng)用程序的入門地址gEntryPoint運(yùn)行程序。

          3 燒寫文件格式轉(zhuǎn)換程序設(shè)計(jì)

          本次設(shè)計(jì)采用FLASH快速啟動(dòng)方式時(shí),RBL只能解析AIS格式的鏡像文件,而UBL和應(yīng)用程序都在CCS環(huán)境中使用C語言實(shí)現(xiàn),二者獨(dú)立編譯鏈接后會(huì)生成格式為COFF()的.out文件。因此需要編寫程序?qū)崿F(xiàn)COFF文件到AIS文件的轉(zhuǎn)換,本次設(shè)計(jì)中整個(gè)轉(zhuǎn)換過程使用C語言在VC6.0環(huán)境實(shí)現(xiàn)。

          3.1 COFF文件格式分析

          COFF文件以段的形式將程序中的代碼和數(shù)據(jù)進(jìn)行組織,默認(rèn)情況下COFF文件包含3個(gè)段:.text為可執(zhí)行代碼段;.data為初始化數(shù)據(jù)段;.bss為未初始化數(shù)據(jù)段。一個(gè)完整的COFF文件如圖2所示,包括以下幾部分,依次為文件頭、可選文件頭、段信息表、段數(shù)據(jù)、重定位信息、行號(hào)入口表、符號(hào)表和字符串表。

          應(yīng)用于DM648的FLASH自動(dòng)加載實(shí)現(xiàn)方法
          上一頁 1 2 3 下一頁

          評論


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