蔣 龍,劉 兵,羅小華
(1.浙江大學超大規模集成電路設計研究所,杭州310000;
2.杭州中天微系統有限公司軟件研發部,杭州310012)
基于調試器的通用Flash在線編程系統
蔣 龍1,劉 兵2,羅小華1
(1.浙江大學超大規模集成電路設計研究所,杭州310000;
2.杭州中天微系統有限公司軟件研發部,杭州310012)
在嵌入式系統中,Flash是經常使用的只讀存儲方式。針對目前Flash在線編程接口形式較多、軟件通用性不強的現狀,利用嵌入式調試技術實現一種通用Flash在線編程系統。通過定義特定Flash在線編程驅動程序封裝不同Flash在線編程細節,并在基于Eclipse的集成開發環境下封裝整個系統。系統內部復用現有的嵌入式調試軟件工具,與嵌入式目標端的Flash驅動程序配合,可實現Flash在線編程的功能。在使用方面,該系統呈現給用戶一個操作簡單、可視化強的軟件操作界面;在功能方面,通過定制Flash驅動程序,該系統對目前業內主流Flash進行在線編程,具有在線編程的通用性。
嵌入式系統;Flash在線編程;調試器;Eclipse插件;集成開發環境;軟件復用
對于嵌入式系統來說,Flash幾乎成為必不可少的硬件單元,因此Flash的在線編程在嵌入式開發中是非常重要的一個環節[1]。目前業界對Flash的在線編程接口千差萬別,每個廠商的Flash編程方式各有不同,相同的嵌入式平臺,針對不同的Flash單元要做不同的定制[2]。這種情況顯然不利于嵌入式開發效率的提高。
目前,針對Flash在線編程的研究普遍集中在底層硬件的實現層面,對于嵌入式軟件開發的效率提升完全沒有考慮[3]。文獻[1]介紹了一種基于JTAG實現的Flash編程方法,利用芯片SRAM區域作為數據緩沖區,通過JTAG進行控制,最終實現Flash編程。整體方案較好,不足之處在于需要較多的硬件單元。文獻[2]同樣是基于JTAG的Flash編程實現,通過專用的硬件目標板去控制原有的CPU core中的JTAG邏輯模塊,通過PC端軟件實現對Flash的編程,整體的軟硬件代價都相對高。文獻[4]的問題在于整個論述都是對TMS320F2812芯片的理論研究,沒能提出一種更為通用的方式。
針對目前Flash編程接口形式多變對嵌入式軟件開發帶來的不便[4],本文設計并實現一套通用的Flash在線編程系統。該系統利用現有嵌入式調試通道,將頂層Eclipse集成開發環境與運行在嵌入式目標端RAM中的Flash驅動整合,最終實現各種Flash在線編程的功能。整體方案只需要嵌入式端極小RAM(小于1 KB)的硬件開銷(一般嵌入式系統都可以滿足該RAM要求),可解決嵌入式Flash在線編程的通用性問題[5],提高嵌入式軟件開發中Flash在線編程的效率。
2.1 整體框架及原理描述
通用Flash在線編程系統的核心原理在于:通過用戶自定義Flash驅動,封裝不同Flash編程接口,利用嵌入式調試工具,將驅動加載到嵌入式目標板RAM中,然后運用斷點(break)、寫內存(restore)和運行(continue)等基本調試命令,通過對驅動程序的控制,完成對Flash硬件的在線編程工作。Eclipse集成開發環境的功能是封裝了調試工具的調試過程,為用戶提供一個Flash編程操作界面。整個系統如圖1所示。

圖1 通用Flash在線編程系統框圖
運行在嵌入式目標端RAM空間的Flash驅動程序封裝了Flash編程接口的細節,該程序在整個系統中始終處于被調試的狀態,調試器發送調試命令,控制Flash驅動程序,完成Flash的在線編程。
2.2 模塊功能說明
2.2.1 Flash驅動模塊
整個系統的核心在于Flash驅動程序的設計,驅動模塊需要完成2個功能:(1)為Flash編程用戶提供通用Flash編程接口;(2)向調試器提供一組控制接口,使得調試器能夠通過基本的調試命令來實現對Flash編程的控制。整個模塊如圖2所示。
在該模塊中,用戶自定義部分需要由Flash編程用戶根據具體的Flash器件特性實現。通過這種方式,可以實現Flash編程的通用性。通用接口及含義見表1。

圖2 Flash驅動模塊框圖

表1 驅動模塊通用Flash編程接口說明
調試器控制接口給出的是一些全局符號,如表2所示。調試器可以在驅動程序處于調試狀態時,讀寫這些全局符號,從而準確地控制Flash驅動程序,實現通用Flash在線編程的操作[6]。

表2 驅動模塊調試器控制接口說明
當驅動處于調試狀態下時,Flash編程事件輪詢單元利用調試器控制接口的信息來調用不同的Flash編程接口,實現Flash的讀寫、擦除等操作[7]。
2.2.2 調試器模塊
調試器模塊雖然在系統中非常重要,但本文系統只是使用調試器的最基本的調試操作,這也是本文系統的一個優點:最大限度實現了軟件復用[8]。表3給出系統工作時調試器的基本命令以及作用。

表3 系統使用的基本調試命令說明
通過使用上述命令,調試器可以準確控制目標端RAM中運行的Flash驅動的運行流程,從而實現Flash編程操作,該過程如圖3所示。可以看出,涉及到的調試操作全部是嵌入式調試中經常使用的基本調試操作,因此,對于調試器模塊來說,在整個系統中,并沒有任何的擴展,完全實現了軟件復用。

圖3 調試器模塊控制流程
2.2.3 Eclipse模塊
Eclipse模塊將調試驅動的細節進行了封裝。具體來說,該模塊負責提供給用戶一個Flash編程操作界面,并將調試器模塊使用到的基本調試命令進行后臺封裝[9]。
在界面上,僅提供給用戶Flash編程的操作;在后臺,將調試流程進行封裝;這種做法可以做大限度地避免將本系統的原理暴露給Flash編程的用戶,符合軟件封裝原則[10]。
3.1 嵌入式環境
本文系統的實現環境:嵌入式硬件平臺是杭州中天微系統有限公司的32位高性能嵌入式CPU CK610,并使用基于該芯片的SoC平臺,該平臺使用了SPANSION公司S29GL-N型號Nor Flash的只讀器件;嵌入式軟件平臺方面,調試器部分使用杭州中天微系統有限公司的嵌入式CK-GDB,以及基于Eclipse的集成開發環境 C-Sky Development Suite (CDS)。本文首先針對Nor Flash編寫驅動程序,然后在CDS平臺上進行插件開發,完成通用Flash在線編程系統的設計。
3.2 Flash驅動框架設計實現
驅動框架的設計嚴格按照原理闡述,結合圖2所示的 Flash驅動模塊框圖,在驅動工程中,通用Flash編程接口需要由具體的Flash編程用戶來實現,而調試器控制接口是確定的,而且盡量避免暴露給用戶,因此本文在實現中將兩部分代碼放在了不同的源文件中[11]。整個驅動工程的文件目錄如圖4所示。
這里crt0.S是啟動文件,ckcpu.ld是鏈接腳本,而gdb.init文件是gdb的啟動腳本。這3個文件是嵌入式工程必備文件。

圖4 驅動工程目錄
本文將調試器控制接口以及Flash編程事件輪詢單元放在了main.c文件中,并使注釋main.c文件是只讀文件;而需要用戶自定義的通用Flash編程接口全部放到driver.c文件中,該文件是需要用戶根據具體的Flash硬件單元來自定義完成的。
事件輪詢單元(main.c文件)的核心代碼如下:

上述代碼是整個驅動程序的核心代碼,調試器通過驅動提供的全局控制變量對控制while循環的流程。
3.3 Eclipse插件設計實現
本文通過Eclipse插件開發技術,為用戶實現了一個Flash編程的GUI,最終用戶在實際使用中是通過該GUI,一鍵操作完成對Flash的編程的。
具體來說,需要對Eclipse的擴展點進行擴展,然后在此擴展點上進行GUI后臺邏輯封裝工作。
插件開發核心代碼如下:

通過xml方式對Eclipse進行了擴展點開發,后續僅需要完成實現該擴展點的類:com.csky.cds.Flash.ui.FlashUIHandler即可,鑒于篇幅,本文不在此贅述。
本文使用CDS提供的demo程序作為演示程序,使用上文實現的Flash插件開發界面進行Flash編程操作,將demo燒寫到基于CK-CPU的SoC平臺的Nor Flash空間中。最終在Eclipse界面上顯示“Programmed successfully“,見圖5中圓圈圈出部分。

圖5 Eclipse上Flash燒寫成功界面
為驗證是否如界面所示,將嵌入式目標板串口連接至電腦,重新上電,發現電腦串口顯示“Hello,CSky!”的預期結果。這說明嵌入式目標端Nor Flash對應空間確實已經被正確燒寫了。從而證明了該通用Flash在線編程系統的正確性[12]。
本文提出了一種通用的Flash在線編程的方法,通過定義Flash驅動程序封裝了不同Flash的在線編程細節,采用現有的嵌入式調試手段,最終在Eclipse層面上將該方法的原理進行封裝,為用戶呈現一個可視化的Flash編程界面,實現了Flash在線編程的通用性。該方法也大幅提高了嵌入式Flash在線編程的速度。但在本文系統中,Flash驅動模塊源代碼會將原理細節暴露給用戶,這不符合軟件封裝原則。在下一步工作中,對于Flash驅動的模塊,可以考慮使用庫的形式將這些細節封裝起來,只將通用Flash編程接口的實現交給用戶,做到完全的封裝。
[1] 陳 超,沈海斌.基于JTAG的可重構Flash快速編程方法[J].計算機工程,2010,36(17):280-282,285.
[2] 吳玉香,周建香.基于JTAG的Flash在線編程系統實現[J].化工自動化及儀表,2009,36(6):70-74.
[3] 李 靜,張樹團.TMS320F2812片內Flash在線燒寫技術研究[J].國外電子元器件,2008,10:37-38,40.
[4] 董相暉,張志敏.一種基于EJTAG快速在線燒寫Flash的設計[J].微電子學與計算機,2007,24(12):106-108.
[5] 李 慧,周 明.JTAG模式下的MPC5554外部FLASH編程的設計與實現[J].現代電子技術,2009,32(2): 76-79,83.
[6] 趙海艦,甘 萌.嵌入式系統中的Flash編程技術研究[J].計算機工程與設計,2005,26(11):3006-3009.
[7] 陸林燕,王魯靜,鄭正奇.NAND FLASH編程實現研究分析[J].計算機技術與發展,2008,18(3):118-120,124.
[8] 黃冰峰,游志宇,杜 楊,等.基于SoPC目標板Flash編程設計的創建及應用[J].電子設計工程,2009, 17(3):100-102,105.
[9] 魏楚元,李陶深,張增芳.Eclipse:基于插件的下一代通用集成開發環境[J].計算機應用與軟件,2005, 22(6):38-40.
[10] 薛東方,尚朝軒,何 強,等.基于Visual DSP++環境的Flash在線編程實現[J].科學技術與工程,2008, 8(4):1095-1097.
[11] 閆守孟,周興社,李志剛.面向嵌入式驅動軟件開發的設備仿真技術研究[J].西北工業大學學報,2004, 22(1):11-14.
[12] 單錦輝,姜 瑛,孫 萍.軟件測試研究進展[J].北京大學學報,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
“核高基”重大專項“高性能嵌入式CPU關鍵技術研究”(2010ZX01030-001-001-002)。
蔣 龍(1987-),男,碩士研究生,主研方向:嵌入式調試技術;劉 兵,碩士;羅小華,副教授。
2013-11-25
2013-12-20E-mail:ZJU_PeterJL@163.com
中文引用格式:蔣 龍,劉 兵,羅小華.基于調試器的通用Flash在線編程系統[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.