羅秋鳳,葉 慧,李 勇,高 源
(1.南京航空航天大學無人機研究院,江蘇南京 210016;2.南京航空航天大學自動化學院,江蘇南京 210016)
DSP28335嵌入式系統(tǒng)的SCI在線編程方法實現(xiàn)
羅秋鳳1,葉 慧2,李 勇2,高 源2
(1.南京航空航天大學無人機研究院,江蘇南京 210016;2.南京航空航天大學自動化學院,江蘇南京 210016)
為了解決嵌入式系統(tǒng)主流控制器DSP28335程序升級維護不便、成本高的問題,提出了一種通過異步串行通信接口SCI向片內(nèi)FLASH在線編程的方法。將特定的GPIO引腳狀態(tài)配置為SCI引導模式,DSP芯片上電自檢后調(diào)用BootLoader中的SCI_Boot函數(shù),將燒寫控制程序通過SCI口下載到片上SARAM,然后調(diào)用API功能函數(shù)將用戶程序固化到FLASH。實驗結(jié)果表明,該方法有效可行,簡單方便,可脫離JTAG仿真器進行操作,提高了傳輸距離,降低了成本。
DSP28335;SCI引導;API函數(shù);在線編程
DSP28335是TI公司新推出的一款具有強大的控制和信號處理能力的32位浮點型數(shù)字信號處理器[1],主頻高達150 MHz,片上集成了256 KWord的FLASH存儲器、34 KWord的SARAM,8 KWord的Boot ROM以及多種先進的外設,可廣泛應用于工業(yè)控制、移動通信、軍事安全等領域[2]。
隨著電子技術(shù)的發(fā)展和用戶需求的提升,對已投入使用的DSP嵌入式設備軟件的維護和更新也越來越頻繁,當進行程序升級時,要擦除芯片內(nèi)容并重新燒寫新的程序代碼和數(shù)據(jù)[3],通常使用TI公司的CCS燒寫插件并通過仿真器JTAG口對片上FLASH進行編程的方法[4-6]。雖然該方法簡單易用,但一般只是在程序的開發(fā)和調(diào)試階段使用,在復雜的工作環(huán)境中,直接取下設備、連接仿真器存在較大困難,或現(xiàn)場還存在不能拆開設備情況。因多數(shù)嵌入式設備都有通信端口如USB,CAN,SCI,SPI或無線通信口等,因此可通過通信端口對FLASH進行燒寫可以有效解決這個問題[7-10]。
本文在詳細介紹了DSP28335 SCI引導模式的上電加載思想和串口在線編程的原理后,研究了一種通過異步串行通信SCI口對片上FLASH進行燒寫的方法。
圖1 通過FLASH API燒寫DSP示意圖Fig.1 Diagram of DSP by FLASH API programmer
DSP片上FLASH存儲器中放置的是用戶/應用程序和初始化代碼,要實現(xiàn)嵌入式終端的在應用編程(IAP)功能,需要采用專門的定制方案,即利用TI公司提供的應用程序接口庫(API)[11]文件,其中包含用于對FLASH及一次性編程單元OTP進行操作的各種函數(shù),利用API函數(shù)進行擦除、編程和校驗FLASH的方法如圖1所示。
1.1擦除函數(shù)Erase( )
擦除FLASH時每次最小只能擦除一個扇區(qū),不能對其中的某一位進行擦除,剩余沒有指定的扇區(qū)內(nèi)容保持不變。
函數(shù)原型(Defined inFlash2833x_API_Library.h)
extern Uintl6 Flash2833x _Erase
(Uintl6 SectorMask,//定義標示位來指示擦除的扇區(qū);
FLASH_ST *FeraseStat,//定義FLASH結(jié)構(gòu)的狀態(tài)指針FeraseStat,執(zhí)行擦除操作后狀態(tài)返回值,判斷操作是否成功;)。
1.2編程函數(shù)Program( )
該函數(shù)對用戶指定的FLASH扇區(qū)或一次性編程單元OTP上進行編程,編程時將位由1變?yōu)?,一次編程一個字存儲單元。
函數(shù)原型(Defined inFlash2833x_API_Library.h)
extern Uintl6 Flash2833x_Program
(Uintl6 *FlashAddr //定義指向需要燒寫到FLASH或OTP區(qū)域的起始地址指針;
Uintl6 *BufAddr //定義程序當前存放在內(nèi)存RAM空間的首地址指針;
Uint32 Length //定義編程到FLASH或OTP的16位數(shù)據(jù)的總長度;
FLASH_ST *FprogStatus //定義FLASH結(jié)構(gòu)的狀態(tài)指針,返回FLASH的燒寫狀態(tài);)。
1.3校驗函數(shù)Verify( )
因為編程函數(shù)在燒寫時自身已經(jīng)進行過狀態(tài)反饋校驗,因此該函數(shù)是在編程結(jié)束后進行的完整性校驗。實際上就是將接收緩沖區(qū)(RAM空間)和FLASH或OTP中寫入的數(shù)據(jù)進行比較,如果完全相同,就表明終端已將接收緩沖區(qū)中的數(shù)據(jù)全部正確地寫入了FLASH中。
函數(shù)原型(Defined inFlash2833x_API_Library.h)
extern Uintl6 Flash2833x_Verify
Uintl6 *startAddr //定義指向已經(jīng)燒寫的FLASH或OTP區(qū)域的起始地址指針
Uintl6 *BufAddr //定義程序搬移到內(nèi)存RAM空間的首地址指針
Uint32 Length //定義編程到FLASH或OTP的16位數(shù)據(jù)的總數(shù)長度
FLASH_ST *FVerifyStatus //定義FLASH結(jié)構(gòu)的狀態(tài)指針,返回FLASH的校驗狀態(tài)
通常要實現(xiàn)IAP功能還需要一個獨立的存儲器,這是由FLASH的特性決定的。當對FLASH進行編程操作時,整個FLASH會被加上高于普通工作電壓的編程電壓,致使對FLASH讀取不穩(wěn)定,系統(tǒng)無法在該FLASH空間中運行。
考慮到API函數(shù)的調(diào)用需遵循嚴格的時序要求,否則不能實現(xiàn)功能[12]。DSP28335帶有34 KWord×16位的片上RAM,在讀寫訪問時可以全速運行,即等待周期為零,因此把FLASH API函數(shù)加載到片上RAM空間執(zhí)行是切實可行的。同時,RAM中要留有足夠空間,以便存放復制到RAM中的FLASH編程函數(shù)。且編程不是實時進行,從上位機接收到的待編程的用戶代碼必須先放入緩沖區(qū),所以還需要在RAM中分配一個足夠大的空間用于保存接收到的編程代碼。以DSP28335為核心處理器的終端完全具備開發(fā)IAP系統(tǒng)的硬件條件。圖2說明了3種裝載FLASH API的方法。
圖2 3種裝載FLASH API的方法Fig.2 Three methods to load the FLASH API library
由于API算法嵌入在燒寫控制程序(KPL)中,通過KPL調(diào)用API算法來進行對FLASH的操作。
方法A:通過JTAG口將KPL代碼直接下載到片上RAM,這種方法主要是通過CCS/仿真器或SDFLASH軟件實現(xiàn)。
方法B:通過SCI,SPI,Parallel,I2 C,eCAN中的任何一種BootLoader將KPL從片外空間直接下載到片上SARAM。
方法C:將KPL燒寫固化到FLASH,OTP或XINTF中,編程前將需要執(zhí)行FLASH編程任務的API函數(shù)復制到獨立的存儲器SARAM內(nèi),然后從其中運行,再燒寫FLASH操作。
這3種方法中,方法B和方法C都能滿足系統(tǒng)遠程升級的要求。為了簡單方便,本文討論的是用方法B來燒寫FLASH。
引導加載程序BootLoader是位于片內(nèi)Boot ROM中的一段用于引導的程序,在系統(tǒng)上電復位后才會執(zhí)行,從而完成一系列的初始化和引導操作[13-14]。BootLoader包含了一系列的引導加載器函數(shù),用來將預先存儲到外部非易失的存儲介質(zhì)的代碼拷貝到快速的存儲介質(zhì)片上RAM中,并自動執(zhí)行。
為了滿足不同系統(tǒng)的需求,BootLoader提供了16種可選擇的引導模式,BootLoader通過查詢GPIO12,GPIO13,GPIO14,GPIO15這4個通用I/O引腳的狀態(tài),判斷選擇相應的引導模式。本文通過串口實現(xiàn)軟件編程和升級,將模式選擇端口配置為SCI-A啟動模式。
3.1SCI引導啟動流程
系統(tǒng)上電復位完成后,首先調(diào)用BootLoader中的第1個初始化引導程序(InitBoot),該程序主要把器件初始化成C28X工作模式,然后讀取安全代碼模塊的密碼,如果CSM密碼被擦除(全1)則自動解鎖,否則CSM仍被鎖定。對密碼讀取完成后,BootLoader將調(diào)用SelectBootMode(引導模式選擇)函數(shù),該函數(shù)將4個通用I/O引腳配置為輸入,然后檢測引腳的狀態(tài),依次進行選擇判斷,確定為SCI-A引導模式后,SCI_Boot(SCI-A引導加載器)函數(shù)將從外部設備復制數(shù)據(jù)到DSP的片上SARAM存儲介質(zhì)中,程序下載完成后返回輸入數(shù)據(jù)流決定的入口地址,以便引導結(jié)束后執(zhí)行應用程序,SCI引導啟動流程如圖3所示。
圖3 SCI引導啟動流程Fig.3 SCI boot procedure
3.2SCI引導加載過程
綜上所述,BootLoader通過異步方式將代碼數(shù)據(jù)從SCI-A傳輸?shù)狡瑑?nèi)存儲器是整個引導流程的關鍵和核心。
BootLoader選擇SCI引導模式后,開始了引導加載流程:SCI_Boot函數(shù)將主機發(fā)送的第一個字和8位數(shù)據(jù)流的關鍵字0x08AA進行比較,匹配有效后開始按一定順序重復讀入傳輸?shù)拿總€數(shù)據(jù)塊內(nèi)容,一旦檢測到數(shù)據(jù)塊大小等于0,就表示所有數(shù)據(jù)塊下載完成,然后指向BootLoader的指針將跳轉(zhuǎn)到由數(shù)據(jù)流中確定的程序入口地址處,接著開始執(zhí)行應用程序,基本流程圖如圖4所示。
SCI下載模式是一種異步傳輸方式,只支持8位數(shù)據(jù)流格式,其通用結(jié)構(gòu)如表1所示。
圖4 SCI_Boot程序加載的執(zhí)行流程Fig.4 Execution flow of SCI_Boot program loader
表1 8位數(shù)據(jù)結(jié)構(gòu)
為了能夠使用DSP28335的BootLoader功能,首先必須制作包含BootLoader所需的完整數(shù)據(jù)流的引導表,建立引導表的總體步驟如下。
4.1COFF文件生成
TI公司提供的DSP集成開發(fā)環(huán)境CCS[15]對整個工程文件進行編譯、鏈接后生成.out為后綴的二進制通用對象文件格式(COFF)文件。它有著復雜的結(jié)構(gòu),不僅包含了以段的形式組織的代碼和數(shù)據(jù),而且還包含了文件頭、符號表、段地址、初始化段入口等信息,但是該文件格式的模塊化結(jié)構(gòu)與實際的內(nèi)存存儲區(qū)間不匹配,不能直接用來加載到RAM或?qū)懭隖LASH,需要將其轉(zhuǎn)換成內(nèi)存能識別的數(shù)據(jù)格式(二進制文件.BIN)。
4.2HEX文件生成
HEX文件是指機器代碼的十六進制文件,并且是用一定格式的ASCII碼來表示。對于2000系列的DSP,TI公司提供了文件格式轉(zhuǎn)換工具hex2000.exe,可將COFF格式轉(zhuǎn)化成HEX格式。具體格式如下:ASCII HEX,Extened Tektronix,Intel MCS-86(tatel),Motorola-S,TI-Tagged。
進行十六進制轉(zhuǎn)換可以通過單條命令再加各種選項的方法實現(xiàn),也可以將命令和有關選項匯總到一個文件(稱為命令文件)中,然后再利用該文件完成十六進制轉(zhuǎn)換。
4.2.1 命令文件建立
以Intel MCS-86(tatel)為例給出燒寫控制程序KPL的命令文件編寫格式:
-KPL.out //被轉(zhuǎn)換的輸入文件,由CCS產(chǎn)生
-memwidth 16 //16位存儲器系統(tǒng)
-datawidth 32 //DSP的字長32位
-boot //將程序中的各段都轉(zhuǎn)換到引導表
-sci8 //8位數(shù)據(jù)寬度的SCI引導格式
-map KPL-hex.map //數(shù)據(jù)流對應的map地址文件
-o KPL.hex //生成的數(shù)據(jù)流文件名為KPL.hex
-i //輸出文件為INTEL格式
保存到hex2000.exe所在的文件夾目錄,并將文件命名。文件名: KPL-hex.cmd,然后從開始菜單—運行—cmd,輸入命令文件hex2000.exe KPL-hex.cmd,運行即可生成KPL.hex文件。生成的HEX文件格式如圖5所示。
圖5 Intel HEX格式Fig.5 Intel HEX format
4.2.2 Intel HEX格式解析
Intel HEX文件是記錄文本行的ASCII文本文件,在Intel HEX文件中,每一行是一個HEX記錄,由十六進制數(shù)組成的機器碼或者數(shù)據(jù)常量。
以第1行為例,來解析該文件,“:”號表示一行的開始,第1,2個字符表示本行包含數(shù)據(jù)的長度0x20即32個;第3~6個字符表示數(shù)據(jù)存儲的起始地址,這里表示從0x0000地址開始存儲32個字符數(shù)據(jù);第7,8個字符0x00即為普通數(shù)據(jù)記錄類型;之后的32個字符就是本行包含的數(shù)據(jù),每兩個字符表示一個字節(jié)數(shù)據(jù),總共有16個字節(jié)。
4.3BIN文件生成
BIN文件是按照“順序格式”表示的二進制機器代碼,由于HEX文件中數(shù)據(jù)域ASCII碼表示的十六進制與二進制是一一對應的,這些二進制數(shù)據(jù)應串行地保存在程序空間。
選用的平臺是DSP28335,使用FLASH,RAM作為程序/數(shù)據(jù)存儲器,因為DSP的存儲字長是16 bit,所以4個十六進制ASCII碼表示一條機器指令或者地址。根據(jù)HEX文件的協(xié)議格式,在VC6.0平臺上開發(fā)了HEX文件到BIN文件轉(zhuǎn)換程序,原理是從文件中依次讀出字符,根據(jù)“:”判斷每行的開始,然后每兩位ASCII碼字符轉(zhuǎn)換成一個十六進制字節(jié)數(shù),然后將該字節(jié)數(shù)重新以ASCII碼形式保存。這時生成的代碼數(shù)據(jù)是內(nèi)存可以識別的可執(zhí)行代碼,可以通過FLASH讀寫函數(shù)寫到用戶指定的地址空間中,從而實現(xiàn)在線編程。
圖6 BIN格式Fig.6 BIN format
以嵌入式DSP28335最小系統(tǒng)核心板為測試平臺,通過串口連接線將上位機和核心板對接,上電前設定I/O引腳GPIO15=1,GPIO14=1,GPIO13=1,GPIO12=0,配置為SCI-A引導模式。打開上位機在線編程調(diào)試軟件,設置異步串口通信方式為波特率115 200 bps,8位數(shù)據(jù)位,無校驗,1個停止位。
實驗開始前,先運行上位機在線編程調(diào)試界面,點擊打開文件按鈕,選擇保存的KPL.hex,對該文件進行格式轉(zhuǎn)換,生成的KPL.bin文件格式(以十六進制顯示)如圖6所示。
該文件可存儲為.txt文本格式,里面詳述了關鍵字、保留位、入口地址、數(shù)據(jù)塊存儲地址、數(shù)據(jù)塊長度、數(shù)據(jù)字等信息,即為符合數(shù)據(jù)流加載的標準和要求的引導表。
DSP上電后,調(diào)試界面打開KPL.bin文件,并選擇發(fā)送到RAM空間,傳輸成功后KPL開始運行并接管CPU的控制權(quán),等待PC機握手指令并反饋應答信號。握手成功后,接收PC機發(fā)送的用戶程序的BIN文件,根據(jù)選擇的FLASH扇區(qū)調(diào)用API擦寫函數(shù),對用戶程序進行編程,若校驗通過則FLASH燒寫成功,如圖7所示。
本實驗中,燒寫的程序為控制GPIO1口輸出占空比為1/3的PWM脈沖波形。當程序燒寫結(jié)束后,將GPIO15,GPIO14,GPIO13,GPIO12引腳配置為FLASH引導模式,重新上電后發(fā)現(xiàn)GPIO1有規(guī)律地輸出預期的波形,通過觀察示波器捕捉到的波形如圖8所示。
圖7 擦除、燒寫及校驗成功后狀態(tài)Fig.7 Success staus of erasing, programming and verification
圖8 GPIO1引腳波形Fig.8 GPIO1 pin waveform
系統(tǒng)介紹了通過串口實現(xiàn)DSP28335程序在線編程的原理、軟硬件框圖以及步驟流程,提出了一種可以脫離仿真器,只需要一根串口電纜便可以完成DSP程序固化的方法。在TMS320F28335最小系統(tǒng)的實驗電路板上進行了測試驗證,結(jié)果表明該方案正確可行、便于操作,在工程應用中具有重要的實際意義,并對TI公司其他系列DSP系統(tǒng)的FLASH編程具有很強的通用性和借鑒價值。如果應用程序代碼較大,而片上RAM,F(xiàn)LASH空間有限,燒寫過程用戶代碼無法緩存到片內(nèi)RAM,而后再完全編程至片內(nèi)FLASH中時,則須擴展外部RAM和FLASH等存儲器,修改燒寫引導程序中的CMD文件中的地址空間分配代碼即可。
/
[1] Texas Instruments.TMS320F28335 Digital Signal Controllers Data Manual[M].[S.l.]:[s.n.],2007.
[2] 蘇奎峰, 呂 強, 鄧志東,等.TMS320X28XXX原理與開發(fā)[M].北京:電子工業(yè)出版社,2009.
SU Kuifeng, LYU Qiang, DENG Zhidong. Principles and Development of TMS320X28XXX[M]. Beijing: Publishing House of Electronics Industry, 2009.
[3] 黃正謹. 在線系統(tǒng)編程技術(shù)及其應用[M]. 南京:東南大學出版社,2007.
HUANG Zhengjin. Online System Programming Technology and Its Application[M].Nanjing: Southeast University Press, 2007.
[4] 孫 軼,許少尉.TMS320F2812芯片的FLASH燒寫技術(shù)[J].航空計算技術(shù), 2006, 36(5):46-49.
SUN Yi, XU Shaowei. TMS320F28l2 on-chip FLASH programming technique [J]. Aeronautical Computing Technique,2006, 36(5):46-49.
[5] 李 靜,張樹團. TMS320F2812片內(nèi)FLASH在線燒寫技術(shù)研究[J].國外電子元器件,2008,10(6):34-37.
LI Jing,ZHANG Shutuan. Research on on-line programming techniques for FLASH in TMS320F2812[J]. International Electronic Elements,2008, 10(6):34-37.
[6] 陳若珠, 胡金平, 李戰(zhàn)明. TMS320VC5509在線燒寫Flash并自舉啟動方法研究[J].微型機與應用, 2011, 30(2):9-11.
CHEN Ruozhu,HU Jinping,LI Zhanming.Research of on-line programming external Flash and bootloading based on TMS320VC5509 [J]. Microcomputer & Its Applications, 2011, 30(2):9-11.
[7] 張 祿,張興敢,柏業(yè)超,等.便攜式可在線編程雷達信號模擬器[J].南京大學學報(自然科學版), 2010,46(4): 359-365.
ZHANG Lu,ZHANG Xinggan,BAI Yechao,et al. A portable and online programmable radar signal simulator[J].Journal of Nanjing University (National Science), 2010,46(4):359-365.
[8] 張 艷, 鮑可進. 整車控制器BootLoader的設計與實現(xiàn)[J].計算機工程,2011,37(12): 233-235.
ZHANG Yan, BAO Kejin.Design and implementtion of BootLoader for vehicle control unit [J]. Computer Engineering, 2011,37(12): 233-235.
[9] 徐 佩,向靜波.基于F2812的多處理器串行加載系統(tǒng)設計[J].航空計算技術(shù),2011,41(4):98-101.
XU Pei,XIANG Jingbo.Design of serial loading system for multiprocessor based on F2812[J]. Aeronautical Computer Technique,2011,41(4):98-101.
[10] 馬喜強,劉維亞,鄭喜鳳.基于多通信方式實現(xiàn)DSP程序在線編程[J].電子器件, 2013,36(1): 112-115.
MA Xiqiang, LIU Weiya,ZHENG Xifeng.On-line programming of DSP based on multiple communications [J]. Electron Devices,2013,36(1):112-115.
[11] Texas Instruments. TMX320F281x Flash API Rev[M].[S.l.]:[s.n.], 2007.
[12] 林志貴,鐘晴晴.HCS08系列FLASH在線編程方法比較與分析[J].天津工業(yè)大學學報,2011,30(5): 71-75.
LIN Zhigui,ZHONG Qingqing.Analysis and comparison of in-circuit programming for FLASH in HCS08Mcu family [J]. Journal of Tianjin Polytechnic University ,2011,30(5): 71-75.
[13] Texas Instruments. TMS320F2833x Boot ROM Reference Guide[M].[S.l.]:[s.n.], 2008.
[14 ] 殷樹明, 王宜懷. 嵌入式系統(tǒng)中多用戶程序在線編程技術(shù)[J].計算機工程,2009,35(5):37-39.
YIN Shuming, WANG Yihuai. Technology of multi-program in-circuit programming in embedded system[J]. Computer Engineering, 2009, 35(5):37-39.
[15] Texas Instruments.TMS320C28x Optimizing C/C++Compiler User's Guide[M].[S.l.]:[s.n.],2009.
SCI online programming for DSP28335 embedded system
LUO Qiufeng1, YE Hui2, LI Yong2, GAO Yuan2
(1.Department of UAV, Nanjing University of Aeronautics & Astronautics, Nanjing Jiangsu 210016, China; 2.Department of Automation, Nanjing University of Aeronautics & Astronautics, Nanjing Jiangsu 210016, China)
In order to solve the problems of maintenance inconvenience and higher cost in the mainstream embedded DSP28335 system, this paper proposes an online on-chip FLASH programming method through asynchronous serial communication interface (SCI),. The particular state of the GPIO pins is configured as a SCI boot mode and the DSP chips calls SCI_Boot function of BootLoader after power-on self-test, Then, the burning control program is downloaded to the on-chip SARAM by the SCI_interface and calls the API functions to the user program to burned into the FLASH. The experiment shows that the method is effective and feasible, simple and convenient, can be broken away from the JTAG emulator for operation, which has improved the transmission distance and reduced the costs.
DSP28335; SCI_Boot; API function; online programming
1008-1542(2013)04-0318-07
10.7535/hbkd.2013yx04012
TP311
A
2013-04-11;
2013-05-27;責任編輯:李 穆
羅秋鳳(1970-),女,江西吉安人,高級工程師,碩士,主要從事無人飛行器相關的自動檢測與故障診斷方面的研究。
E-mail:YQWL2002@126.com