朱磊,郭力,董毅,王慧俊
(西安工程大學 電子信息學院,西安 710048)
一種可在線更新程序的DSP自舉模塊※
朱磊,郭力,董毅,王慧俊
(西安工程大學 電子信息學院,西安 710048)
針對現(xiàn)有DSP自舉模塊普遍存在程序代碼更新不便的缺陷,提出了一種可便捷高效地在線更新用戶應用程序代碼的DSP自舉模塊。該模塊由基于LabVIEW的圖形用戶界面(GUI)軟件與C8051F340單片機構成。GUI軟件完成DSP應用程序代碼的格式轉換,并通過USB將轉換完成的程序代碼傳送給C8051F340。C8051F340通過其片上USB外設接收DSP程序代碼并存儲于片上FLASH中,同時借助標準串行總線控制DSP完成應用程序代碼的自舉操作。該模塊采用在線方式,可一鍵實現(xiàn)DSP應用程序代碼的更新升級與自舉操作。實驗結果表明了該模塊的有效性。
DSP自舉;LabVIEW;GUI;USB;C8051F340
TMS320VC54x系列DSP作為一種低功耗高速處理器在消費電子、通信等領域應用廣泛[1-2]。通常為實現(xiàn)DSP程序代碼的高速運行,一般需要將DSP的應用程序代碼存儲于DSP片內RAM中運行,但TMS320VC54x處理器是RAM型器件,掉電后DSP不能保存任何用戶應用程序代碼。因此,基于該型DSP的電子系統(tǒng)通常需要設計自舉模塊。所謂“自舉”是指:DSP芯片內的程序引導裝載器(Bootloader)自動地將DSP應用程序代碼從DSP外部非易失性存儲器加載到片內RAM中,脫離仿真器模式獨立運行的過程。
TMS320VC54x系列DSP有兩類自舉方式:基于靜態(tài)存儲器(如EEPROM、FLASH)的自舉方式和基于處理器的自舉方式?;陟o態(tài)存儲器的DSP自舉方式[3-4]使用外擴的靜態(tài)存儲器存儲DSP程序代碼,由于該方式無需外加控制器干預,因此具有電路簡單等優(yōu)點。基于處理器的DSP自舉方式[5-6],利用單片機存儲DSP程序代碼并控制DSP完成自舉,具有可有效控制DSP自舉時機、可靈活選擇自舉通信接口等優(yōu)勢。然而,無論哪類自舉方式,要更新DSP應用程序代碼都需要先將DSP開發(fā)軟件CCS編譯產生的.out程序代碼文件通過一系列的格式轉換,生成DSP自舉所需的程序代碼格式,并將得到的代碼移植到DSP應用系統(tǒng)片外擴展的靜態(tài)存儲器或單片機中存儲。顯然,傳統(tǒng)DSP自舉模塊的上述程序代碼更新操作非常麻煩。為此本文提出一種便捷高效的DSP自舉模塊。借助該模塊,用戶無需熟悉DSP自舉設計過程,便可一鍵實現(xiàn)DSP程序代碼的更新升級與自舉操作。
DSP開發(fā)軟件CCS編譯生成的.out文件不能直接用來自舉,需要將其進行一系列繁瑣的格式轉換得到合適的格式并移植到DSP的外部存儲器進行自舉[7]。為解決該問題,本模塊通過基于LabVIEW的GUI軟件完成上述轉換并控制代碼移植到外部存儲器。DSP自舉模塊框圖如圖1所示。
圖1 DSP自舉模塊系統(tǒng)框圖
GUI軟件首先將.out文件轉換為.hex格式,并將得到的.hex文件轉換為方便DSP自舉的.dat格式。之后,GUI通過USB將數(shù)據(jù)傳送給C8051F340單片機完成DSP程序更新。C8051F340是一款可提供USB功能并具有較大FLASH存儲空間的混合信號微控制器。本模塊使用其片上FLASH作為DSP的外部存儲器,可省去外擴存儲設備,節(jié)約成本,簡化電路。自舉開始時,單片機將FLASH中的代碼數(shù)據(jù)通過標準串行自舉方式傳送給DSP,控制DSP的自舉。標準串行自舉與其他自舉模式相比,占用DSP硬件資源少,電路簡單。通過本模塊,開發(fā)者可在PC機上實現(xiàn)一鍵完成DSP代碼更新。
圖2 自舉模塊主要硬件連接關系圖
本系統(tǒng)主要通過GUI軟件完成DSP用戶應用代碼的格式轉換和調用USB主機API控制USB傳輸數(shù)據(jù);通過C8051F340程序調用USB器件API接收數(shù)據(jù)存入片內FLASH中,并通過標準串行通信控制DSP的自舉。下面分別介紹各軟件設計的功能和具體流程。
3.1 基于LabVIEW的GUI程序設計
LabVIEW開發(fā)的程序一般由一個或多個VI組成,所有VI都可分為前面板和框圖兩部分。前面板是VI的交互界面,用戶輸入數(shù)據(jù)通過前面板傳遞給框圖,計算和分析結果在前面板上以不同方式顯示出來。圖3為本模塊的GUI前面板。前面板分為“輸入配置區(qū)”和“狀態(tài)顯示區(qū)”。通過在前面板的“輸入配置區(qū)”設置文件路徑進行DSP代碼文件的二次更新?!盃顟B(tài)顯示區(qū)”可實時顯示USB連接狀況、文件轉換信息、自舉代碼文件內容等詳細信息。
圖3 基于LabVIEW的GUI前面板
圖形化的程序代碼主要完成兩個任務:調用USB主機的API函數(shù)控制USB數(shù)據(jù)傳輸和控制代碼文件格式轉換。
借助Silicon Labs公司為USB驅動程序開發(fā)提供的USBXpress,可以簡便地實現(xiàn)在PC機上通過GUI軟件與作為USB器件的C8051F340單片機的USB通信。USBXpress提供了10個USB主機API函數(shù),通過LabVIEW中的CLF(調用庫函數(shù)節(jié)點)調用USBXpress提供的USB主機API函數(shù),便可訪問USB底層硬件。圖4為本設計LabVIEW上位機程序調用API的框圖。圖中VI作用分別是獲取USB器件編號、獲取USB器件序列碼、設置USB讀寫延時、打開USB器件、向USB器件寫數(shù)據(jù)塊、關閉USB器件。
圖4 LabVIEW調用USB主機API框圖
在成功調用SI_Open()函數(shù)打開USB器件,并通過“file path control.vi”控件獲取待轉換文件的具體路徑后,GUI軟件對定位的代碼文件開始進行轉換。如圖5所示,首先通過“Exec.vi”(“執(zhí)行系統(tǒng)命令”VI)調用CCS軟件環(huán)境提供的DOS批處理文件Hex500.exe軟件(與自舉文件位于同一個目錄)將.out文件轉換為.hex文件。Hex500.exe在DOS環(huán)境下運行需要輸入大量轉換配置文件,因此GUI需同時調用集中描述文件轉換所需參數(shù)信息的.cmd文件。.cmd文件內容及注釋如下:
bootloader.out //待轉化的程序文件
-o bootloader.hex //輸出文件名
-map bootloader.map //生成存儲器映像文件
-boot //生成加載表
-I //輸出文件為Intel Hex文件格式
-e_c_int00 //程序入口地址
-memwidth 16 //標系統(tǒng)的存儲器為16位
-romwidth 16 //存儲器芯片的位寬為16位
-bootorg SERIAL //串行裝載
之后通過“Exec.vi”函數(shù)調用hex-to-dat.exe軟件將.hex格式轉換為.dat格式。最終在文件格式轉換完畢之后提取代碼并轉換為數(shù)組,在循環(huán)中調用SI_Open()函數(shù)以每次512字節(jié)的速度將數(shù)據(jù)寫入USB器件,直到所有文件傳輸完畢,關閉USB。
圖5 LabVIEW轉換DSP程序代碼格式的框圖
3.2 C8051F340程序設計
C8051F340通過USB從GUI軟件接收DSP程序代碼并存儲到片內FLASH中,之后通過標準串行接口將代碼傳送給DSP進行自舉。C8051F340程序主要包括初始化函數(shù)、自舉函數(shù)、USB驅動函數(shù)、擦寫FLASH函數(shù)幾個部分。C8051F340程序的流程圖略——編者注。
3.2.1 初始化程序
程序初始化部分主要包括USB設備初始化和C8051F340單片機初始化。USB初始化通過調用USBXpress提供的10個USB器件API函數(shù)實現(xiàn),包括調用USB_Clock_Start()函數(shù)初始化USB總線時鐘、調用USB_Init()函數(shù)使能USB總線、調用USB_Init_Enable()函數(shù)使能API中斷;C8051F340單片機初始化中將單片機時鐘設為48 MHz以滿足USB全速工作方式的需要,配置單片機輸出端口為推挽輸出,開啟外部中斷0并通過配置寄存器“IT01CF=0x07”將P0.7配置為INT0的中斷觸發(fā)端口引腳,監(jiān)視DSP所給自舉信號。
3.2.2 自舉函數(shù)
DSP啟動速度比C8051F340快,因此自舉之前需先復位DSP并初始化SPI接口,等待DSP的XF引腳觸發(fā)INT0中斷后啟動自舉操作。本程序使用16位標準串行方式對DSP自舉。通信時序如圖6所示,BFSR0脈沖之后可傳輸一個16位的數(shù)據(jù),傳輸?shù)拿總€16位數(shù)據(jù)之間需至少保證40個DSP時鐘周期的延時時間。且單片機時鐘頻率(BCLKR0)不可超過DSP時鐘頻率的1/2。標準串行自舉代碼如下所示,程序中將BFSR0拉高后,傳輸一個字節(jié)的數(shù)據(jù),并通過調用延時函數(shù)Delaynum(20)延時20 μs來滿足傳輸兩數(shù)據(jù)間最小CPU時鐘間隔的要求,程序中w為當前傳輸?shù)挠?個ASCI字符轉換而來的16位無符號整型變量。
圖6 單片機標準串行自舉時序圖
BCLKR0=1;
Delaynum(20);
BCLKR0=0;
BFSR0=1;
Delaynum(20);
BCLKR0=1;
Delaynum(20);
BCLKR0=0;
Delaynum(20);
for(i=0;i<16;i++){
BDR0= (w & (0x8000 >> i)) > 0;
BCLKR0=1;
BFSR0=0;
Delaynum(20);
BCLKR0=0;
Delaynum(20);
}
3.2.3 USB驅動函數(shù)和FLASH讀寫函數(shù)
USB中斷函數(shù)通過調用Block_Read()函數(shù)接收來自GUI軟件的代碼數(shù)據(jù),并存入TempStorage[]數(shù)組。ReadStageLength為每次所讀取的文件大小,最大為64字節(jié)(一個數(shù)據(jù)塊大小)。因GUI軟件每次發(fā)送512字節(jié),F(xiàn)LASH中每512字節(jié)為一頁,故下位機中每讀取512字節(jié)后寫入FLASH。
如下代碼中,BytesRead為已讀取數(shù)據(jù)的大小,當C8051F340通過USB接收了一頁FLASH可容納最大數(shù)據(jù)512字節(jié)(Block_PR_Page為每頁FLASH可容納最多數(shù)據(jù)塊= 512/64)或者GUI軟件發(fā)送的最后一組數(shù)據(jù),寫入FLASH。PageIndices[0]為下位機自舉的基指針,指向FLASH中0x2000開始的地址,其中0x2000~0x2200用來存放接收數(shù)據(jù)信息(大小、所含數(shù)據(jù)塊量);PageIndex為當前操作的Flash相對于基頁0x2000的偏移量,PageIndices[0]+PageIndex*0x200指向Flash當前操作地址,自舉程序代碼從0x2200地址處開始。
BytesRead+= Block_Read((BYTE*)(&TempStorage[BlockIndex]),ReadStageLength);
BlockIndex++;
if((BlockIndex==(Block_PR_Page))||(BytesRead==BytesToRead)){
Page_Erase((BYTE*)(PageIndices[0]+PageIndex*0x200));
Page_Write((BYTE*)(PageIndices[0]+PageIndex*0x200));
PageIndex++;
}
為測試該模塊的可行性,以TMS320VC54x目標板為基礎進行驗證。具體方法略——編者注。
本文提出了一種可在線更新程序的自舉模塊。該模塊在GUI軟件中將DSP程序代碼進行格式轉換,并通過USB將代碼數(shù)據(jù)導入C8051F340單片機的片內FLASH中存儲。C8051F340通過標準串行總線控制DSP進行自舉。利用該模塊,用戶更新DSP程序代碼可完全在計算機上操作,無需了解自舉的具體細節(jié),實現(xiàn)一鍵更新代碼;同時該自舉模塊可在短短數(shù)秒內完成代碼更新,從而大大減輕了開發(fā)難度和縮短開發(fā)周期。另外,由于單片機FLASH存儲量為64 KB,除去單片機的程序占用空間,從0x2200地址開始,共可存儲55.5 KB左右的DSP程序代碼,滿足大多數(shù)中小DSP應用程序的自舉需求,因此該系統(tǒng)可廣泛用于程序代碼不超過55.5 KB的DSP系統(tǒng)中。
[1] 楊萍,張玉杰,楊良煜,等. 基于DSP的新型智能超聲波相關流量計[J]. 計算機測量與控制,2006,14(9).
[2] 劉煒,龍憲惠. TMS320VC5402在汽車防撞警示雷達中的應用[J]. 電子技術應用,2001,27(9).
[3] 陳紅梅,陳健.TMS320VC5402的Flash并行Bootloader技術[J].單片機與嵌入式系統(tǒng)應用,2003(11).
[4] 徐書杰,劉宏立.TMS320VC5416 DSP并行自舉方案的設計與實現(xiàn)[J].計算機工程與科學,2009,31(8).
[5] 鄒翼,曾文海,陳續(xù)喜. 基于TMS320VC5402 DSP的HPI方式自舉的設計與實現(xiàn)[J]. 計算機系統(tǒng)應用,2009(3).
[6] 李輝.C8051F023通過HPI對TMS320C5402自舉的實現(xiàn)[J]. 無線電工程,2005,35(3).
[7] 朱磊,劉東. C8051F340與LabVIEW基于API的USB通信[J]. 單片機與嵌入式系統(tǒng)應用,2007(1).
朱磊(副教授),研究方向為嵌入式系統(tǒng)。
DSP Bootloader Module with Online Program※
Zhu Lei, Guo Li, Dong Yi, Wang Huijun
(School of Electronics and Information, Xi’an Polytechnic University, Xi'an 710048, China)
This paper presents a convenient online-update-program DSP bootloader module for DSP to overcome the inconvenience in updating program codes, which is ubiquitous in existing DSP bootloader module. This module consists of a Graphical User Interface (GUI) software based on LabVIEW and a C8051F340 MCU. DSP application codes are transferred into needed format by GUI and sent to the C8051F340 by using USB. The C8051F340 stores DSP application codes in its on-chip FLASH and controls DSP to finish booting by using standard serial boot mode. The advantage of the design proposal is that it is convenient and fast for DSP to update and boot using online programing. The experimental results show this module is feasible and reliable.
DSP bootloader;LabVIEW;GUI;USB;C8051F340
陜西省教育廳自然科學項目(12JK0547);西安工程大學博士科研啟動基金項目(BS1205);西安市科技局技術轉移促進工程項目(CXY1349(2))。
TP311/368
A
2014-02-15)