【導讀】本文提出了一種可在線更新程序的自舉模塊。用該模塊,用戶更新DSP程序代碼可完全在計算機上操作,無需了解自舉的具體細節(jié),實現(xiàn)一鍵更新代碼;同時該自舉模塊可在短短數(shù)秒內(nèi)完成代碼更新,從而大大減輕了開發(fā)難度和縮短開發(fā)周期。
針對現(xiàn)有DSP自舉模塊普遍存在程序代碼更新不便的缺陷,提出了一種可便捷高效地在線更新用戶應用程序代碼的DSP自舉模塊。該模塊由基于LabVIEW的圖形用戶界面(GUI)軟件與C8051F340單片機構(gòu)成。GUI軟件完成DSP應用程序代碼的格式轉(zhuǎn)換,并通過驅(qū)動USB將轉(zhuǎn)換完成的程序代碼傳送給C8051F340。C8051F340通過其片上USB外設接收DSP程序代碼并存儲于片上FLASH中,同時借助標準串行總線控制DSP完成應用程序代碼的自舉操作。該模塊采用在線方式,可一鍵實現(xiàn)DSP應用程序代碼的更新升級與自舉操作。
TMS320VC54x系列DSP作為一種低功耗高速處理器在消費電子、通信等領域應用廣泛[1-2]。通常為實現(xiàn)DSP程序代碼的高速運行,一般需要將DSP的應用程序代碼存儲于DSP片內(nèi)RAM中運行,但TMS320VC54x處理器是RAM型器件,掉電后DSP不能保存任何用戶應用程序代碼。因此,基于該型DSP的電子系統(tǒng)通常需要設計自舉模塊。所謂“自舉”是指:DSP芯片內(nèi)的程序引導裝載器(Bootloader)自動地將DSP應用程序代碼從DSP外部非掉電易失存儲器加載到片內(nèi)RAM中,脫離仿真器模式獨立運行的過程。
TMS320VC54x系列DSP有兩類自舉方式:基于靜態(tài)存儲器(如:EEPROM、FLASH)的自舉方式和基于處理器的自舉方式?;陟o態(tài)存儲器的DSP自舉方式[3-4]使用外擴的靜態(tài)存儲器存儲DSP程序代碼,由于該方式無需外加控制器干預,因此具有電路簡單等優(yōu)點?;谔幚砥鞯腄SP自舉方式[5-6],利用單片機存儲DSP程序代碼并控制DSP完成自舉,具有可有效控制DSP自舉時機,可靈活選擇自舉通信接口等優(yōu)勢。然而,無論哪類自舉方式,要更新DSP應用程序代碼都需要先將DSP開發(fā)軟件CCS編譯產(chǎn)生的.out程序代碼文件通過一系列的格式轉(zhuǎn)換,生成DSP自舉所需的程序代碼格式,并將得到的代碼移植到DSP應用系統(tǒng)片外擴展的靜態(tài)存儲器或單片機中存儲。顯然,傳統(tǒng)DSP自舉模塊的上述程序代碼更新操作非常麻煩。為此本文提出一種便捷高效的DSP自舉模塊。借助該模塊,用戶無需熟悉DSP自舉設計過程,便可一鍵實現(xiàn)DSP程序代碼的更新升級與自舉操作。
1 方案設計
DSP開發(fā)軟件CCS編譯生成的.out文件不能直接用來自舉,需要將其進行一系列繁瑣的格式轉(zhuǎn)換得到合適的格式并移植到DSP的外部存儲器進行自舉[7]。為解決該問題,本模塊通過基于LabVIEW的GUI軟件完成上述轉(zhuǎn)換并控制代碼移植到外部存儲器。如圖1所示。GUI軟件首先將.out文件轉(zhuǎn)換為.hex格式,并將得到的.hex文件轉(zhuǎn)換為方便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代碼更新。
圖1 DSP自舉模塊系統(tǒng)框圖
2 硬件設計
本模塊使用C8051F340的片上FLASH作為DSP的外部存儲器。C8051F340通過標準串行接口與DSP通信,通過USB與處理代碼格式轉(zhuǎn)換的GUI軟件通信。如圖2所示,虛線框1為3線制的標準串行總線,負責數(shù)據(jù)的傳輸。虛線框2為復位與握手信號。DSP的bootloader通過拉低XF引腳通知單片機DSP已準備好接收數(shù)據(jù);而單片機通過P1.3引腳拉低ˉRS來復位DSP。C8051F340與PC機通過USB連接。如圖2所示,VBUS為USB電纜VBUS引線的感應輸入端,當該引腳出現(xiàn)5V高電平信號時,表示該設備已經(jīng)和主機連接好。D+、D-為USB的差分信號線,D+信號線接1.5k的上拉電阻R1使USB設備工作于高速。電容C1、C3為15pF的濾波電容。為了消除差模干擾,兩信號線連接大小為33pF的電容C2。REGIN為C8051F340片內(nèi)電壓調(diào)節(jié)器的輸入端。VDD為C8051F340片內(nèi)電壓調(diào)節(jié)的3.3V輸出端。通過將REGIN和VDD短接,C8051F340被配置為USB固件自供電,片內(nèi)穩(wěn)壓器禁止的工作模式。另外,C8051F340電路模塊中,通過C2調(diào)試接口(包括C2CK時鐘信號和C2D雙向數(shù)據(jù)信號)連接JTAG對單片機程序進行燒寫和調(diào)試。
圖2 自舉模塊主要硬件連接關(guān)系圖
[page]
3 軟件設計
本系統(tǒng)主要通過GUI軟件完成DSP用戶應用代碼的格式轉(zhuǎn)換和調(diào)用USB主機API控制USB傳輸數(shù)據(jù);通過C8051F340程序調(diào)用USB器件API接收數(shù)據(jù)存入片內(nèi)FLASH中并通過標準串行通信控制DSP的自舉。下面分別介紹各軟件設計的功能和具體流程。
3.1 基于LabVIEW的GUI程序設計
LabVIEW開發(fā)的程序一般由一個或多個VI組成,所有VI都可分為前面板和框圖兩部分。前面板是VI的交互界面,用戶輸入數(shù)據(jù)通過前面板傳遞給框圖,計算和分析結(jié)果在前面板上以不同方式顯示出來。圖3為本模塊的GUI前面板。如圖所示前面板分為“輸入配置區(qū)”和“狀態(tài)顯示區(qū)”。通過在前面板的“輸入配置區(qū)”設置文件路徑進行DSP代碼文件的二次更新。“狀態(tài)顯示區(qū)”可實時顯示USB連接狀況、文件轉(zhuǎn)換信息、自舉代碼文件內(nèi)容等詳細信息。
圖3 基于LabVIEW的GUI前面板
框圖是圖形化的程序代碼,主要完成兩個任務:調(diào)用USB主機的API函數(shù)控制USB數(shù)據(jù)傳輸和控制代碼文件格式轉(zhuǎn)換。
借助Silicon Laboratories公司為USB驅(qū)動程序開發(fā)提供的USBXpress,可以簡便的實現(xiàn)在PC機上通過GUI軟件與作為USB器件的C8051F340單片機的USB通信。USBXpress提供了10個USB主機API函數(shù),通過LabVIEW中的CLF(調(diào)用庫函數(shù)節(jié)點)調(diào)用USBXpress提供的USB主機API函數(shù),便可訪問USB底層硬件。圖4為本設計LabVIEW上位機程序調(diào)用API的框圖。圖中VI作用分別是獲取USB器件編號、獲取USB器件序列碼、設置USB讀寫延時、打開USB器件、向USB器件寫數(shù)據(jù)塊、關(guān)閉USB器件。
在成功調(diào)用SI_Open()函數(shù)打開USB器件,并通過“file path control.vi”控件獲取待轉(zhuǎn)換文件的具體路徑后,GUI軟件對定位的代碼文件開始進行轉(zhuǎn)換。如圖5框圖程序所示:首先通過“Exec.vi”(“執(zhí)行系統(tǒng)命令”VI)調(diào)用CCS軟件環(huán)境提供的DOS批處理文件Hex500.exe軟件(與自舉文件位于同一個目錄)將.out文件轉(zhuǎn)換為.hex文件。Hex500.exe在DOS環(huán)境下運行需要輸入大量轉(zhuǎn)換配置文件,因此GUI需同時調(diào)用用來集中描述文件轉(zhuǎn)換所需參數(shù)信息的.cmd文件。.cmd文件內(nèi)容及注釋如下:
bootloader.out //待轉(zhuǎn)化的程序文件
-o bootloader.hex //輸出文件名
-map bootloader.map //生成存儲器映像文件
-boot //生成加載表
-I //輸出文件為Intel Hex文件格式
-e _c_int00 //程序入口地址
-memwidth 16 //標系統(tǒng)的存儲器為16位
-romwidth 16 //存儲器芯片的位寬為16位
-bootorg SERIAL //行裝載
圖4 LabVIEW調(diào)用USB主機API框圖
之后通過“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ù)寫入USB器件,直到所有文件傳輸完畢,關(guān)閉USB。
圖5 LabVIEW轉(zhuǎn)換DSP程序代碼格式的框圖
[page]
3.2 C8051F340程序設計
C8051F340通過USB從GUI軟件接收DSP程序代碼并存儲到片內(nèi)FLASH中,之后通過標準串行接口將代碼傳送給DSP進行自舉。C8051F340程序主要包括初始化函數(shù)、自舉函數(shù)、USB驅(qū)動函數(shù)、擦寫FLASH函數(shù)幾個部分。圖6為C8051F340程序的流程圖。
3.2.1 初始化程序
程序初始化部分主要包括USB設備初始化和C8051F340單片機初始化。USB初始化通過調(diào)用USBXpress提供的10個USB器件API函數(shù)實現(xiàn),包括調(diào)用USB_Clock_Start()函數(shù)初始化USB總線時鐘、調(diào)用USB_Init()函數(shù)使能USB總線、調(diào)用USB_Init_Enable()函數(shù)使能API中斷;C8051F340單片機初始化中將單片機時鐘設為48MHZ以滿足USB全速工作方式的需要、配置單片機輸出端口為推挽輸出、開啟外部中斷0并通過配置寄存器“IT01CF=0x07”將P0.7配置為INT0的中斷觸發(fā)端口引腳,監(jiān)視DSP所給自舉信號。
圖6 C8051F340程序流程圖
[page]
3.2.2 自舉函數(shù)
DSP啟動速度比C8051F340快,因此自舉之前需先復位DSP并初始化SPI接口,等待DSP的XF引腳觸發(fā)INT0中斷后啟動自舉操作。本程序使用16位標準串行方式對DSP自舉。通信時序如圖7所示,BFSR0脈沖之后可傳輸一個16位的數(shù)據(jù),傳輸?shù)拿總€16位數(shù)據(jù)之間需至少保證40個DSP時鐘周期的延時時間。且單片機時鐘頻率(BCLKR0)不可超過DSP時鐘頻率的1/2。標準串行自舉代碼如下所示,程序中將BFSR0拉高后,傳輸一個字節(jié)的數(shù)據(jù),并通過調(diào)用延時函數(shù)Delaynum(20)延時20微秒來滿足傳輸兩數(shù)據(jù)間最小CPU時鐘間隔的要求,程序中w為當前傳輸?shù)挠伤膫€ASCⅡ字符轉(zhuǎn)換而來的16位無符號整形變量。
圖7 單片機標準串行自舉時序圖
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ū)動函數(shù)、FLASH讀寫函數(shù)
USB中斷函數(shù)通過調(diào)用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++;
}
[page]
4 實驗驗證
為測試該模塊的可行性,以TMS320VC54x目標板為基礎,設計了如下實驗進行驗證。
實驗第一步首先需要驗證GUI軟件控制代碼格式轉(zhuǎn)換,和移植的可行性。利用DSP開發(fā)軟件CCS編寫一段LCD顯示程序并編譯生成.out文件。通過JTAG仿真后,LCD上顯示“DSP自舉模塊液晶顯示自舉測試”等信息。之后去除JTAG進行自舉試驗。通過USB將PC機與C8051F340相連。待GUI軟件成功獲取USB器件編號并打開USB器件后,設置自舉文件路徑,點擊 “下載更新DSP自舉代碼”按鍵開始更新代碼。圖8、圖9為試驗結(jié)果。
圖8為GUI前面板的實驗數(shù)據(jù)。圖中兩個USB檢測燈在USB連接成功并被功打開時被點亮表明。狀態(tài)顯示區(qū)中的“文件轉(zhuǎn)換執(zhí)行信息”由GUI調(diào)用Hex500.exe軟件之后產(chǎn)生、“DSP自舉代碼文件路徑”為所轉(zhuǎn)換生成的.dat文件路徑,通過路徑轉(zhuǎn)換為字符串產(chǎn)生、“DSP自舉代碼文件內(nèi)容”,由“讀取文本文件VI”讀取生成的.dat文件產(chǎn)生。實驗數(shù)據(jù)與設想的一致,表明該模塊已成功完成了程序代碼的格式轉(zhuǎn)換。最下方的燈被點亮并顯示“DSP自舉代碼下載更新完成”表示GUI軟件成功的通過USB將代碼數(shù)據(jù)更新給C8051F340,DSP自舉代碼更新完成。
圖8 前面板詳細信息實驗數(shù)據(jù)
圖9為GUI軟件控制DSP代碼文件格式轉(zhuǎn)換部分的框圖在高亮運行模式下截取的數(shù)據(jù)。探針[1]為轉(zhuǎn)換完成后所獲得.dat文件的路徑,探針[2]為所得到.dat文件的大小。表明上位機已成功完成代碼文件格式的轉(zhuǎn)換得到.dat格式文件
圖9 代碼文件格式轉(zhuǎn)換實驗結(jié)果
第二步需驗證C8051F340利用FLASH存儲DSP代碼并通過標準串行自舉控制DSP自舉的可行性。實驗第一步成功之后,將C8051F340與DSP通過標準串行總線,C8051F340自動控制DSP開始自舉。圖10為C8051F340在獲取GUI軟件傳送的更新代碼并成功通過標準串行自舉控制完成DSP自舉的實物照片。LCD顯示數(shù)據(jù)與通過JTAG仿真情況下完全一致,證明了該DSP自舉模塊的有效性,且該自舉模塊可實現(xiàn)一鍵更新DSP代碼文件,方便快速。
圖10 自舉完成實驗實物圖
5 結(jié)語
本文提出了一種可在線更新程序的自舉模塊。該模塊在GUI軟件中將DSP程序代碼進行格式轉(zhuǎn)換并通過利用USB將代碼數(shù)據(jù)導入C8051F340單片機的片內(nèi)FLASH中存儲。C8051F340通過標準串行總線控制DSP進行自舉。利用該模塊,用戶更新DSP程序代碼可完全在計算機上操作,無需了解自舉的具體細節(jié),實現(xiàn)一鍵更新代碼;同時該自舉模塊可在短短數(shù)秒內(nèi)完成代碼更新,從而大大減輕了開發(fā)難度和縮短開發(fā)周期。另外,由于單片機FLASH存儲量為64kb,除去單片機的程序占用空間,從0x2200地址開始,共可存儲55.5kb左右的DSP程序代碼,滿足大多數(shù)中小DSP應用程序的自舉需求,因此該系統(tǒng)可廣泛用于程序代碼不超過55.5k字節(jié)的DSP系統(tǒng)中。