本發(fā)明屬于航空計算技術(shù),具體涉及一種基于DSP的Flash芯片引導加載方法。
背景技術(shù):
隨著計算機技術(shù)的飛速發(fā)展,數(shù)字信號處理器(Digital Signal Processor,DSP)技術(shù)的應用范圍越來越廣泛,幾乎在整個電子、信息產(chǎn)業(yè)都有應用。其中應用最廣泛的是美國TI公司生產(chǎn)的DSP系列產(chǎn)品。在這些DSP系列的系統(tǒng)設計中,引導程序設計是其中的難點之一,系統(tǒng)啟動引導的成功與否決定了應用程序的運行環(huán)境是否能正確構(gòu)建,即系統(tǒng)啟動成功是正確應用運行的前提。目前,大多數(shù)數(shù)字信號處理器不帶內(nèi)部可擦寫存儲器,程序一般在系統(tǒng)上電時,從外部只讀存儲器(Read-Only Memory,ROM)讀入DSP程序空間隨機存取記憶體(Random Access Memory,RAM)中,然后從指定的地址開始運行程序空間RAM中的指令,該過程稱為DSP程序的引導加載過程。
TMS320C672x系列沒有自帶的Flash芯片,一般程序要燒寫到外擴的Flash芯片中,再由Flash芯片引導自啟動。Bootloader程序運行在DSP中,用來將Flash芯片的數(shù)據(jù)復制搬移到DSP的1K字節(jié)大小的RAM內(nèi)。傳統(tǒng)TMS320C6727的Flash芯片自啟動往往需要利用JTAG仿真器將程序燒寫到Flash芯片中去,如果更改程序必須拆開機箱連上仿真器才能重新燒寫,這樣在外場試驗時很不方便。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是:為了避免在燒寫程序的過程中對仿真器的依賴性,本發(fā)明提供了一種采用燒寫Monitor工程和外部離散量開關(guān)切換的原理,通過串口進行數(shù)據(jù)傳輸,實現(xiàn)了在脫離JTAG仿真器條件下APP端的基于TMS320C672x DSP的Flash芯片引導加載方法。
本發(fā)明采取的技術(shù)方案為:一種基于DSP的Flash芯片引導加載方法,其利用串口進行數(shù)據(jù)傳輸,先將一個監(jiān)控程序燒寫到Flash芯片前半部分中,然后重新上電自動運行這個監(jiān)控程序,在此監(jiān)控程序的操作過程中將應用程序燒寫進Flash芯片的后半部分;同時在外部硬件FPGA邏輯中設定外部離散量開關(guān),用于切換Flash芯片的前后部分,切換這個開關(guān)量到另一端,再重新上電即實現(xiàn)對應用程序的自啟動了,其中,所述監(jiān)控程序包含把Flash芯片中存放的應用程序代碼復制到DSP的RAM中的Bootloader程序。
所述的基于DSP的Flash芯片引導加載方法,其在上電復位之后,DSP會自動去搬移Flash芯片起始地址開始的1K字節(jié)內(nèi)容,這1K字節(jié)內(nèi)容搬移到DSP的內(nèi)部RAM起始地址開始的1K字節(jié)內(nèi)存中,當DSP開始執(zhí)行程序時,首先從內(nèi)部RAM的起始地址開始執(zhí)行程序,即開始執(zhí)行DSP的啟動程序Bootloader,而Bootloader把Flash芯片中存放的應用程序代碼復制到DSP的RAM中,當Bootloader程序在DSP的RAM中執(zhí)行完成后,所有的應用程序從Flash芯片復制到DSP的RAM中,然后DSP跳轉(zhuǎn)到復位中斷去執(zhí)行,開始執(zhí)行應用程序,實現(xiàn)了DSP的Flash芯片引導自啟動。
一旦監(jiān)控程序被燒寫進Flash芯片,就對Flash芯片的監(jiān)控程序內(nèi)容進行鎖定保護,以防止非法修改此監(jiān)控程序。
每次切換到監(jiān)控程序一端,自動運行監(jiān)控程序,在此完成應用程序的燒寫;切換到應用程序一端,即可自動運行應用程序。
所述的基于DSP的Flash芯片引導加載方法,其包含如下具體步驟,其中,監(jiān)控工程用Monitor端表示,應用工程用APP端表示:
步驟1 設置Monitor端加載方式
外部離散量開關(guān)設置為下載程序運行狀態(tài),即打開Monitor端的加載模式,并且引導模式設置為從Flash芯片引導;
步驟2 配置串口信息參數(shù)
在上位機上運行串口終端調(diào)試工具,該工具用于終端調(diào)試以及Monitor端的狀態(tài)信息顯示,設置正確的串口號和波特率配置參數(shù);
步驟3 目標機CPU寄存器初始化
Monitor對目標機CPU內(nèi)的EMIF、PLL和SDRAM寄存器進行初始化;
步驟4 燒寫Monitor端
連接JTAG仿真器,通過串口傳輸數(shù)據(jù)將Monitor端燒寫到Flash芯片中;
步驟5 運行Monitor端
斷電后,脫離JTAG仿真器,上電復位,自動運行Monitor端;
步驟6 燒寫APP端
在Monitor端工程的運行界面中,通過串口傳輸數(shù)據(jù)將APP端燒寫到Flash芯片中;
步驟7 設置APP端加載方式
外部離散量開關(guān)設置為應用程序運行狀態(tài),即打開APP端的加載模式,并且引導模式設置為從Flash芯片引導;
步驟8 運行APP端
斷電后,上電復位,自動運行APP端。
本發(fā)明具有有益效果:
本發(fā)明給出了一種基于DSP的Flash芯片引導加載方法的設計與實現(xiàn),該方法通過串口傳輸數(shù)據(jù)將Monitor燒寫到Flash芯片中,并利用Monitor將APP燒寫到Flash芯片中,實現(xiàn)了APP端脫離仿真器的燒寫和引導自啟動過程,不僅為嵌入式軟件的調(diào)試提供了方便,而且有助于嵌入式系統(tǒng)的軟硬協(xié)同設計開發(fā)。經(jīng)過試驗驗證是方便、穩(wěn)定和可靠的,并在工作使用中取得了滿意的效果,具有較大的實用性和應用價值。
附圖說明
圖1是本發(fā)明的基于TMS320C672x DSP的Flash芯片引導加載系統(tǒng)開發(fā)架構(gòu)圖;
圖2是本發(fā)明的Bootloader功能模塊結(jié)構(gòu)圖;
圖3是本發(fā)明的基于TMS320C672x DSP的Flash芯片引導加載具體流程圖。
具體實施方式
下面結(jié)合說明書附圖對本發(fā)明的具體實施方式做進一步說明。
在本發(fā)明的引導加載系統(tǒng)實例中,以TMS320C6727 DSP為例,通過在其導航計算機板上實施Flash芯片自啟動程序設計的改進方案,從而實現(xiàn)了一個全新的Flash芯片引導加載系統(tǒng)。該導航計算機板的資源主要包括以下幾部分:
(1)處理器:TMS320C6727,工作頻率:240MHz。
(2)程序存儲器(FLASH芯片):容量1M×16bit。
(3)數(shù)據(jù)存儲器(SDRAM):容量2M×32bit。
(4)在線程序存儲器加載能力:加載功能受“允許加載”控制,“允許加載”接地為“允許加載”,懸空為“禁止加載”。
(5)JTAG接口:程序在線調(diào)試及加載。
基于TMS320C672x的Flash芯片引導加載系統(tǒng)的設計實例中,主要包括兩個項目工程:監(jiān)控工程(Monitor端)和應用工程(APP端)。其系統(tǒng)開發(fā)架構(gòu)如圖1所示。無論哪一個工程,核心在于Bootloader程序的編寫。
Bootloader程序的功能就是把燒寫在Flash芯片中的程序代碼和有用信息全部復制到DSP內(nèi)存空間中去執(zhí)行,然后指向_c_int00中斷去執(zhí)行程序。由于本項目實例中APP端的應用程序代碼較大,必須被分配到外部SDRAM地址空間中,所以在Bootloader程序中必須初始化SDRAM和PLL。另外在Bootloader程序中必須實現(xiàn)從Flash芯片到RAM搬移數(shù)據(jù)的功能,這樣必然涉及到Flash芯片的讀寫操作。而在本項目實例中配置的是16MB的Flash芯片,由于TMS320C672x的地址總線只有13根,不足以尋址整個Flash芯片存儲空間,所以必須根據(jù)代碼的大小對Flash芯片進行翻頁操作。Bootloader程序的功能模塊結(jié)構(gòu)圖如圖2所示??偠灾贐ootloader程序中,我們實現(xiàn)了以下功能用于完成Flash芯片的引導加載:
(1)SDRAM的初始化:包括SDCR、SDRCR、SDTIMR和SDSRETR寄存器的初始化。
(2)PLL的初始化:通過配置PLL Control/Status Register(PLLCSR)、PLL Multiplier Control Register(PLLM)、PLL Wrapper Divider x Registers(PLLDIV0,PLLDIV1,PLLDIV2,PLLDIV3)這幾個寄存器就可以得到所需要的TMS320C6727內(nèi)核與EMIF時鐘。
(3)Flash芯片的翻頁操作:PDOUT0=W,其中W為頁碼,取值0到63。
(4)數(shù)據(jù)從Flash芯片到RAM的搬移:在本項目實例中,我們總共搬移了5個數(shù)據(jù)段,分別是:.vec,.text,.cinit,.const和.switch。這5個數(shù)據(jù)段統(tǒng)一放在copyTable中,將copyTable的定義放在另一個CMD匯編文件中的引導表段;在Bootloader程序中將copyTable作為外部變量進行引用,就可以有效地控制Bootloader程序的大小在1K字節(jié)之內(nèi),避免了需要進行兩次二次搬家才能將應用程序放在片外RAM運行的麻煩。
下面以Monitor端工程為例,具體講解一下基于TMS320C672x DSP的Flash芯片引導加載方法的具體實施過程。其流程圖如圖3所示。
(1)配置硬件環(huán)境
首先進行相應的硬件操作:仿真頭插上,仿真頭旁邊的兩個跳線接上(都接最左邊),開關(guān)打到OFF狀態(tài)。
(2)生成Monitor端燒寫文件
Monitor端的工程分為Monitor.LOAD和Monitor.FLASH兩個工程。
在CCS3.3環(huán)境中運行Monitor.LOAD工程,該工程實現(xiàn)了將Monitor通過串口傳輸燒寫到Flash芯片前半部分的功能。
在CCS3.3環(huán)境中運行Monitor.FLASH工程,生成目標碼文件DSP6727_MON_FLASH.out,運行批處理文件intel.bat,生成BOOT_MON.hex下載文件。
(3)配置串口信息參數(shù)
在上位機上運行串口終端調(diào)試工具,該工具用于終端調(diào)試以及Monitor端的狀態(tài)信息顯示,設置正確的串口號和波特率配置參數(shù)。
(4)目標機CPU寄存器初始化
Monitor對目標機CPU內(nèi)的EMIF、PLL和SDRAM寄存器進行初始化。
(5)燒寫Monitor端
在串口終端調(diào)試工具中,鍵入erase/a命令,進行Flash芯片擦除,出現(xiàn)erase ok說明擦除成功。然后鍵入write/m命令,進行Flash芯片編程,首先檢測期望編程的Flash芯片扇區(qū)群是否為空,為空則準備接收上位機的目標代碼,選擇第(2)步生成的BOOT_MON.hex下載文件進行接收,否則報錯退出。
(6)運行Monitor端
斷電后,首先進行相應的硬件操作:拔掉仿真頭,仿真頭旁邊的兩個跳線接上(都接最右邊),開關(guān)打到ON狀態(tài)。
再次上電復位,在串口終端調(diào)試工具中顯示Monitor端成功自啟動運行的狀態(tài)信息。
(7)生成APP端燒寫文件
APP端的工程分為APP.LOAD和APP.FLASH兩個工程。
在CCS3.3環(huán)境中運行APP.FLASH工程,生成目標碼文件DSP6727_APP_FLASH.out,運行批處理文件intel.bat,生成BOOT_APP.hex下載文件。
(8)燒寫APP端
在串口終端調(diào)試工具中,鍵入erase命令,進行Flash芯片擦除,出現(xiàn)erase ok說明擦除成功。然后鍵入write命令,進行Flash芯片編程,首先檢測期望編程的Flash芯片扇區(qū)群是否為空,為空則準備接收上位機的目標代碼,選擇第(7)步生成的BOOT_APP.hex下載文件進行接收,否則報錯退出。燒寫完成后,將APP通過串口傳輸燒寫到Flash芯片的后半部分。
(9)運行APP端
斷電后,首先進行相應的硬件操作:拔掉仿真頭,仿真頭旁邊的兩個跳線接上(都接最右邊),開關(guān)打到OFF狀態(tài)。
重新上電后,APP可直接自啟動運行。
基于以上方法可以看出,LOAD和FLASH工程完成的功能各不相同,LOAD用于仿真器調(diào)試,F(xiàn)LASH用于生成燒寫的目標碼文件,因此實際工作中,每個項目都可以同時創(chuàng)建好以上兩個工程,一個用于加載調(diào)試,一個用于固化Flash芯片。應用中可以同時打開,分別激活,加上生成下載目標代碼批處理文件,可以簡化操作、節(jié)省時間。