蔣 龍,劉 兵,羅小華
(1.浙江大學(xué)超大規(guī)模集成電路設(shè)計(jì)研究所,杭州310000;
2.杭州中天微系統(tǒng)有限公司軟件研發(fā)部,杭州310012)
基于調(diào)試器的通用Flash在線編程系統(tǒng)
蔣 龍1,劉 兵2,羅小華1
(1.浙江大學(xué)超大規(guī)模集成電路設(shè)計(jì)研究所,杭州310000;
2.杭州中天微系統(tǒng)有限公司軟件研發(fā)部,杭州310012)
在嵌入式系統(tǒng)中,Flash是經(jīng)常使用的只讀存儲(chǔ)方式。針對(duì)目前Flash在線編程接口形式較多、軟件通用性不強(qiáng)的現(xiàn)狀,利用嵌入式調(diào)試技術(shù)實(shí)現(xiàn)一種通用Flash在線編程系統(tǒng)。通過(guò)定義特定Flash在線編程驅(qū)動(dòng)程序封裝不同F(xiàn)lash在線編程細(xì)節(jié),并在基于Eclipse的集成開發(fā)環(huán)境下封裝整個(gè)系統(tǒng)。系統(tǒng)內(nèi)部復(fù)用現(xiàn)有的嵌入式調(diào)試軟件工具,與嵌入式目標(biāo)端的Flash驅(qū)動(dòng)程序配合,可實(shí)現(xiàn)Flash在線編程的功能。在使用方面,該系統(tǒng)呈現(xiàn)給用戶一個(gè)操作簡(jiǎn)單、可視化強(qiáng)的軟件操作界面;在功能方面,通過(guò)定制Flash驅(qū)動(dòng)程序,該系統(tǒng)對(duì)目前業(yè)內(nèi)主流Flash進(jìn)行在線編程,具有在線編程的通用性。
嵌入式系統(tǒng);Flash在線編程;調(diào)試器;Eclipse插件;集成開發(fā)環(huán)境;軟件復(fù)用
對(duì)于嵌入式系統(tǒng)來(lái)說(shuō),Flash幾乎成為必不可少的硬件單元,因此Flash的在線編程在嵌入式開發(fā)中是非常重要的一個(gè)環(huán)節(jié)[1]。目前業(yè)界對(duì)Flash的在線編程接口千差萬(wàn)別,每個(gè)廠商的Flash編程方式各有不同,相同的嵌入式平臺(tái),針對(duì)不同的Flash單元要做不同的定制[2]。這種情況顯然不利于嵌入式開發(fā)效率的提高。
目前,針對(duì)Flash在線編程的研究普遍集中在底層硬件的實(shí)現(xiàn)層面,對(duì)于嵌入式軟件開發(fā)的效率提升完全沒有考慮[3]。文獻(xiàn)[1]介紹了一種基于JTAG實(shí)現(xiàn)的Flash編程方法,利用芯片SRAM區(qū)域作為數(shù)據(jù)緩沖區(qū),通過(guò)JTAG進(jìn)行控制,最終實(shí)現(xiàn)Flash編程。整體方案較好,不足之處在于需要較多的硬件單元。文獻(xiàn)[2]同樣是基于JTAG的Flash編程實(shí)現(xiàn),通過(guò)專用的硬件目標(biāo)板去控制原有的CPU core中的JTAG邏輯模塊,通過(guò)PC端軟件實(shí)現(xiàn)對(duì)Flash的編程,整體的軟硬件代價(jià)都相對(duì)高。文獻(xiàn)[4]的問(wèn)題在于整個(gè)論述都是對(duì)TMS320F2812芯片的理論研究,沒能提出一種更為通用的方式。
針對(duì)目前Flash編程接口形式多變對(duì)嵌入式軟件開發(fā)帶來(lái)的不便[4],本文設(shè)計(jì)并實(shí)現(xiàn)一套通用的Flash在線編程系統(tǒng)。該系統(tǒng)利用現(xiàn)有嵌入式調(diào)試通道,將頂層Eclipse集成開發(fā)環(huán)境與運(yùn)行在嵌入式目標(biāo)端RAM中的Flash驅(qū)動(dòng)整合,最終實(shí)現(xiàn)各種Flash在線編程的功能。整體方案只需要嵌入式端極小RAM(小于1 KB)的硬件開銷(一般嵌入式系統(tǒng)都可以滿足該RAM要求),可解決嵌入式Flash在線編程的通用性問(wèn)題[5],提高嵌入式軟件開發(fā)中Flash在線編程的效率。
2.1 整體框架及原理描述
通用Flash在線編程系統(tǒng)的核心原理在于:通過(guò)用戶自定義Flash驅(qū)動(dòng),封裝不同F(xiàn)lash編程接口,利用嵌入式調(diào)試工具,將驅(qū)動(dòng)加載到嵌入式目標(biāo)板RAM中,然后運(yùn)用斷點(diǎn)(break)、寫內(nèi)存(restore)和運(yùn)行(continue)等基本調(diào)試命令,通過(guò)對(duì)驅(qū)動(dòng)程序的控制,完成對(duì)Flash硬件的在線編程工作。Eclipse集成開發(fā)環(huán)境的功能是封裝了調(diào)試工具的調(diào)試過(guò)程,為用戶提供一個(gè)Flash編程操作界面。整個(gè)系統(tǒng)如圖1所示。
圖1 通用Flash在線編程系統(tǒng)框圖
運(yùn)行在嵌入式目標(biāo)端RAM空間的Flash驅(qū)動(dòng)程序封裝了Flash編程接口的細(xì)節(jié),該程序在整個(gè)系統(tǒng)中始終處于被調(diào)試的狀態(tài),調(diào)試器發(fā)送調(diào)試命令,控制Flash驅(qū)動(dòng)程序,完成Flash的在線編程。
2.2 模塊功能說(shuō)明
2.2.1 Flash驅(qū)動(dòng)模塊
整個(gè)系統(tǒng)的核心在于Flash驅(qū)動(dòng)程序的設(shè)計(jì),驅(qū)動(dòng)模塊需要完成2個(gè)功能:(1)為Flash編程用戶提供通用Flash編程接口;(2)向調(diào)試器提供一組控制接口,使得調(diào)試器能夠通過(guò)基本的調(diào)試命令來(lái)實(shí)現(xiàn)對(duì)Flash編程的控制。整個(gè)模塊如圖2所示。
在該模塊中,用戶自定義部分需要由Flash編程用戶根據(jù)具體的Flash器件特性實(shí)現(xiàn)。通過(guò)這種方式,可以實(shí)現(xiàn)Flash編程的通用性。通用接口及含義見表1。
圖2 Flash驅(qū)動(dòng)模塊框圖
表1 驅(qū)動(dòng)模塊通用Flash編程接口說(shuō)明
調(diào)試器控制接口給出的是一些全局符號(hào),如表2所示。調(diào)試器可以在驅(qū)動(dòng)程序處于調(diào)試狀態(tài)時(shí),讀寫這些全局符號(hào),從而準(zhǔn)確地控制Flash驅(qū)動(dòng)程序,實(shí)現(xiàn)通用Flash在線編程的操作[6]。
表2 驅(qū)動(dòng)模塊調(diào)試器控制接口說(shuō)明
當(dāng)驅(qū)動(dòng)處于調(diào)試狀態(tài)下時(shí),Flash編程事件輪詢單元利用調(diào)試器控制接口的信息來(lái)調(diào)用不同的Flash編程接口,實(shí)現(xiàn)Flash的讀寫、擦除等操作[7]。
2.2.2 調(diào)試器模塊
調(diào)試器模塊雖然在系統(tǒng)中非常重要,但本文系統(tǒng)只是使用調(diào)試器的最基本的調(diào)試操作,這也是本文系統(tǒng)的一個(gè)優(yōu)點(diǎn):最大限度實(shí)現(xiàn)了軟件復(fù)用[8]。表3給出系統(tǒng)工作時(shí)調(diào)試器的基本命令以及作用。
表3 系統(tǒng)使用的基本調(diào)試命令說(shuō)明
通過(guò)使用上述命令,調(diào)試器可以準(zhǔn)確控制目標(biāo)端RAM中運(yùn)行的Flash驅(qū)動(dòng)的運(yùn)行流程,從而實(shí)現(xiàn)Flash編程操作,該過(guò)程如圖3所示。可以看出,涉及到的調(diào)試操作全部是嵌入式調(diào)試中經(jīng)常使用的基本調(diào)試操作,因此,對(duì)于調(diào)試器模塊來(lái)說(shuō),在整個(gè)系統(tǒng)中,并沒有任何的擴(kuò)展,完全實(shí)現(xiàn)了軟件復(fù)用。
圖3 調(diào)試器模塊控制流程
2.2.3 Eclipse模塊
Eclipse模塊將調(diào)試驅(qū)動(dòng)的細(xì)節(jié)進(jìn)行了封裝。具體來(lái)說(shuō),該模塊負(fù)責(zé)提供給用戶一個(gè)Flash編程操作界面,并將調(diào)試器模塊使用到的基本調(diào)試命令進(jìn)行后臺(tái)封裝[9]。
在界面上,僅提供給用戶Flash編程的操作;在后臺(tái),將調(diào)試流程進(jìn)行封裝;這種做法可以做大限度地避免將本系統(tǒng)的原理暴露給Flash編程的用戶,符合軟件封裝原則[10]。
3.1 嵌入式環(huán)境
本文系統(tǒng)的實(shí)現(xiàn)環(huán)境:嵌入式硬件平臺(tái)是杭州中天微系統(tǒng)有限公司的32位高性能嵌入式CPU CK610,并使用基于該芯片的SoC平臺(tái),該平臺(tái)使用了SPANSION公司S29GL-N型號(hào)Nor Flash的只讀器件;嵌入式軟件平臺(tái)方面,調(diào)試器部分使用杭州中天微系統(tǒng)有限公司的嵌入式CK-GDB,以及基于Eclipse的集成開發(fā)環(huán)境 C-Sky Development Suite (CDS)。本文首先針對(duì)Nor Flash編寫驅(qū)動(dòng)程序,然后在CDS平臺(tái)上進(jìn)行插件開發(fā),完成通用Flash在線編程系統(tǒng)的設(shè)計(jì)。
3.2 Flash驅(qū)動(dòng)框架設(shè)計(jì)實(shí)現(xiàn)
驅(qū)動(dòng)框架的設(shè)計(jì)嚴(yán)格按照原理闡述,結(jié)合圖2所示的 Flash驅(qū)動(dòng)模塊框圖,在驅(qū)動(dòng)工程中,通用Flash編程接口需要由具體的Flash編程用戶來(lái)實(shí)現(xiàn),而調(diào)試器控制接口是確定的,而且盡量避免暴露給用戶,因此本文在實(shí)現(xiàn)中將兩部分代碼放在了不同的源文件中[11]。整個(gè)驅(qū)動(dòng)工程的文件目錄如圖4所示。
這里crt0.S是啟動(dòng)文件,ckcpu.ld是鏈接腳本,而gdb.init文件是gdb的啟動(dòng)腳本。這3個(gè)文件是嵌入式工程必備文件。
圖4 驅(qū)動(dòng)工程目錄
本文將調(diào)試器控制接口以及Flash編程事件輪詢單元放在了main.c文件中,并使注釋main.c文件是只讀文件;而需要用戶自定義的通用Flash編程接口全部放到driver.c文件中,該文件是需要用戶根據(jù)具體的Flash硬件單元來(lái)自定義完成的。
事件輪詢單元(main.c文件)的核心代碼如下:
上述代碼是整個(gè)驅(qū)動(dòng)程序的核心代碼,調(diào)試器通過(guò)驅(qū)動(dòng)提供的全局控制變量對(duì)控制while循環(huán)的流程。
3.3 Eclipse插件設(shè)計(jì)實(shí)現(xiàn)
本文通過(guò)Eclipse插件開發(fā)技術(shù),為用戶實(shí)現(xiàn)了一個(gè)Flash編程的GUI,最終用戶在實(shí)際使用中是通過(guò)該GUI,一鍵操作完成對(duì)Flash的編程的。
具體來(lái)說(shuō),需要對(duì)Eclipse的擴(kuò)展點(diǎn)進(jìn)行擴(kuò)展,然后在此擴(kuò)展點(diǎn)上進(jìn)行GUI后臺(tái)邏輯封裝工作。
插件開發(fā)核心代碼如下:
通過(guò)xml方式對(duì)Eclipse進(jìn)行了擴(kuò)展點(diǎn)開發(fā),后續(xù)僅需要完成實(shí)現(xiàn)該擴(kuò)展點(diǎn)的類:com.csky.cds.Flash.ui.FlashUIHandler即可,鑒于篇幅,本文不在此贅述。
本文使用CDS提供的demo程序作為演示程序,使用上文實(shí)現(xiàn)的Flash插件開發(fā)界面進(jìn)行Flash編程操作,將demo燒寫到基于CK-CPU的SoC平臺(tái)的Nor Flash空間中。最終在Eclipse界面上顯示“Programmed successfully“,見圖5中圓圈圈出部分。
圖5 Eclipse上Flash燒寫成功界面
為驗(yàn)證是否如界面所示,將嵌入式目標(biāo)板串口連接至電腦,重新上電,發(fā)現(xiàn)電腦串口顯示“Hello,CSky!”的預(yù)期結(jié)果。這說(shuō)明嵌入式目標(biāo)端Nor Flash對(duì)應(yīng)空間確實(shí)已經(jīng)被正確燒寫了。從而證明了該通用Flash在線編程系統(tǒng)的正確性[12]。
本文提出了一種通用的Flash在線編程的方法,通過(guò)定義Flash驅(qū)動(dòng)程序封裝了不同F(xiàn)lash的在線編程細(xì)節(jié),采用現(xiàn)有的嵌入式調(diào)試手段,最終在Eclipse層面上將該方法的原理進(jìn)行封裝,為用戶呈現(xiàn)一個(gè)可視化的Flash編程界面,實(shí)現(xiàn)了Flash在線編程的通用性。該方法也大幅提高了嵌入式Flash在線編程的速度。但在本文系統(tǒng)中,Flash驅(qū)動(dòng)模塊源代碼會(huì)將原理細(xì)節(jié)暴露給用戶,這不符合軟件封裝原則。在下一步工作中,對(duì)于Flash驅(qū)動(dòng)的模塊,可以考慮使用庫(kù)的形式將這些細(xì)節(jié)封裝起來(lái),只將通用Flash編程接口的實(shí)現(xiàn)交給用戶,做到完全的封裝。
[1] 陳 超,沈海斌.基于JTAG的可重構(gòu)Flash快速編程方法[J].計(jì)算機(jī)工程,2010,36(17):280-282,285.
[2] 吳玉香,周建香.基于JTAG的Flash在線編程系統(tǒng)實(shí)現(xiàn)[J].化工自動(dòng)化及儀表,2009,36(6):70-74.
[3] 李 靜,張樹團(tuán).TMS320F2812片內(nèi)Flash在線燒寫技術(shù)研究[J].國(guó)外電子元器件,2008,10:37-38,40.
[4] 董相暉,張志敏.一種基于EJTAG快速在線燒寫Flash的設(shè)計(jì)[J].微電子學(xué)與計(jì)算機(jī),2007,24(12):106-108.
[5] 李 慧,周 明.JTAG模式下的MPC5554外部FLASH編程的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2009,32(2): 76-79,83.
[6] 趙海艦,甘 萌.嵌入式系統(tǒng)中的Flash編程技術(shù)研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2005,26(11):3006-3009.
[7] 陸林燕,王魯靜,鄭正奇.NAND FLASH編程實(shí)現(xiàn)研究分析[J].計(jì)算機(jī)技術(shù)與發(fā)展,2008,18(3):118-120,124.
[8] 黃冰峰,游志宇,杜 楊,等.基于SoPC目標(biāo)板Flash編程設(shè)計(jì)的創(chuàng)建及應(yīng)用[J].電子設(shè)計(jì)工程,2009, 17(3):100-102,105.
[9] 魏楚元,李陶深,張?jiān)龇?Eclipse:基于插件的下一代通用集成開發(fā)環(huán)境[J].計(jì)算機(jī)應(yīng)用與軟件,2005, 22(6):38-40.
[10] 薛東方,尚朝軒,何 強(qiáng),等.基于Visual DSP++環(huán)境的Flash在線編程實(shí)現(xiàn)[J].科學(xué)技術(shù)與工程,2008, 8(4):1095-1097.
[11] 閆守孟,周興社,李志剛.面向嵌入式驅(qū)動(dòng)軟件開發(fā)的設(shè)備仿真技術(shù)研究[J].西北工業(yè)大學(xué)學(xué)報(bào),2004, 22(1):11-14.
[12] 單錦輝,姜 瑛,孫 萍.軟件測(cè)試研究進(jìn)展[J].北京大學(xué)學(xué)報(bào),2005,41(1):134-145.
編輯 金胡考
General Flash Online Programming System Based on Debugger
JIANG Long1,LIU Bing2,LUO Xiaohua1
(1.Institute of VLSI Design,Zhejiang University,Hangzhou 310000,China;
2.Department of Software Research and Development,C-SKY Microsystems Co.,Ltd.,Hangzhou 310012,China)
In embedded systems,Flash is an often-used way of read-only memory.For all kinds of Flash online programming interface in the present industry,a general Flash online programming system is implemented in this paper by using the embedded debugging techniques.This system encapsulates the different Flash online programming details by defining specific Flash online programming driver.An Integrated Development Environment(IDE)based on Eclipse is at the top of the system,and in the background,the existing embedded debug tool is reused to achieve Flash online programming with the help of specific Flash driver running on the embedded target.In terms of use,this system presents a simple operation,strong visual software interface for Flash online programming,and in the aspect of function,major Flash in the industry can be online programming in this system,which implements the generality of Flash online programming.
embedded system;Flash online programming;debugger;Eclipse plug-in;Integrated Development Environment (IDE);software reuse
1000-3428(2014)11-0046-04
A
TP31
10.3969/j.issn.1000-3428.2014.11.009
“核高基”重大專項(xiàng)“高性能嵌入式CPU關(guān)鍵技術(shù)研究”(2010ZX01030-001-001-002)。
蔣 龍(1987-),男,碩士研究生,主研方向:嵌入式調(diào)試技術(shù);劉 兵,碩士;羅小華,副教授。
2013-11-25
2013-12-20E-mail:ZJU_PeterJL@163.com
中文引用格式:蔣 龍,劉 兵,羅小華.基于調(diào)試器的通用Flash在線編程系統(tǒng)[J].計(jì)算機(jī)工程,2014,40(11):46-49.
英文引用格式:Jiang Long,Liu Bing,Luo Xiaohua.General Flash Online Programming System Based on Debugger[J].Computer Engineering,2014,40(11):46-49.