【導(dǎo)讀】本文提出了一種可在線更新程序的自舉模塊。用該模塊,用戶更新DSP程序代碼可完全在計(jì)算機(jī)上操作,無(wú)需了解自舉的具體細(xì)節(jié),實(shí)現(xiàn)一鍵更新代碼;同時(shí)該自舉模塊可在短短數(shù)秒內(nèi)完成代碼更新,從而大大減輕了開(kāi)發(fā)難度和縮短開(kāi)發(fā)周期。
針對(duì)現(xiàn)有DSP自舉模塊普遍存在程序代碼更新不便的缺陷,提出了一種可便捷高效地在線更新用戶應(yīng)用程序代碼的DSP自舉模塊。該模塊由基于LabVIEW的圖形用戶界面(GUI)軟件與C8051F340單片機(jī)構(gòu)成。GUI軟件完成DSP應(yīng)用程序代碼的格式轉(zhuǎn)換,并通過(guò)驅(qū)動(dòng)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í)與自舉操作。
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)的自舉方式和基于處理器的自舉方式?;陟o態(tài)存儲(chǔ)器的DSP自舉方式[3-4]使用外擴(kuò)的靜態(tài)存儲(chǔ)器存儲(chǔ)DSP程序代碼,由于該方式無(wú)需外加控制器干預(yù),因此具有電路簡(jiǎn)單等優(yōu)點(diǎn)?;谔幚砥鞯腄SP自舉方式[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í)與自舉操作。
1 方案設(shè)計(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ǔ)器。如圖1所示。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代碼更新。
圖1 DSP自舉模塊系統(tǒng)框圖
2 硬件設(shè)計(jì)
本模塊使用C8051F340的片上FLASH作為DSP的外部存儲(chǔ)器。C8051F340通過(guò)標(biāo)準(zhǔn)串行接口與DSP通信,通過(guò)USB與處理代碼格式轉(zhuǎn)換的GUI軟件通信。如圖2所示,虛線框1為3線制的標(biāo)準(zhǔn)串行總線,負(fù)責(zé)數(shù)據(jù)的傳輸。虛線框2為復(fù)位與握手信號(hào)。DSP的bootloader通過(guò)拉低XF引腳通知單片機(jī)DSP已準(zhǔn)備好接收數(shù)據(jù);而單片機(jī)通過(guò)P1.3引腳拉低ˉRS來(lái)復(fù)位DSP。C8051F340與PC機(jī)通過(guò)USB連接。如圖2所示,VBUS為USB電纜VBUS引線的感應(yīng)輸入端,當(dāng)該引腳出現(xiàn)5V高電平信號(hào)時(shí),表示該設(shè)備已經(jīng)和主機(jī)連接好。D+、D-為USB的差分信號(hào)線,D+信號(hào)線接1.5k的上拉電阻R1使USB設(shè)備工作于高速。電容C1、C3為15pF的濾波電容。為了消除差模干擾,兩信號(hào)線連接大小為33pF的電容C2。REGIN為C8051F340片內(nèi)電壓調(diào)節(jié)器的輸入端。VDD為C8051F340片內(nèi)電壓調(diào)節(jié)的3.3V輸出端。通過(guò)將REGIN和VDD短接,C8051F340被配置為USB固件自供電,片內(nèi)穩(wěn)壓器禁止的工作模式。另外,C8051F340電路模塊中,通過(guò)C2調(diào)試接口(包括C2CK時(shí)鐘信號(hào)和C2D雙向數(shù)據(jù)信號(hào))連接JTAG對(duì)單片機(jī)程序進(jìn)行燒寫(xiě)和調(diào)試。
圖2 自舉模塊主要硬件連接關(guān)系圖
[page]
3 軟件設(shè)計(jì)
本系統(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 Laboratories公司為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讀寫(xiě)延時(shí)、打開(kāi)USB器件、向USB器件寫(xiě)數(shù)據(jù)塊、關(guān)閉USB器件。
在成功調(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)用用來(lái)集中描述文件轉(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 //行裝載
圖4 LabVIEW調(diào)用USB主機(jī)API框圖
之后通過(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ù)寫(xiě)入U(xiǎn)SB器件,直到所有文件傳輸完畢,關(guān)閉USB。
圖5 LabVIEW轉(zhuǎn)換DSP程序代碼格式的框圖
[page]
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ù)、擦寫(xiě)FLASH函數(shù)幾個(gè)部分。圖6為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è)為48MHZ以滿足USB全速工作方式的需要、配置單片機(jī)輸出端口為推挽輸出、開(kāi)啟外部中斷0并通過(guò)配置寄存器“IT01CF=0x07”將P0.7配置為INT0的中斷觸發(fā)端口引腳,監(jiān)視DSP所給自舉信號(hào)。
圖6 C8051F340程序流程圖
[page]
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í)序如圖7所示,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微秒來(lái)滿足傳輸兩數(shù)據(jù)間最小CPU時(shí)鐘間隔的要求,程序中w為當(dāng)前傳輸?shù)挠伤膫€(gè)ASCⅡ字符轉(zhuǎn)換而來(lái)的16位無(wú)符號(hào)整形變量。
圖7 單片機(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讀寫(xiě)函數(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é)后寫(xiě)入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ù),寫(xiě)入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++;
}
[page]
4 實(shí)驗(yàn)驗(yàn)證
為測(cè)試該模塊的可行性,以TMS320VC54x目標(biāo)板為基礎(chǔ),設(shè)計(jì)了如下實(shí)驗(yàn)進(jìn)行驗(yàn)證。
實(shí)驗(yàn)第一步首先需要驗(yàn)證GUI軟件控制代碼格式轉(zhuǎn)換,和移植的可行性。利用DSP開(kāi)發(fā)軟件CCS編寫(xiě)一段LCD顯示程序并編譯生成.out文件。通過(guò)JTAG仿真后,LCD上顯示“DSP自舉模塊液晶顯示自舉測(cè)試”等信息。之后去除JTAG進(jìn)行自舉試驗(yàn)。通過(guò)USB將PC機(jī)與C8051F340相連。待GUI軟件成功獲取USB器件編號(hào)并打開(kāi)USB器件后,設(shè)置自舉文件路徑,點(diǎn)擊 “下載更新DSP自舉代碼”按鍵開(kāi)始更新代碼。圖8、圖9為試驗(yàn)結(jié)果。
圖8為GUI前面板的實(shí)驗(yàn)數(shù)據(jù)。圖中兩個(gè)USB檢測(cè)燈在USB連接成功并被功打開(kāi)時(shí)被點(diǎn)亮表明。狀態(tài)顯示區(qū)中的“文件轉(zhuǎn)換執(zhí)行信息”由GUI調(diào)用Hex500.exe軟件之后產(chǎn)生、“DSP自舉代碼文件路徑”為所轉(zhuǎn)換生成的.dat文件路徑,通過(guò)路徑轉(zhuǎn)換為字符串產(chǎn)生、“DSP自舉代碼文件內(nèi)容”,由“讀取文本文件VI”讀取生成的.dat文件產(chǎn)生。實(shí)驗(yàn)數(shù)據(jù)與設(shè)想的一致,表明該模塊已成功完成了程序代碼的格式轉(zhuǎn)換。最下方的燈被點(diǎn)亮并顯示“DSP自舉代碼下載更新完成”表示GUI軟件成功的通過(guò)USB將代碼數(shù)據(jù)更新給C8051F340,DSP自舉代碼更新完成。
圖8 前面板詳細(xì)信息實(shí)驗(yàn)數(shù)據(jù)
圖9為GUI軟件控制DSP代碼文件格式轉(zhuǎn)換部分的框圖在高亮運(yùn)行模式下截取的數(shù)據(jù)。探針[1]為轉(zhuǎn)換完成后所獲得.dat文件的路徑,探針[2]為所得到.dat文件的大小。表明上位機(jī)已成功完成代碼文件格式的轉(zhuǎn)換得到.dat格式文件
圖9 代碼文件格式轉(zhuǎn)換實(shí)驗(yàn)結(jié)果
第二步需驗(yàn)證C8051F340利用FLASH存儲(chǔ)DSP代碼并通過(guò)標(biāo)準(zhǔn)串行自舉控制DSP自舉的可行性。實(shí)驗(yàn)第一步成功之后,將C8051F340與DSP通過(guò)標(biāo)準(zhǔn)串行總線,C8051F340自動(dòng)控制DSP開(kāi)始自舉。圖10為C8051F340在獲取GUI軟件傳送的更新代碼并成功通過(guò)標(biāo)準(zhǔn)串行自舉控制完成DSP自舉的實(shí)物照片。LCD顯示數(shù)據(jù)與通過(guò)JTAG仿真情況下完全一致,證明了該DSP自舉模塊的有效性,且該自舉模塊可實(shí)現(xiàn)一鍵更新DSP代碼文件,方便快速。
圖10 自舉完成實(shí)驗(yàn)實(shí)物圖
5 結(jié)語(yǔ)
本文提出了一種可在線更新程序的自舉模塊。該模塊在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ǔ)量為64kb,除去單片機(jī)的程序占用空間,從0x2200地址開(kāi)始,共可存儲(chǔ)55.5kb左右的DSP程序代碼,滿足大多數(shù)中小DSP應(yīng)用程序的自舉需求,因此該系統(tǒng)可廣泛用于程序代碼不超過(guò)55.5k字節(jié)的DSP系統(tǒng)中。