国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

應用于DM 648的FLASH自動加載實現(xiàn)方法

2014-03-16 09:22:38苑瑋琦湯永華
電子設計工程 2014年9期
關鍵詞:鏡像文件字節(jié)應用程序

苑瑋琦,于 楊,湯永華

(沈陽工業(yè)大學 視覺檢測技術研究所,遼寧 沈陽 110870)

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

1 FLASH啟動流程分析

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

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

圖1 實現(xiàn)DM648自啟動的操作步驟Fig.1 The step of DM648 achieved bootload

2 用戶引導程序設計

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

MEMORY

{

RAMUBL org=0x00A00000 len=0x00004000

}

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

UBL程序的工作流程為:

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

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

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

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

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

3 燒寫文件格式轉換程序設計

本次設計采用FLASH快速啟動方式時,RBL只能解析AIS格式的鏡像文件,而UBL和應用程序都在CCS環(huán)境中使用C語言實現(xiàn),二者獨立編譯鏈接后會生成格式為COFF(公共目標文件格式)的.out文件。因此需要編寫程序實現(xiàn)COFF文件到AIS文件的轉換,本次設計中整個轉換過程使用C語言在VC6.0環(huán)境實現(xiàn)。

3.1 COFF文件格式分析

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

圖2 COFF文件結構Fig.2 File structure of COFF

COFF文件中與下載無關的冗余信息比較多,其中文件頭、可選文件頭、段信息表、段數(shù)據(jù)是本次研究的重點,現(xiàn)對本次設計使用到的信息詳述如下。

1)文件頭保存了COFF文件的基本信息,如段數(shù)目、符號表位置等。長度為22字節(jié)。文件頭的前兩個字節(jié)為魔幻數(shù),標注COFF文件的版本,適用于TI公司DSP的魔幻數(shù)為0x00C2[7],第16、17字節(jié)為可選文件頭的長度,該數(shù)值為0或28。0表示文件中不包含可選文件頭部分。否則長度為28字節(jié)。

2)可選文件頭從偏移量0x16處開始,長度可以為0。TI的DSP采用的可選文件頭長度為28字節(jié)。可選文件頭中以字節(jié)為單位標注了代碼段、已初始化數(shù)據(jù)段和未初始化數(shù)據(jù)段的大小和基地址等信息,其中最重要的是第16到第20字節(jié),為可執(zhí)行程序的入口地址。

3)段信息表位于可選文件頭之后。通常編譯之后產(chǎn)生的數(shù)據(jù)段有很多,所以COFF文件的段信息表分成很多部分,每一個部分長度為48字節(jié)。前八個字節(jié)用來保存段名,系統(tǒng)默認的段名有.text,.data,.bss等。12到15字節(jié)是段數(shù)據(jù)的運行地址,也就是將可執(zhí)行文件載入內存時,這個地址就是段數(shù)據(jù)第一個字節(jié)的位置。16到19字節(jié)以字節(jié)為單位標注段數(shù)據(jù)的長度。20到23字節(jié)標注段數(shù)據(jù)在COFF文件中的偏移量。40到43字節(jié)是段的屬性標識,與下載相關的標識如表1所示,其余標識符數(shù)據(jù)不需要下載。

4)數(shù)據(jù)段保存段信息表所描述的數(shù)據(jù),數(shù)據(jù)以原始數(shù)據(jù)的形式存放,只有需要下載的數(shù)據(jù)段才保存在該處。

表1 下載相關標識Tab.1 The identifier for download

3.2 AIS格式分析及格式轉換程序設計

TI對AIS的定義為Application Image Script,應用鏡像腳本,是一種鏡像文件格式。AIS腳本以魔幻字0x41504954開始,之后包括命令和數(shù)據(jù)兩部分,表2所示是AIS中命令代碼[8]。稱之為Opcode。在系統(tǒng)啟動的第一個階段,RBL會對AIS格式的UBL文件中的Opcodes進行解析執(zhí)行。

上述命令代碼中Section Load和Jump_Close是最重要的兩個。具體的命令及數(shù)據(jù)格式如圖3所示。

表2 AIS文件命令代碼Tab.2 File comm and code of AIS

Section Load是數(shù)據(jù)段復制命令,以命令代碼0x58535901開始,之后的數(shù)據(jù)以32位為長度,分別是復制的目的地址、數(shù)據(jù)長度和要復制的數(shù)據(jù)。當所有需要下載的數(shù)據(jù)段都已復制完成后,需要以Jump_Close命令結束。Jump_Close命令的數(shù)據(jù)部分提供了一個32位的入口地址,該地址為應用程序的入口地址。程序會跳轉到該入口地址運行應用程序。

圖3 AIS文件結構及命令格式Fig.3 File structure and the command format of AIS

COFF到AIS文件格式轉換的過程首先就是讀取COFF文件頭數(shù)據(jù),獲得文件中數(shù)據(jù)段的數(shù)量,然后根據(jù)段信息表來判斷該數(shù)據(jù)段是否需要下載、下載的目的地址、數(shù)據(jù)長度和數(shù)據(jù)在COFF文件中起始地址。然后將段起始地址、數(shù)據(jù)長度和數(shù)據(jù)(ROW DATA格式)填寫到Section Load指令的數(shù)據(jù)部分,每個數(shù)據(jù)段對應一條Section Load指令。這一過程中只處理需要下載的數(shù)據(jù)段,因為不需要下載的數(shù)據(jù)段即未初始化數(shù)據(jù)段是在程序運行過程中被賦值的。下載的各個數(shù)據(jù)段按照目的地址由低到高的順序填寫到AIS文件中,直到所有數(shù)據(jù)段都處理完成,最后以Jump_Close命令結束,便得到了可用于燒寫的AIS文件。軟件流程如圖4所示。

圖4 COFF文件轉換成AIS文件的流程圖Fig.4 Program flow converted COFF file to AIS file

4 一個完整的自動加載實現(xiàn)過程

基于DM 648的核心板原理框圖如圖5所示。核心板上的主要資源包括:TMS320DM 648處理器,最高工作頻率為1.1 GHz;256 MB的DDR2存儲器,工作頻率為533 MHz[9];32 MB的NOR FLASH,型號為S29GL256N,每個扇區(qū)大小為128 KB[10]。

圖5 DM648系統(tǒng)結構框圖Fig.5 Block diagram of DM648 system

1)準備工作

在CCS環(huán)境中使用C語言編寫UBL和應用程序,編譯生成.out文件,使用3.2節(jié)提到的轉換程序將.out文件轉換為AIS文件,后綴為.ais。

2)啟動模式選擇及下載環(huán)境創(chuàng)建

配置DM648芯片引腳BOOTMODE[0:3]全部為低電平,F(xiàn)ASTBOOT為高電平,選擇芯片的啟動方式為仿真器啟動。連接仿真器、DM648核心板和PC機,配置仿真器驅動保證CCS可以配合硬件環(huán)境完成程序調試。

3)燒寫UBL及應用程序AIS文件

在CCS環(huán)境下打開TI公司的DVSDK中的DM648_NORWriter.pjt,該工程實現(xiàn)將UBL及應用程序AIS文件燒寫到FLASH中。首先通過CFI接口讀取FLASH芯片的參數(shù)并自動選擇操作FLASH所用的命令字是AMD模式或是Intel模式。在實際開發(fā)時所選FLASH芯片可能不支持CFI接口,此時需要使用者參考自己使用的硬件系統(tǒng)中FLASH芯片數(shù)據(jù)手冊,指定操作FLASH所用的指令字。

由于燒寫程序需要將AIS鏡像文件完全燒寫到FLASH中而不需要對內容作解析,因此在CCS環(huán)境下以文件操作的形式,使用二進制格式將鏡像文件打開,獲得文件指針并讀取文件內容。文件操作代碼如下:

//輸入UBL.ais文件路徑

DEBUG_printString("Enter the binary AIS file name: ");

DEBUG_readString(fileName);

fflush(stdin);

//以二進制形式打開UBL.ais文件,獲取文件指針fPtr

fPtr=fopen(fileName,"rb");

//讀取AIS文件的長度(字節(jié)數(shù))

fseek(fPtr,0,SEEK_END);

ublFileSize=ftell(fPtr);

程序運行后會彈出對話框要求輸入AIS文件路徑。在CCS環(huán)境中連接DM648核心板,編譯并運行DM648_NORWriter.pjt工程完成燒寫。

4)重新配置啟動模式實現(xiàn)系統(tǒng)自啟動

燒寫完成后,斷開CCS連接,DM648核心板斷電并且重新設置引腳 BOOTMODE[0:3]狀態(tài)為 0100,F(xiàn)ASTBOOT為高電平,以此選擇芯片的啟動模式為EMIFA ROM快速啟動。DM648核心板重新上電后自動運行UBL程序實現(xiàn)應用程序的自動加載??梢允褂么诰€連接DM648和PC機,UBL會在執(zhí)行過程中將啟動信息通過串行接口發(fā)送到PC機。

5 結論

實現(xiàn)DM648系統(tǒng)的自動加載需要經(jīng)過編寫二次引導程序,將二次引導程序和應用程序編譯結果轉換為可用于燒寫的AIS文件,最終將AIS燒寫到FLASH中。整個過程有一定的復雜性。本文給出的方法和程序為實現(xiàn)這一功能提供了簡明的方法,通過在DM648核心板上實現(xiàn)FLASH燒寫和自啟動過程證明了該方法有效,同時文中提出的格式轉換方法可以推廣到DM648的其他啟動方式中。

[1]Texas Instruments.TMS320DM648 Digital Media Processor[EB/OL].[2007-05].http://www.ti.com.

[2]苑瑋琦,張吉,王斌.基于DSP虹膜識別系統(tǒng)中FLASH燒寫方法的研究[J].微計算機信息,2011,27(9):20-22.YUANWei-qi,ZHANG Ji,WANG Bin.Study of flash burning method in iris recognition system based on DSP[J].Microcomputer Information,2011,27(9):20-22.

[3]衛(wèi)菊紅.基于TMS320C6455 DSP自動加載及FLASH燒寫程序的設計[J].現(xiàn)代計算機,2011(11):71-77.WEIJu-hong.Design of Boot Load and Flash Burning Based on the TMS320C6455 DSP[J].Modern Computer,2011(11):71-77.

[4]樊榮,石巖,張?zhí)煨?TMS320C6x DSP的FLASH引導方法研究與實現(xiàn)[J].電子技術應用,2004(5):73-75.FAN Rong,SHIYan,ZHANG Tian-xu.Research and implementation of TMS320C6x DSP FLASH boot loader[J].Application of Electronic Technique,2004(5):73-75.

[5]Texas Instruments.Embedded Processing Guide[EB/OL].[2009-03].http://www.ti.com.

[6]Texas Instruments.Common Object File Format[EB/OL].[2009-04].http://www.ti.com.

[7]苗軍,倪奇志.COFF文件分析提取器的實現(xiàn)及其應用[J].現(xiàn)代電子技術,2009(2):42-47.MIAO Jun,NI Qi-zhi.Realization and applicotion of COFF file extraction equipment[J].Modern Electronic Technique,2009(2):42-47.

[8]Texas Instruments.Using the TMS320DM647/DM648 Bootloader[EB/OL].[2009-6].http://www.ti.com.

[9]Micron Technology.MT47H128M16 Datasheet[EB/OL].[2006-05].http://www.micron.com.

[10]Spansion Technology.S29GL-N MirrorBit Flash Family datasheet[EB/OL].[2006-10].http://www.spansion.com.

猜你喜歡
鏡像文件字節(jié)應用程序
No.8 字節(jié)跳動將推出獨立出口電商APP
刪除Win10中自帶的應用程序
電腦報(2019年12期)2019-09-10 05:08:20
No.10 “字節(jié)跳動手機”要來了?
沒光驅不要緊 裝個免費虛擬的
簡談MC7字節(jié)碼
用RamOS降低公用機的維護工作量
Win7升級Win10教程
電腦迷(2015年9期)2015-05-30 22:08:35
關閉應用程序更新提醒
電腦迷(2012年15期)2012-04-29 17:09:47
人類進入“澤它時代”
三星電子將開設應用程序下載商店
西乌珠穆沁旗| 陵川县| 山阳县| 荃湾区| 资源县| 交口县| 南平市| 九龙县| 五台县| 蓬莱市| 兴宁市| 宜章县| 麻江县| 石家庄市| 永嘉县| 鄄城县| 樟树市| 榆树市| 扎赉特旗| 津南区| 紫阳县| 济源市| 兰西县| 中卫市| 陆良县| 甘孜县| 苏尼特左旗| 舒兰市| 凭祥市| 社会| 衡阳县| 白沙| 辉南县| 临安市| 自贡市| 普陀区| 获嘉县| 新乡县| 尉氏县| 启东市| 泰安市|