新聞中心

        EEPW首頁 > 電源與新能源 > 設計應用 > 可在線更新應用程序代碼的DSP自舉模塊

        可在線更新應用程序代碼的DSP自舉模塊

        作者: 時間:2016-12-05 來源:網絡 收藏
        針對現有DSP自舉模塊普遍存在程序代碼更新不便的缺陷,提出了一種可便捷高效地在線更新用戶應用程序代碼的DSP自舉模塊。該模塊由基于LabVIEW的圖形用戶界面(GUI)軟件與C8051F340單片機構成。GUI軟件完成DSP應用程序代碼的格式轉換,并通過驅動USB將轉換完成的程序代碼傳送給C8051F340。C8051F340通過其片上USB外設接收DSP程序代碼并存儲于片上FLASH中,同時借助標準串行總線控制DSP完成應用程序代碼的自舉操作。該模塊采用在線方式,可一鍵實現DSP應用程序代碼的更新升級與自舉操作。

        TMS320VC54x系列DSP作為一種低功耗高速處理器在消費電子、通信等領域應用廣泛[1-2]。通常為實現DSP程序代碼的高速運行,一般需要將DSP的應用程序代碼存儲于DSP片內RAM中運行,但TMS320VC54x處理器是RAM型器件,掉電后DSP不能保存任何用戶應用程序代碼。因此,基于該型DSP的電子系統通常需要設計自舉模塊。所謂“自舉”是指:DSP芯片內的程序引導裝載器(Bootloader)自動地將DSP應用程序代碼從DSP外部非掉電易失存儲器加載到片內RAM中,脫離仿真器模式獨立運行的過程。

        本文引用地址:http://www.104case.com/article/201612/326339.htm

        TMS320VC54x系列DSP有兩類自舉方式:基于靜態存儲器(如:EEPROM、FLASH)的自舉方式和基于處理器的自舉方式。基于靜態存儲器的DSP自舉方式[3-4]使用外擴的靜態存儲器存儲DSP程序代碼,由于該方式無需外加控制器干預,因此具有電路簡單等優點。基于處理器的DSP自舉方式[5-6],利用單片機存儲DSP程序代碼并控制DSP完成自舉,具有可有效控制DSP自舉時機,可靈活選擇自舉通信接口等優勢。然而,無論哪類自舉方式,要更新DSP應用程序代碼都需要先將DSP開發軟件CCS編譯產生的.out程序代碼文件通過一系列的格式轉換,生成DSP自舉所需的程序代碼格式,并將得到的代碼移植到DSP應用系統片外擴展的靜態存儲器或單片機中存儲。顯然,傳統DSP自舉模塊的上述程序代碼更新操作非常麻煩。為此本文提出一種便捷高效的DSP自舉模塊。借助該模塊,用戶無需熟悉DSP自舉設計過程,便可一鍵實現DSP程序代碼的更新升級與自舉操作。

        1 方案設計

        DSP開發軟件CCS編譯生成的.out文件不能直接用來自舉,需要將其進行一系列繁瑣的格式轉換得到合適的格式并移植到DSP的外部存儲器進行自舉[7]。為解決該問題,本模塊通過基于LabVIEW的GUI軟件完成上述轉換并控制代碼移植到外部存儲器。如圖1所示。GUI軟件首先將.out文件轉換為.hex格式,并將得到的.hex文件轉換為方便DSP自舉的.dat格式。之后GUI通過USB將數據傳送給C8051F340單片機完成DSP程序更新。C8051F340是一款可提供USB功能并具有較大FLASH存儲空間的混合信號微控制器。本模塊使用其片上FLASH作為DSP的外部存儲器,可省去外擴存儲設備,節約成本,簡化電路。自舉開始時,單片機將FLASH中的代碼數據通過標準串行自舉方式傳送給DSP,控制DSP的自舉。標準串行自舉與其他自舉模式相比,占用DSP硬件資源少、電路簡單。通過本模塊,開發者可在PC機上實現一鍵完成DSP代碼更新。

        2 硬件設計

        本模塊使用C8051F340的片上FLASH作為DSP的外部存儲器。C8051F340通過標準串行接口與DSP通信,通過USB與處理代碼格式轉換的GUI軟件通信。如圖2所示,虛線框1為3線制的標準串行總線,負責數據的傳輸。虛線框2為復位與握手信號。DSP的bootloader通過拉低XF引腳通知單片機DSP已準備好接收數據;而單片機通過P1.3引腳拉低ˉRS來復位DSP。C8051F340與PC機通過USB連接。如圖2所示,VBUS為USB電纜VBUS引線的感應輸入端,當該引腳出現5V高電平信號時,表示該設備已經和主機連接好。D+、D-為USB的差分信號線,D+信號線接1.5k的上拉電阻R1使USB設備工作于高速。電容C1、C3為15pF的濾波電容。為了消除差模干擾,兩信號線連接大小為33pF的電容C2。REGIN為C8051F340片內電壓調節器的輸入端。VDD為C8051F340片內電壓調節的3.3V輸出端。通過將REGIN和VDD短接,C8051F340被配置為USB固件自供電,片內穩壓器禁止的工作模式。另外C8051F340電路模塊中,通過C2調試接口(包括C2CK時鐘信號和C2D雙向數據信號)連接JTAG對單片機程序進行燒寫和調試。

        3 軟件設計

        本系統主要通過GUI軟件完成DSP用戶應用代碼的格式轉換和調用USB主機API控制USB傳輸數據;通過C8051F340程序調用USB器件API接收數據存入片內FLASH中并通過標準串行通信控制DSP的自舉。下面分別介紹各軟件設計的功能和具體流程。

        3.1 基于LabVIEW的GUI程序設計

        LabVIEW開發的程序一般由一個或多個VI組成,所有VI都可分為前面板和框圖兩部分。前面板是VI的交互界面,用戶輸入數據通過前面板傳遞給框圖,計算和分析結果在前面板上以不同方式顯示出來。圖3為本模塊的GUI前面板。如圖所示前面板分為“輸入配置區”和“狀態顯示區”。通過在前面板的“輸入配置區”設置文件路徑進行DSP代碼文件的二次更新。“狀態顯示區”可實時顯示USB連接狀況、文件轉換信息、自舉代碼文件內容等詳細信息。

        框圖是圖形化的程序代碼,主要完成兩個任務:調用USB主機的API函數控制USB數據傳輸和控制代碼文件格式轉換。

        借助Silicon Laboratories公司為USB驅動程序開發提供的USBXpress,可以簡便的實現在PC機上通過GUI軟件與作為USB器件的C8051F340單片機的USB通信。USBXpress提供了10個USB主機API函數,通過LabVIEW中的CLF(調用庫函數節點)調用USBXpress提供的USB主機API函數,便可訪問USB底層硬件。圖4為本設計LabVIEW上位機程序調用API的框圖。圖中VI作用分別是獲取USB器件編號、獲取USB器件序列碼、設置USB讀寫延時、打開USB器件、向USB器件寫數據塊、關閉USB器件。

        在成功調用SI_Open()函數打開USB器件,并通過“file path control.vi”控件獲取待轉換文件的具體路徑后,GUI軟件對定位的代碼文件開始進行轉換。如圖5框圖程序所示:首先通過“Exec.vi”(“執行系統命令”VI)調用CCS軟件環境提供的DOS批處理文件Hex500.exe軟件(與自舉文件位于同一個目錄)將.out文件轉換為.hex文件。Hex500.exe在DOS環境下運行需要輸入大量轉換配置文件,因此GUI需同時調用用來集中描述文件轉換所需參數信息的.cmd文件。.cmd文件內容及注釋如下:

        bootloader.out //待轉化的程序文件

        -o bootloader.hex //輸出文件名

        -map bootloader.map //生成存儲器映像文件

        -boot //生成加載表

        -I //輸出文件為Intel Hex文件格式

        -e _c_int00 //程序入口地址

        -memwidth 16 //標系統的存儲器為16位

        -romwidth 16 //存儲器芯片的位寬為16位

        -bootorg SERIAL //行裝載

        之后通過“Exec.vi”函數調用hex-to-dat.exe軟件將.hex格式轉換為.dat格式。最終在文件格式轉換完畢之后提取代碼并轉換為數組,在循環中調用SI_Open()函數以每次512字節的速度將數據寫入USB器件,直到所有文件傳輸完畢,關閉USB。

        3.2 C8051F340程序設計

        C8051F340通過USB從GUI軟件接收DSP程序代碼并存儲到片內FLASH中,之后通過標準串行接口將代碼傳送給DSP進行自舉。C8051F340程序主要包括初始化函數、自舉函數、USB驅動函數、擦寫FLASH函數幾個部分。圖6為C8051F340程序的流程圖。

        3.2.1 初始化程序

        程序初始化部分主要包括USB設備初始化和C8051F340單片機初始化。USB初始化通過調用USBXpress提供的10個USB器件API函數實現,包括調用USB_Clock_Start()函數初始化USB總線時鐘、調用USB_Init()函數使能USB總線、調用USB_Init_Enable()函數使能API中斷;C8051F340單片機初始化中將單片機時鐘設為48MHZ以滿足USB全速工作方式的需要、配置單片機輸出端口為推挽輸出、開啟外部中斷0并通過配置寄存器“IT01CF=0x07”將P0.7配置為INT0的中斷觸發端口引腳,監視DSP所給自舉信號。

        3.2.2 自舉函數

        DSP啟動速度比C8051F340快,因此自舉之前需先復位DSP并初始化SPI接口,等待DSP的XF引腳觸發INT0中斷后啟動自舉操作。本程序使用16位標準串行方式對DSP自舉。通信時序如圖7所示,BFSR0脈沖之后可傳輸一個16位的數據,傳輸的每個16位數據之間需至少保證40個DSP時鐘周期的延時時間。且單片機時鐘頻率(BCLKR0)不可超過DSP時鐘頻率的1/2。標準串行自舉代碼如下所示,程序中將BFSR0拉高后,傳輸一個字節的數據,并通過調用延時函數Delaynum(20)延時20微秒來滿足傳輸兩數據間最小CPU時鐘間隔的要求,程序中w為當前傳輸的由四個ASCⅡ字符轉換而來的16位無符號整形變量。

        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驅動函數、FLASH讀寫函數

        USB中斷函數通過調用Block_Read()函數接收來自GUI軟件的代碼數據,并存入TempStorage[]數組。ReadStageLength為每次所讀取的文件大小,最大為64字節(一個數據塊大小)。因GUI軟件每次發送512字節,FLASH中每512字節為一頁,故下位機中每讀取512字節后寫入FLASH。如下代碼所示BytesRead為已讀取數據的大小,當C8051F340通過USB接收了一頁FLASH可容納最大數據512字節(Block_PR_Page為每頁FLASH可容納最多數據塊= 512/64)或者GUI軟件發送的最后一組數據,寫入FLASH。PageIndices[0]為下位機自舉的基指針,指向FLASH中0x2000開始的地址,其中0x2000~0x2200用來存放接收數據信息(大小、所含數據塊量);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++;

        }

        4 實驗驗證

        為測試該模塊的可行性,以TMS320VC54x目標板為基礎,設計了如下實驗進行驗證。

        實驗第一步首先需要驗證GUI軟件控制代碼格式轉換,和移植的可行性。利用DSP開發軟件CCS編寫一段LCD顯示程序并編譯生成.out文件。通過JTAG仿真后,LCD上顯示“DSP自舉模塊液晶顯示自舉測試”等信息。之后去除JTAG進行自舉試驗。通過USB將PC機與C8051F340相連。待GUI軟件成功獲取USB器件編號并打開USB器件后,設置自舉文件路徑,點擊 “下載更新DSP自舉代碼”按鍵開始更新代碼。圖8、圖9為試驗結果。

        圖8為GUI前面板的實驗數據。圖中兩個USB檢測燈在USB連接成功并被功打開時被點亮表明。狀態顯示區中的“文件轉換執行信息”由GUI調用Hex500.exe軟件之后產生、“DSP自舉代碼文件路徑”為所轉換生成的.dat文件路徑,通過路徑轉換為字符串產生、“DSP自舉代碼文件內容”,由“讀取文本文件VI”讀取生成的.dat文件產生。實驗數據與設想的一致,表明該模塊已成功完成了程序代碼的格式轉換。最下方的燈被點亮并顯示“DSP自舉代碼下載更新完成”表示GUI軟件成功的通過USB將代碼數據更新給C8051F340,DSP自舉代碼更新完成。

        圖9為GUI軟件控制DSP代碼文件格式轉換部分的框圖在高亮運行模式下截取的數據。探針[1]為轉換完成后所獲得.dat文件的路徑,探針[2]為所得到.dat文件的大小。表明上位機已成功完成代碼文件格式的轉換得到.dat格式文件

        第二步需驗證C8051F340利用FLASH存儲DSP代碼并通過標準串行自舉控制DSP自舉的可行性。實驗第一步成功之后,將C8051F340與DSP通過標準串行總線,C8051F340自動控制DSP開始自舉。圖10為C8051F340在獲取GUI軟件傳送的更新代碼并成功通過標準串行自舉控制完成DSP自舉的實物照片。LCD顯示數據與通過JTAG仿真情況下完全一致,證明了該DSP自舉模塊的有效性,且該自舉模塊可實現一鍵更新DSP代碼文件,方便快速。

        5 結語

        本文提出了一種可在線更新程序的自舉模塊。該模塊在GUI軟件中將DSP程序代碼進行格式轉換并通過利用USB將代碼數據導入C8051F340單片機的片內FLASH中存儲。C8051F340通過標準串行總線控制DSP進行自舉。利用該模塊,用戶更新DSP程序代碼可完全在計算機上操作,無需了解自舉的具體細節,實現一鍵更新代碼;同時該自舉模塊可在短短數秒內完成代碼更新,從而大大減輕了開發難度和縮短開發周期。另外,由于單片機FLASH存儲量為64kb,除去單片機的程序占用空間,從0x2200地址開始,共可存儲55.5kb左右的DSP程序代碼,滿足大多數中小DSP應用程序的自舉需求,因此該系統可廣泛用于程序代碼不超過55.5k字節的DSP系統中。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 铜川市| 双桥区| 乐至县| 雷波县| 辽宁省| 神农架林区| 德兴市| 新邵县| 益阳市| 龙泉市| 原平市| 南涧| 蕲春县| 盐山县| 庄浪县| 石台县| 时尚| 偃师市| 襄汾县| 红原县| 太仆寺旗| 天峨县| 桃园县| 莒南县| 雅江县| 喀喇| 陈巴尔虎旗| 天峻县| 高尔夫| 阿克苏市| 七台河市| 卫辉市| 武穴市| 凯里市| 金阳县| 鲁山县| 富锦市| 南宫市| 古浪县| 广州市| 宁德市|