TMS320F2812(簡稱F2812)是TI公司推出的C2000系列性能最高的一款芯片,也是目前DSP領域最先進、功能最強大的32位定點DSP芯片。它既具有數字信號處理能力,又具有強大的事件管理能力和嵌入式控制功能,其片內自帶了128 K字的Flash,可以將程序直接寫入片內運行,開發和使用都非常方便。自推出以來,已被國內的各行業的開發工程師用于開發各種先進的監控產品。各種監控產品在線運行時,難免會發現和需要處理各種意料不到的問題,有必要及時升級相應的程序。F2812的程序通常需要專用的燒寫器和軟件才能寫入,但由于空間距離、時間、現場條件等多方面原因的限制,現場運行的設備很難在就地進行程序升級。因此,本文探討了如何利用設備現有的RS-232數據通信串口進行遠程的程序升級方法。 1 設備硬件構成 下面針對一臺現場在線運行的F2812監控設備進行遠程程序升級。該設備通過RS-232串口和外掛的GPRS模塊與主站PC機可進行點對點通信,其硬件通信平臺的構成如圖1所示。 各硬件模塊的主要功能: ①主站PC機,負責對遠程F2812監控系統發操作命令,收集實時數據等。 ②GPRS通信模塊,通過RS-232接口分別與主站PC機和監控系統連接,實現串口到Internet,遠程數據透明傳輸。 ③F2812監控系統負責執行上位機的命令,采集現場數據、存儲并定時發送到上位PC機。F2812監控電路板上外擴有128 K字的RAM存儲,用于存儲采集到的數據,以及進行程序升級時,存儲上位機傳送過來的升級程序數據,待數據傳送完成后,以數據塊的方式將升級程序寫入 Flash內,對程序進行燒寫固化。 程序的遠程升級方法主要用上位PC機,通過專用工具軟件,將升級程序數據分割發送,下位監控系統收到程序數據后,先將數據放入內存指定的區域,待到全部數據收集結束;同時進行CRC校驗,正確后,調用預先嵌入的Flash燒寫函數進行數據寫入,即可實現程序遠程升級功能。 2 軟件設計方案 2.1 功能分塊 為了能夠順利實現程序遠程升級功能,在程序的設計編寫過程中,可將F2812監控程序有計劃地分成幾個主要功能模塊:BIOS初始化模塊、基礎功能模塊、應用程序模塊。各模塊的構成和地址安排如表1所列。 DSP的監控程序經CCS開發系統編譯后,程序即生成一個*.out類型的COFF公共目標文件,公共目標格式文件對程序各模塊進行分段存放,主要有程序段 (.text)、數據段(.data)、用戶自定義段(.Myprg)等,如程序未進行特別指定,編譯后的程序模塊會自動分配到公共目標格式文件的程序段 (.text)內。為了能夠實現程序可遠程升級功能,需要應用程序模塊單獨映射到用戶自定義模塊內,升級過程只需對用戶自定義模塊(.Mprg)所在的 Flash地址區域進行擦寫即可,這樣還可確保監控程序的基本功能不受Flash擦寫過程和擦寫失敗的影響,這也是程序能否實現遠程升級功能的關鍵。 為此,需在對F2812的監控程序進行如下分段設計: ①在*.cmd文件的段地址映射內增加一個用戶自定義段(.Myprg),將應用程序模塊的映射地址與初始化模塊和基本功能模塊的映射地址分開如下 (這樣便于Flash的程序在線升級時分塊寫入): ②對映射在應用程序模塊內的每個函數,都需要用以下方法進行指定,使程序編譯后,應用程序模塊內的函數映射到用戶自定義段(.Myprg)內。 經過以上的程序分段和設定,使得程序編譯后,各功能函數分段清晰,為F2812監控程序在線遠程寫入做好了準備。 2.2 Flash在線寫入 F2812的Flash數據寫入通常包括擦除、燒寫和校驗3個步驟: ①擦除就是將Flash內的數據0位都變成1,經過正確的擦除步驟后,Flash內所有16位數據都變為0xFFFF。 ②燒寫程序數據的過程就是將待寫入的數據中對應為0位寫入,使得Flash中的相對應位變為0,1對應的位保持不變。 ③校驗過程在燒寫結束后,是將燒寫入的數據讀出,并與原來的數據進行比較。全部正確,則數據寫入Flash完成;若校驗不正確,則必須重新擦除和寫入,5次校驗未能通過,數據燒寫失敗。 F2812的Flash燒寫與較早的C2000系列如F2407有所不同,程序的擦除、燒寫和校驗主要通過調用Flash_Erase()、 Flash_Program()、Flash_Verify()這3個函數來完成。這3個Flash的操作函數已封裝在TI公司開發的庫文件 Flash2812_API_V210.lib內,使用時只需在編譯時將該庫文件加入即可,非常方便使用者調用,具體的使用方法可參閱相關的參考資料。 需要注意的是,對Flash的所有操作函數都必須首先載入到具有0等待周期的RAM內才能執行,否則Flash的燒寫過程將會出錯。執行在線寫入前,需要先調用函數Flash_MemCopy(),將Flash_Erase()、Flash_Program()、Flash_Verify()這3 個函數的執行代碼調入F2812的RAM空間內。Flash_MemCopy()也是封裝在Flash2812_API_V210.lib庫文件內的函數。 3 程序遠程升級 程序的遠程升級功能就是通過升級應用程序模塊的數內容來實現的,其主要步驟如下: 首先,程序數據的提取。監控程序原文件經過CCS編譯后,生成*.OUT的公共目標格式COFF文件。通常用仿真器燒寫程序時,公共目標格式文件,即*.out文件,由CCS的Flash燒寫插件對其進行解讀,并將數據輸出到F2812內進行燒寫。本文用C++Builder開發了一個專用工具軟件,根據公共目標格式文件的結構,對*.OUT文件進行解讀,并提取出應用程序模塊段(.MyPrg)內的程序數據,并將數據通過GPRS通信模塊進行遠程傳送。其次,程序數據的分割。GPRS通信平臺要求每個數據包小于或等于256字節,因此,需要將提取到的程序數據進行分割,由專用工具軟件將應用程序模塊分割為若干個196字節大小的數據包,根據通信協議與F2812監控系統進行遠程通信。 最后,程序數據的寫入。程序數據經GPRS遠程通信接收完畢后,可向F2812監控裝置發程序升級指令。根據預先分段設定,即調用Flash操作函數Flash_Erase()、Flash_Program()、Flash_Vetify(),將數據寫入用戶自定段.Myprg所在的地址區域,完成程序的遠程升級。 結語 本文從工程的實際需要出發,分析和闡述了C2000系列的TMS320F2812程序遠程升級的步驟和方法,有效解決在線遠程運行系統的程序升級的難題,對其他類似系統的程序升級也具有借簽意義。 參考文獻 1. 張衛寧.TMS320C28x系列DSP的CPU與外設[M].北京:清華大學出版社,2004. 2. 劉和平,張衛寧,劉林,等.TMS320C28x系列DSP指令和編程指南[M].北京:清華大學出版社,2005. 作者:呂澤承,蔣學軍 廣西電力試驗研究院 來源:單片機與嵌入式系統 2009(10) |