朱磊,郭力,董毅,王慧俊
(西安工程大學(xué) 電子信息學(xué)院,西安 710048)
一種可在線更新程序的DSP自舉模塊※
朱磊,郭力,董毅,王慧俊
(西安工程大學(xué) 電子信息學(xué)院,西安 710048)
針對(duì)現(xiàn)有DSP自舉模塊普遍存在程序代碼更新不便的缺陷,提出了一種可便捷高效地在線更新用戶應(yīng)用程序代碼的DSP自舉模塊。該模塊由基于LabVIEW的圖形用戶界面(GUI)軟件與C8051F340單片機(jī)構(gòu)成。GUI軟件完成DSP應(yīng)用程序代碼的格式轉(zhuǎn)換,并通過(guò)USB將轉(zhuǎn)換完成的程序代碼傳送給C8051F340。C8051F340通過(guò)其片上USB外設(shè)接收DSP程序代碼并存儲(chǔ)于片上FLASH中,同時(shí)借助標(biāo)準(zhǔn)串行總線控制DSP完成應(yīng)用程序代碼的自舉操作。該模塊采用在線方式,可一鍵實(shí)現(xiàn)DSP應(yīng)用程序代碼的更新升級(jí)與自舉操作。實(shí)驗(yàn)結(jié)果表明了該模塊的有效性。
DSP自舉;LabVIEW;GUI;USB;C8051F340
TMS320VC54x系列DSP作為一種低功耗高速處理器在消費(fèi)電子、通信等領(lǐng)域應(yīng)用廣泛[1-2]。通常為實(shí)現(xiàn)DSP程序代碼的高速運(yùn)行,一般需要將DSP的應(yīng)用程序代碼存儲(chǔ)于DSP片內(nèi)RAM中運(yùn)行,但TMS320VC54x處理器是RAM型器件,掉電后DSP不能保存任何用戶應(yīng)用程序代碼。因此,基于該型DSP的電子系統(tǒng)通常需要設(shè)計(jì)自舉模塊。所謂“自舉”是指:DSP芯片內(nèi)的程序引導(dǎo)裝載器(Bootloader)自動(dòng)地將DSP應(yīng)用程序代碼從DSP外部非易失性存儲(chǔ)器加載到片內(nèi)RAM中,脫離仿真器模式獨(dú)立運(yùn)行的過(guò)程。
TMS320VC54x系列DSP有兩類自舉方式:基于靜態(tài)存儲(chǔ)器(如EEPROM、FLASH)的自舉方式和基于處理器的自舉方式。基于靜態(tài)存儲(chǔ)器的DSP自舉方式[3-4]使用外擴(kuò)的靜態(tài)存儲(chǔ)器存儲(chǔ)DSP程序代碼,由于該方式無(wú)需外加控制器干預(yù),因此具有電路簡(jiǎn)單等優(yōu)點(diǎn)。基于處理器的DSP自舉方式[5-6],利用單片機(jī)存儲(chǔ)DSP程序代碼并控制DSP完成自舉,具有可有效控制DSP自舉時(shí)機(jī)、可靈活選擇自舉通信接口等優(yōu)勢(shì)。然而,無(wú)論哪類自舉方式,要更新DSP應(yīng)用程序代碼都需要先將DSP開(kāi)發(fā)軟件CCS編譯產(chǎn)生的.out程序代碼文件通過(guò)一系列的格式轉(zhuǎn)換,生成DSP自舉所需的程序代碼格式,并將得到的代碼移植到DSP應(yīng)用系統(tǒng)片外擴(kuò)展的靜態(tài)存儲(chǔ)器或單片機(jī)中存儲(chǔ)。顯然,傳統(tǒng)DSP自舉模塊的上述程序代碼更新操作非常麻煩。為此本文提出一種便捷高效的DSP自舉模塊。借助該模塊,用戶無(wú)需熟悉DSP自舉設(shè)計(jì)過(guò)程,便可一鍵實(shí)現(xiàn)DSP程序代碼的更新升級(jí)與自舉操作。
DSP開(kāi)發(fā)軟件CCS編譯生成的.out文件不能直接用來(lái)自舉,需要將其進(jìn)行一系列繁瑣的格式轉(zhuǎn)換得到合適的格式并移植到DSP的外部存儲(chǔ)器進(jìn)行自舉[7]。為解決該問(wèn)題,本模塊通過(guò)基于LabVIEW的GUI軟件完成上述轉(zhuǎn)換并控制代碼移植到外部存儲(chǔ)器。DSP自舉模塊框圖如圖1所示。

圖1 DSP自舉模塊系統(tǒng)框圖
GUI軟件首先將.out文件轉(zhuǎn)換為.hex格式,并將得到的.hex文件轉(zhuǎn)換為方便DSP自舉的.dat格式。之后,GUI通過(guò)USB將數(shù)據(jù)傳送給C8051F340單片機(jī)完成DSP程序更新。C8051F340是一款可提供USB功能并具有較大FLASH存儲(chǔ)空間的混合信號(hào)微控制器。本模塊使用其片上FLASH作為DSP的外部存儲(chǔ)器,可省去外擴(kuò)存儲(chǔ)設(shè)備,節(jié)約成本,簡(jiǎn)化電路。自舉開(kāi)始時(shí),單片機(jī)將FLASH中的代碼數(shù)據(jù)通過(guò)標(biāo)準(zhǔn)串行自舉方式傳送給DSP,控制DSP的自舉。標(biāo)準(zhǔn)串行自舉與其他自舉模式相比,占用DSP硬件資源少,電路簡(jiǎn)單。通過(guò)本模塊,開(kāi)發(fā)者可在PC機(jī)上實(shí)現(xiàn)一鍵完成DSP代碼更新。

圖2 自舉模塊主要硬件連接關(guān)系圖

本系統(tǒng)主要通過(guò)GUI軟件完成DSP用戶應(yīng)用代碼的格式轉(zhuǎn)換和調(diào)用USB主機(jī)API控制USB傳輸數(shù)據(jù);通過(guò)C8051F340程序調(diào)用USB器件API接收數(shù)據(jù)存入片內(nèi)FLASH中,并通過(guò)標(biāo)準(zhǔn)串行通信控制DSP的自舉。下面分別介紹各軟件設(shè)計(jì)的功能和具體流程。
3.1 基于LabVIEW的GUI程序設(shè)計(jì)
LabVIEW開(kāi)發(fā)的程序一般由一個(gè)或多個(gè)VI組成,所有VI都可分為前面板和框圖兩部分。前面板是VI的交互界面,用戶輸入數(shù)據(jù)通過(guò)前面板傳遞給框圖,計(jì)算和分析結(jié)果在前面板上以不同方式顯示出來(lái)。圖3為本模塊的GUI前面板。前面板分為“輸入配置區(qū)”和“狀態(tài)顯示區(qū)”。通過(guò)在前面板的“輸入配置區(qū)”設(shè)置文件路徑進(jìn)行DSP代碼文件的二次更新。“狀態(tài)顯示區(qū)”可實(shí)時(shí)顯示USB連接狀況、文件轉(zhuǎn)換信息、自舉代碼文件內(nèi)容等詳細(xì)信息。

圖3 基于LabVIEW的GUI前面板
圖形化的程序代碼主要完成兩個(gè)任務(wù):調(diào)用USB主機(jī)的API函數(shù)控制USB數(shù)據(jù)傳輸和控制代碼文件格式轉(zhuǎn)換。
借助Silicon Labs公司為USB驅(qū)動(dòng)程序開(kāi)發(fā)提供的USBXpress,可以簡(jiǎn)便地實(shí)現(xiàn)在PC機(jī)上通過(guò)GUI軟件與作為USB器件的C8051F340單片機(jī)的USB通信。USBXpress提供了10個(gè)USB主機(jī)API函數(shù),通過(guò)LabVIEW中的CLF(調(diào)用庫(kù)函數(shù)節(jié)點(diǎn))調(diào)用USBXpress提供的USB主機(jī)API函數(shù),便可訪問(wèn)USB底層硬件。圖4為本設(shè)計(jì)LabVIEW上位機(jī)程序調(diào)用API的框圖。圖中VI作用分別是獲取USB器件編號(hào)、獲取USB器件序列碼、設(shè)置USB讀寫延時(shí)、打開(kāi)USB器件、向USB器件寫數(shù)據(jù)塊、關(guān)閉USB器件。

圖4 LabVIEW調(diào)用USB主機(jī)API框圖
在成功調(diào)用SI_Open()函數(shù)打開(kāi)USB器件,并通過(guò)“file path control.vi”控件獲取待轉(zhuǎn)換文件的具體路徑后,GUI軟件對(duì)定位的代碼文件開(kāi)始進(jìn)行轉(zhuǎn)換。如圖5所示,首先通過(guò)“Exec.vi”(“執(zhí)行系統(tǒng)命令”VI)調(diào)用CCS軟件環(huán)境提供的DOS批處理文件Hex500.exe軟件(與自舉文件位于同一個(gè)目錄)將.out文件轉(zhuǎn)換為.hex文件。Hex500.exe在DOS環(huán)境下運(yùn)行需要輸入大量轉(zhuǎn)換配置文件,因此GUI需同時(shí)調(diào)用集中描述文件轉(zhuǎn)換所需參數(shù)信息的.cmd文件。.cmd文件內(nèi)容及注釋如下:
bootloader.out //待轉(zhuǎn)化的程序文件
-o bootloader.hex //輸出文件名
-map bootloader.map //生成存儲(chǔ)器映像文件
-boot //生成加載表
-I //輸出文件為Intel Hex文件格式
-e_c_int00 //程序入口地址
-memwidth 16 //標(biāo)系統(tǒng)的存儲(chǔ)器為16位
-romwidth 16 //存儲(chǔ)器芯片的位寬為16位
-bootorg SERIAL //串行裝載
之后通過(guò)“Exec.vi”函數(shù)調(diào)用hex-to-dat.exe軟件將.hex格式轉(zhuǎn)換為.dat格式。最終在文件格式轉(zhuǎn)換完畢之后提取代碼并轉(zhuǎn)換為數(shù)組,在循環(huán)中調(diào)用SI_Open()函數(shù)以每次512字節(jié)的速度將數(shù)據(jù)寫入U(xiǎn)SB器件,直到所有文件傳輸完畢,關(guān)閉USB。

圖5 LabVIEW轉(zhuǎn)換DSP程序代碼格式的框圖
3.2 C8051F340程序設(shè)計(jì)
C8051F340通過(guò)USB從GUI軟件接收DSP程序代碼并存儲(chǔ)到片內(nèi)FLASH中,之后通過(guò)標(biāo)準(zhǔn)串行接口將代碼傳送給DSP進(jìn)行自舉。C8051F340程序主要包括初始化函數(shù)、自舉函數(shù)、USB驅(qū)動(dòng)函數(shù)、擦寫FLASH函數(shù)幾個(gè)部分。C8051F340程序的流程圖略——編者注。
3.2.1 初始化程序
程序初始化部分主要包括USB設(shè)備初始化和C8051F340單片機(jī)初始化。USB初始化通過(guò)調(diào)用USBXpress提供的10個(gè)USB器件API函數(shù)實(shí)現(xiàn),包括調(diào)用USB_Clock_Start()函數(shù)初始化USB總線時(shí)鐘、調(diào)用USB_Init()函數(shù)使能USB總線、調(diào)用USB_Init_Enable()函數(shù)使能API中斷;C8051F340單片機(jī)初始化中將單片機(jī)時(shí)鐘設(shè)為48 MHz以滿足USB全速工作方式的需要,配置單片機(jī)輸出端口為推挽輸出,開(kāi)啟外部中斷0并通過(guò)配置寄存器“IT01CF=0x07”將P0.7配置為INT0的中斷觸發(fā)端口引腳,監(jiān)視DSP所給自舉信號(hào)。
3.2.2 自舉函數(shù)
DSP啟動(dòng)速度比C8051F340快,因此自舉之前需先復(fù)位DSP并初始化SPI接口,等待DSP的XF引腳觸發(fā)INT0中斷后啟動(dòng)自舉操作。本程序使用16位標(biāo)準(zhǔn)串行方式對(duì)DSP自舉。通信時(shí)序如圖6所示,BFSR0脈沖之后可傳輸一個(gè)16位的數(shù)據(jù),傳輸?shù)拿總€(gè)16位數(shù)據(jù)之間需至少保證40個(gè)DSP時(shí)鐘周期的延時(shí)時(shí)間。且單片機(jī)時(shí)鐘頻率(BCLKR0)不可超過(guò)DSP時(shí)鐘頻率的1/2。標(biāo)準(zhǔn)串行自舉代碼如下所示,程序中將BFSR0拉高后,傳輸一個(gè)字節(jié)的數(shù)據(jù),并通過(guò)調(diào)用延時(shí)函數(shù)Delaynum(20)延時(shí)20 μs來(lái)滿足傳輸兩數(shù)據(jù)間最小CPU時(shí)鐘間隔的要求,程序中w為當(dāng)前傳輸?shù)挠?個(gè)ASCI字符轉(zhuǎn)換而來(lái)的16位無(wú)符號(hào)整型變量。

圖6 單片機(jī)標(biāo)準(zhǔn)串行自舉時(shí)序圖
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驅(qū)動(dòng)函數(shù)和FLASH讀寫函數(shù)
USB中斷函數(shù)通過(guò)調(diào)用Block_Read()函數(shù)接收來(lái)自GUI軟件的代碼數(shù)據(jù),并存入TempStorage[]數(shù)組。ReadStageLength為每次所讀取的文件大小,最大為64字節(jié)(一個(gè)數(shù)據(jù)塊大小)。因GUI軟件每次發(fā)送512字節(jié),F(xiàn)LASH中每512字節(jié)為一頁(yè),故下位機(jī)中每讀取512字節(jié)后寫入FLASH。
如下代碼中,BytesRead為已讀取數(shù)據(jù)的大小,當(dāng)C8051F340通過(guò)USB接收了一頁(yè)FLASH可容納最大數(shù)據(jù)512字節(jié)(Block_PR_Page為每頁(yè)FLASH可容納最多數(shù)據(jù)塊= 512/64)或者GUI軟件發(fā)送的最后一組數(shù)據(jù),寫入FLASH。PageIndices[0]為下位機(jī)自舉的基指針,指向FLASH中0x2000開(kāi)始的地址,其中0x2000~0x2200用來(lái)存放接收數(shù)據(jù)信息(大小、所含數(shù)據(jù)塊量);PageIndex為當(dāng)前操作的Flash相對(duì)于基頁(yè)0x2000的偏移量,PageIndices[0]+PageIndex*0x200指向Flash當(dāng)前操作地址,自舉程序代碼從0x2200地址處開(kāi)始。
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++;
}
為測(cè)試該模塊的可行性,以TMS320VC54x目標(biāo)板為基礎(chǔ)進(jìn)行驗(yàn)證。具體方法略——編者注。
本文提出了一種可在線更新程序的自舉模塊。該模塊在GUI軟件中將DSP程序代碼進(jìn)行格式轉(zhuǎn)換,并通過(guò)USB將代碼數(shù)據(jù)導(dǎo)入C8051F340單片機(jī)的片內(nèi)FLASH中存儲(chǔ)。C8051F340通過(guò)標(biāo)準(zhǔn)串行總線控制DSP進(jìn)行自舉。利用該模塊,用戶更新DSP程序代碼可完全在計(jì)算機(jī)上操作,無(wú)需了解自舉的具體細(xì)節(jié),實(shí)現(xiàn)一鍵更新代碼;同時(shí)該自舉模塊可在短短數(shù)秒內(nèi)完成代碼更新,從而大大減輕了開(kāi)發(fā)難度和縮短開(kāi)發(fā)周期。另外,由于單片機(jī)FLASH存儲(chǔ)量為64 KB,除去單片機(jī)的程序占用空間,從0x2200地址開(kāi)始,共可存儲(chǔ)55.5 KB左右的DSP程序代碼,滿足大多數(shù)中小DSP應(yīng)用程序的自舉需求,因此該系統(tǒng)可廣泛用于程序代碼不超過(guò)55.5 KB的DSP系統(tǒng)中。

[1] 楊萍,張玉杰,楊良煜,等. 基于DSP的新型智能超聲波相關(guān)流量計(jì)[J]. 計(jì)算機(jī)測(cè)量與控制,2006,14(9).
[2] 劉煒,龍憲惠. TMS320VC5402在汽車防撞警示雷達(dá)中的應(yīng)用[J]. 電子技術(shù)應(yīng)用,2001,27(9).
[3] 陳紅梅,陳健.TMS320VC5402的Flash并行Bootloader技術(shù)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2003(11).
[4] 徐書杰,劉宏立.TMS320VC5416 DSP并行自舉方案的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與科學(xué),2009,31(8).
[5] 鄒翼,曾文海,陳續(xù)喜. 基于TMS320VC5402 DSP的HPI方式自舉的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用,2009(3).
[6] 李輝.C8051F023通過(guò)HPI對(duì)TMS320C5402自舉的實(shí)現(xiàn)[J]. 無(wú)線電工程,2005,35(3).
[7] 朱磊,劉東. C8051F340與LabVIEW基于API的USB通信[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2007(1).
朱磊(副教授),研究方向?yàn)榍度胧较到y(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
陜西省教育廳自然科學(xué)項(xiàng)目(12JK0547);西安工程大學(xué)博士科研啟動(dòng)基金項(xiàng)目(BS1205);西安市科技局技術(shù)轉(zhuǎn)移促進(jìn)工程項(xiàng)目(CXY1349(2))。
TP311/368
A
2014-02-15)