摘 要:便攜性與實時性的要求使得嵌入式系統(tǒng)需要具備自啟動功能,在DM642的平臺上,闡述FLASH的工作原理以及其與DM642的硬件結構,研究DM642從外圍FLASH自啟動及多級引導程序開發(fā)原理,并結合自己的實際經(jīng)驗,針對使用CPLD和FPGA的不同系統(tǒng),詳細介紹其FLASH在線編程的步驟,實現(xiàn)大型應用程序的自啟動加載DSP系統(tǒng)。
關鍵詞:FLASH;DM642;自啟動;引導加載
中圖分類號:TP333.12文獻標識碼:B
文章編號:1004373X(2008)2200804
Implementation and Principle Study of FLASH Burning Based
on DM642 Self-startup System
LIU Fazhi,ZHANG Dong,YANG Yan,ZHU Xiaoding
(School of Physics Science and Technology,Wuhan University,Wuhan,430072,China)
Abstract:Requirement of portability and real-time ability,the embedded system needs a self-starting function.Based on DM642 platform,the principle of FLASH memory and the hardware structure are introduced,DM642 self-startup procedure from the FLASH memory is studied.According to the writer′s own actual experience,it is an innovation that the development process and implementation method of multi-level bootloader for the system are proposed in detail used either CPLD or FPGA.A DSP self-startup system with a large-scale applications is realized.
Keywords:FLASH;DM642;self-startup;boot load
TMS320DM642(DM642)是TI公司發(fā)布的專門面向多媒體應用處理器,其工作頻率可達600 MHz,集成了視頻端口、音頻應用、以太網(wǎng)MAC等外設,可自啟動的特點使得其在便攜式和自動化系統(tǒng)中得到廣泛應用。本文在DM642平臺上,介紹FLASH燒寫原理并給出一套DM642的自啟動加載方案以及實際應用的一些經(jīng)驗。
1 FLASH工作原理
FLASH是一種可以在線進行電擦寫,并在掉電后信息不丟失的非易失性存儲器,具有在線電擦寫、低功耗、大容量、擦寫速度快等特點,適用于需要實時寫入數(shù)據(jù)并且掉電保持的系統(tǒng)。
FLASH按其內(nèi)部結構的不同可以分為NOR FLASH,NAND FLASH,OR FLASH及AND FLASH等,常用的是NOR FLASH和NAND FLASH,前者就是常說的閃存,而后者就是U盤和一些移動存儲設備的存儲介質(zhì)。NOR FLASH使用字寫于的方式,而NAND FLASH只支持為頁的操作,同時NAND FLASH的數(shù)據(jù)線與地址線是復用的,雖然兩者的結構不同,但操作相似。本文采用的是AMD公司的NOR FLASH 芯片Am29LV033C,其容量是32 Mb(4 Mb×8),最快讀取速度70 ns,64個64 b的扇區(qū),0.32 μm工藝技術,數(shù)據(jù)可保持20年不丟失。對于FLASH,讀操作比較簡單,只要從指定的地址讀出對應的數(shù)據(jù)即可,而寫操作和擦除操作必須通過往指定地址寫指定命令的方法來實現(xiàn),且每次寫操作時首先要擦除要寫入?yún)^(qū)內(nèi)容。其操作命令控制如表1所示:
2 DM642與FLASH的硬件連接
DM642有1個64位的EMIF接口,引腳上包括數(shù)據(jù)總線ED[63:0],地址總線EA[22:3],時鐘信號線,其可使能4個不同的空間(CEn,n=1-4),因此可將CE1空間配置成8位異步模式,作為FLASH的映射空間。然而EMIF口只有20根地址線,尋址空間只有1 Mb(220),小于FLASH的4 Mb(222)的地址空間,必須采用分頁的方式來訪問,這里利用CPLD(或者FPGA)來控制FLASH的高3位地址線進行分頁,每頁512 kb,分為8頁,一旦寫入FLASH的程序大于512 kb,通過控制頁寄存器進行分頁。硬件連接圖如圖1所示:
3 DM642自啟動原理
DM642啟動方式是通過上電時采樣引腳AEA[22,21]的電平來設置的??梢赃x擇NO BOOT(AEA[20,19]均為低電平)和從外部存儲器自啟動(AEA[20,19]均為高電平)以及HPI/PCI啟動。如果選擇從外部存儲器FLASH啟動,則在系統(tǒng)結束復位狀態(tài)后,DM642將FLASH空間(CE1空間,起始地址90000000H)的前1 kB復制到片內(nèi)0地址開始的存儲單元中,并從0地址開始執(zhí)行。用戶的應用程序往往大于1 kB,所以位于0地址的1 kB程序經(jīng)常是一個裝載程序(又叫二級BootLoader),它用來完成將應用程序從FLASH中讀出放到RAM存儲器中,當裝載完成后,指向程序的入口地址c_int00()處并開始執(zhí)行應用程序,這個過程也被叫作二次加載。
二級BootLoader主要完成3個功能:
(1)初始化EMIF口,配置其寄存器;
(2)然后從FLASH的前半頁的1 kB以后開始把程序的各個段和數(shù)據(jù)拷貝到指定的存儲器物理地址中;
(3) 跳到C程序的人口點處c_int00()。由于Bootloader在FLASH中的位置是0x90000000~0x90000400,而Bootloader又是放在用戶程序中的。因此,為了在用戶成程序的.cmd文件中把Bootloader定位在程序段的起始位置。
圖2顯示了使用使用二級Bootloader的應用程序加載過程。
4 自啟動加載實現(xiàn)過程
利用DM642的在線編程能力,實現(xiàn)DM642的自啟動加載實現(xiàn)過程,大致分為一下幾個步驟:
4.1 應用程序建立
TI代碼產(chǎn)生工具產(chǎn)生的目標文件是一種模塊化的文件格式COFF格式。程序中的代碼和數(shù)據(jù)在COFF文件中是以段的形式組織。COFF文件是由文件頭、段頭、符號表以及段數(shù)據(jù)等數(shù)據(jù)結構組成;編譯器會將我們的應用程序轉換為COFF格式.out文件,編譯器是怎樣知道應用的程序段放在哪個存儲空間,這個工作是通過一個連接命令文件(.cmd)完成。這個文件里面就包含DSP和目標板的存儲器空間的定義以及代碼段、數(shù)據(jù)段是如何分配到這些存儲器空間的。
編寫連接命令文件可以利用DSP/BIOS提供的MEM(Memory Section Manager)模塊。其非常方便用戶管理和安排各數(shù)據(jù)程序段,而且其模板已經(jīng)定義了一系列的常用存儲段(用戶可以通過窗口對話框修改段屬性),如果用戶要添加新的段,則需要修改用戶的連接命令文件。具體操作如下:創(chuàng)建BOOT 內(nèi)存區(qū),在System→MEM-Memory Section Manager,創(chuàng)建BOOT 段,起始地址為0,長度為0x400(1 kB),而且需要把內(nèi)存段后移,從0x400開始,并把長度減去0x400。否則段重疊將導致之前寫入的數(shù)據(jù)被覆蓋。
創(chuàng)建連接命令文件,取代原有的BIOS自動產(chǎn)生的cmd 文件(videocfg.cmd)。在新建的cmd 文件中,包含原有的cmd 文件,并把添加.boot_load 段代碼映像到BOOT 內(nèi)存區(qū)。內(nèi)容如下:
-l videocfg.cmd
SECTIONS
{.BOOT>ISRAM}
這樣就成功創(chuàng)建了BOOT段并把其映射在ISRAM的前1 kb之中。也就是說在DM642自啟動上電以后,DM642會自動將FLASH中0x9000000~0x90000400復制到ISRAM的0x0~0x400段。
4.2 編寫二級加載程序
二級加載程序?qū)懺谝粋€匯編程序BOOT.asm(也就是BOOT段所存放的數(shù)據(jù)),并需添加到應用程序之中。對于boot.asm中內(nèi)容中關于初始化化EMIF口以及調(diào)轉程序入口部分以省略,這里只給出關于拷貝應用程序代碼,如下:
COPY_TABLE .equ0x90000400
.sect \".boot_load\"
.global _boot
_boot:
mvkl COPY_TABLE,a3;拷貝表指針
mvkh COPY_TABLE,a3
ldw*a3++,b1;入口地址
copy_section_top:
ldw*a3++,b0;地址增1
ldw*a3++,a4;ram 起始地址
nop3
[!b0] b copy_done;是否拷貝完
nop5
copy_loop:
ldb*a3++,b5
subb0,1,b0;減數(shù)計數(shù)r
[ b0] b copy_loop;跳轉
[!b0] b copy_section_top
zero a1
[!b0] and3,a3,a1
stbb5,*a4++
[!b0] and-4,a3,a5
[ a1] add4,a5,a3
4.3 轉換成二進制文件
編譯器生成的COFF格式.out文件不能直接燒寫,現(xiàn)行的在系統(tǒng)編程的方法一般都是先把待加載程序(用戶程序)的.out文件(COFF格式)轉成HEX格式,然后去掉HEX格式文件的文件頭,再通過燒寫程序?qū)懙紽LASH里去。這里利用TI提供的hex6x二進制文件轉換工具,其可將out文件轉換為ASCII二進制文件。不過需要用戶正確設置hex6x的命令行文件,編寫完下列文件后雙擊out2hex.bat即可生成所要轉換的文件.hex
hex6x的命令行文件,用來設置轉換的一些參數(shù),內(nèi)容如下:
user′s_programe.out
-a // Select ASCII hex file format for output
-memwidth 8// Generate output for an 8-bit wide FLASH device
-boot//為所有的段創(chuàng)建一個boot表
-map h263loopback.map //Generate .map file
ROMS
{FLASH: org = 0x90000000,len = 0x80000,rowidth = 8,files ={ user′s_programe.hex}
}
//ROM下大括號中定義的文件長度,0x80000為每頁512 kB
需注意的是在各文件中文件名必須一致,否則將提示找不到該文件。
4.4 FLASH燒寫過程
正如上文所述,F(xiàn)LASH寫操作和讀擦除操作必須通過往指定地址寫指定命令的方法來實現(xiàn),用戶可以自己編寫程序來完成,也使用TI提供的FLASHburn工具來燒寫,通過執(zhí)行FBTC.out的內(nèi)容來完成FLASH的讀寫和擦除。因為FLASH寫入時只有數(shù)據(jù)為0時才進行寫入,數(shù)據(jù)為1時則什么也不做,所以每次燒寫之前都需要將FLASH擦除干凈。
對于使用CPLD與FPGA燒寫程序略微有些不同,其原因在于FPGA是掉電數(shù)據(jù)就丟失了,因此每次都需要燒寫FPGA的配置osd_fpa_rev4_ahex.hex(放在第0頁的后半頁),而且在應用程序中還需添加EVMDM642_fpgaLoad(0x90040000)語句,自啟動過程中完成往FPGA寫配置的過程,這樣FPGA才能夠工作。而CPLD掉電數(shù)據(jù)仍在,故不需要這樣做。
小程序燒寫(所謂小程序是指在第0頁就能存放下的程序,對于使用FPGA的系統(tǒng)因其第0頁后半頁已被使用,故其只能放下256 kb的小程序,而對于CPLD,存放小程序為1頁大小512 kb)與大程序燒寫也略微有些區(qū)別,小程序不用分頁,直接利用FLASHburn工具來燒寫,需注意的是在FLASHburn工具在Downloading 欄中,F(xiàn)ile to burn 項填入要燒寫的用戶程序的.hex 文件,logical Addr 填入0x0。FLASH Physical項填入0x90000000,Bytes 項填入0x400000。大程序則需要利用CPLD/FPGA分頁,具體實現(xiàn)方法是利用1個變量不斷的計數(shù),每拷貝1個數(shù)據(jù)(8 b)計數(shù)值加1,并將計數(shù)值與0xffff(64 k×8 b=512 kb),一但大于則通知分頁寄存器加1,開始往下一頁來拷貝程序。這里在CPLD/FPGA中設置地址為0x9008001A的寄存器,對應與FLASH的高3位地址線,往這一頁寫入的值(0~7)就代表了第幾頁,需要修改FBTC642.pjt的FLASH的基地址為0x9008001A。
下面介紹如何實現(xiàn)將應用程序能放在FLASH的任意頁,而不用從第0頁開始,特別是使用FPGA的大程序燒寫,就必須這樣做,因為如果從第0燒寫大程序?qū)⒏采wFPGA的配置程序。在FLASH的前1 kB中存放原來的boot段用來拷貝存放在FLASH的9000000400以后的程序,而放在9000000400以后的程序就是snd_bootload,它是用來拷貝放在FLASH第二頁0x90010000以后的程序。所以對于FPGA的大程序,需要燒寫3個HEX文件并要求遵循一定順序。首先應用程序FPGA的配置程序在第0頁后半頁;然后下載運行fpga.out確保FPGA工作;然后燒寫應用程序,修改FLASHburn工具在Downloading 欄中l(wèi)ogical Addr 填入0x100000(第二頁);最后燒寫snd_bootload程序。對于CPLD則只需后面2步,這樣就成功完成大程序的燒寫。
5 結 語
文章結合自己實際開發(fā)經(jīng)驗,給出對于FLSAH燒寫的原理和一些方法與經(jīng)驗的總結,對于FPGA+DM642是用的TI的EVM評估板,而CPLD+DM642則是使用的是自己的開發(fā)板,通過燒寫FLASH,成功完成視頻圖像處理的應用程序自啟動運行。
參 考 文 獻
[1] AMD.Am29lv033c Datasheet.2003.
[2]Texas Insturments.TMS320C6000 EMIF to ExternalFLASH Memory.Literature Number:SPRA568A,F(xiàn)ebruary 2002.
[3]Texas Insturments.TMS320 DSP/BIOS Users Guide.Literature Number:SPRU423E,March,2004.
[4]Texas Insturments.Creating a Second-Level Bootloader for FLASH Bootloading on TMS320C6000 Platform with Code Composer Studio.Literature Number:SPRA999A,August 2004.
[5]李方慧,王飛.TMS320C6000系列DSPS 原理與應用\\.2版.北京:電子工業(yè)出版社,2005.
[6]聞亭科技發(fā)展有限責任公司.TDS642EVM 多路實時圖像處理平臺\\.2005.
[7]北京瑞泰發(fā)展有限責任公司.ICETEK-DM642-IDK-MT圖像語音和網(wǎng)絡系統(tǒng)硬件、軟件使用說明書和實驗指導書\\.2005.
[8]李興友,游志勝.基于DM642的大容量FLASH引導加載方法研究與實現(xiàn)\\.計算機應用,2005,25(8):1 929-1 941.
[9]胡嘉凱,蔣建國,齊美彬.基于TMS320DM642的FLASH在系統(tǒng)編程方法\\.電子設計應用,2006(4):110-111,120.
[10]周世新.大容量FLASH與DSP接口技術的實現(xiàn)\\.無線電工程,2006,36(3):57-58,62.
[11]江思敏,劉暢.TMS320C6000 DSP應用開發(fā)教程\\.北京:機械工業(yè)出版社,2005.
[12]常傳文,茅文深.DM642上利用DMA和CACHE優(yōu)化內(nèi)存存取實例\\.現(xiàn)代電子技術,2007,30(22):145-147.
[13]路錦正.基于DM642DSP的MPEG4視頻解碼算法優(yōu)化設計\\.現(xiàn)代電子技術,2007,30(4):80-82,91.
作者簡介 劉發(fā)志 男,1984年出生,湖北武漢人,碩士研究生。研究方向為信息處理與微系統(tǒng)。
張 東 男,1963年出生,廣東梅縣人,副教授。研究方向為信息處理與微系統(tǒng),通信,數(shù)據(jù)庫技術。
楊 艷 女,副教授。研究方向為圖像分析與處理。
朱曉鼎 男,1984年出生,湖北廣水人,碩士研究生。研究方向為信息處理與微系統(tǒng)。