国产亚洲精品AA片在线观看,丰满熟妇HD,亚洲成色www成人网站妖精,丁香五月天婷婷五月天男人天堂

新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 應用于DM648的FLASH自動加載實現(xiàn)方法

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

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

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

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

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

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

3)段信息表位于可選文件頭之后。通常編譯之后產生的數(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ù)不需要下載。

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

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

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

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

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

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

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

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

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所示。

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

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

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

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

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 thc binary AIS file name:

rn”);

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機。



評論


技術專區(qū)

關閉