DSP程序在線升級報(bào)告(本人覺得最給力的資料)_第1頁
DSP程序在線升級報(bào)告(本人覺得最給力的資料)_第2頁
DSP程序在線升級報(bào)告(本人覺得最給力的資料)_第3頁
DSP程序在線升級報(bào)告(本人覺得最給力的資料)_第4頁
DSP程序在線升級報(bào)告(本人覺得最給力的資料)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上DSP程序在線升級唐俊松2015/12/041. 引言一般而言,DSP程序更新是在CCS環(huán)境下通過JTAG接口來實(shí)現(xiàn)的。但JTAG燒寫程序只能實(shí)現(xiàn)一對一燒寫(即電腦到DSP),且不能遠(yuǎn)距離燒寫程序。而當(dāng)產(chǎn)品發(fā)布后或需要同時(shí)升級多個(gè)DSP程序時(shí),通過JTAG燒寫程序則很難實(shí)現(xiàn)。在線程序升級的主要思想是通過串口通信更新程序,通過串口通信可實(shí)現(xiàn)程序遠(yuǎn)程升級且可同時(shí)實(shí)現(xiàn)對多個(gè)DSP的程序更新,這有效地解決了JTAG燒寫程序所存在的弊端。圖1.1 通過不同方式實(shí)現(xiàn)DSP程序更新2. 程序在線升級的基本思想專心-專注-專業(yè)基于串口通信的程序在線升級功能框圖如圖2.1所示,底層程序

2、(Prog Local)和應(yīng)用程序(Prog App)分別由兩個(gè)獨(dú)立的CCS Project產(chǎn)生。底層程序(Prog Local)是產(chǎn)品發(fā)布前通過JTAG燒寫固化在DSP指定Flash空間中的程序,不允許用戶修改和擦除,主要用于實(shí)現(xiàn)與上位機(jī)的通信,同時(shí)在需要升級程序時(shí)將上位機(jī)發(fā)送過來的程序代碼燒寫到FLASH中。應(yīng)用程序(Prog App)是可以更新的程序。通過CCS編譯產(chǎn)生程序代碼文件(hex),然后通過RS232通信將程序代碼發(fā)送到DSP,繼而由底層程序(Prog Local)將應(yīng)用程序代碼燒寫到應(yīng)用程序所對應(yīng)FLSH空間(Prog App)中。圖2.1 DSP程序在線升級功能框圖在線升級

3、程序流程圖如圖2.2所示。 DSP上電復(fù)位后先運(yùn)行底層程序,在底層程序中判斷是否需要升級,如不需要升級,則跳轉(zhuǎn)到應(yīng)用程序執(zhí)行。如需要升級,則擦除應(yīng)用程序?qū)?yīng)FLASH區(qū),并將升級代碼寫入到應(yīng)用程序FLASH區(qū)中。圖2.2 DSP程序更新流程圖3. 在線程序升級的具體實(shí)現(xiàn)3.1 FLASH分配要實(shí)現(xiàn)程序在線升級,必須使底層程序和應(yīng)用程序相互獨(dú)立。如圖2.1所示,本項(xiàng)目將底層程序(Local Program)配置在FLASH A中,應(yīng)用程序(Application Program)配置在FLASH E中,從而實(shí)現(xiàn)底層程序與應(yīng)用程序的獨(dú)立。實(shí)現(xiàn)程序相互獨(dú)立需通過配置cmd文件完成,具體配置方法見附錄

4、1。圖3.1 DSP FLASH分區(qū)示意圖3. 2 應(yīng)用程序更新代碼產(chǎn)生需要更新的應(yīng)用程序代碼是通過CCS Project A編譯產(chǎn)生的,但CCS編譯生成的是具有模塊化格式的目標(biāo)文件(.out文件),該文件中的代碼和數(shù)據(jù)分別存放在不同的段中,因而不能直接用來燒寫Flash,需將其轉(zhuǎn)換為能識(shí)別的數(shù)據(jù)格式(hex文件)(hex數(shù)據(jù)文件格式詳見附錄4)。生成hex文件后,通過上位機(jī)讀取hex文件數(shù)據(jù),并將數(shù)據(jù)通過RS232通信發(fā)送至DSP。CCS自帶工具h(yuǎn)ex2000exe可實(shí)現(xiàn).out文件到.hex文件的轉(zhuǎn)換。(轉(zhuǎn)換方法見附錄6) 圖3.2 應(yīng)用程序代碼產(chǎn)生方法3.3 底層程序(Local Pro

5、g)底層程序主要實(shí)現(xiàn)兩個(gè)功能:(1)與上位機(jī)通信;(2)升級時(shí),將串口接收到的數(shù)據(jù)燒寫至Flash的指定區(qū)域。底層程序主要實(shí)現(xiàn)以下功能,其流程圖如右圖所示:(1) 與上位機(jī)通信,判斷是否升級DSP上電復(fù)位后與上位機(jī)通信,判斷是否需要升級。若上位機(jī)發(fā)送的是升級命令,則跳轉(zhuǎn)到底層程序中升級部分執(zhí)行;否則,跳轉(zhuǎn)到原有的應(yīng)用程序處執(zhí)行。(2) 從上位機(jī)接受程序代碼并校驗(yàn)接收上位機(jī)發(fā)送的應(yīng)用程序代碼并保存到DSP指定內(nèi)存中(RAM 區(qū)),(如何將數(shù)據(jù)保存到指定內(nèi)存,詳見附錄2)。與此同時(shí),需校驗(yàn)接收數(shù)據(jù)是否準(zhǔn)確。(3) 燒寫程序的搬移由于DSP不支持對FLASH燒寫的同時(shí)在FLASH中運(yùn)行程序,因此負(fù)責(zé)

6、燒寫Flash的這部分程序應(yīng)搬移至片內(nèi)RAM執(zhí)行。(如何實(shí)現(xiàn)程序搬移,詳見附錄3)(4) 燒寫程序代碼搬移結(jié)束后,將之前RAM中接受到的程序代碼燒寫至指定Flash扇區(qū),該步驟通過調(diào)用Flash28335_API庫函數(shù)完成(Flash28335_API的使用請看附件中FLASH_API文檔)。4. 總結(jié) 實(shí)現(xiàn)程序在線升級的主要難點(diǎn)是如何實(shí)現(xiàn)底層程序和應(yīng)用程序相互獨(dú)立,以及如何通過CCS產(chǎn)生需要更新的應(yīng)用代碼。本報(bào)告首先介紹了DSP程序在線升級的主要思想,然后對程序在線升級的實(shí)現(xiàn)方法作了簡單介紹,并在附錄中給出了具體實(shí)現(xiàn)過程中可能會(huì)遇到的問題及解決辦法。附錄1 底層程序和應(yīng)用程序cmd配置要實(shí)現(xiàn)

7、如圖4.1所示的FLASH分配,須通過配置底層程序和應(yīng)用程序cmd文件完成。其中底層程序?qū)?yīng)CCS Project L,配置其cmd文件使其程序分配在FLASH A區(qū);應(yīng)用程序?qū)?yīng)CCS Project A,配置其cmd文件使其程序分配在FLASH E區(qū)。圖4.1 DSP FLASH分區(qū)示意圖1.1 底層程序cmd配置DSP F28335上電復(fù)位后,當(dāng)硬件配置為FLASH啟動(dòng)時(shí),程序指針將跳轉(zhuǎn)到Flash的0x33FFF6處(F28335啟動(dòng)過程,詳見附錄5)。由于這個(gè)地址是固定的,因此底層程序必須燒寫在以這個(gè)地址為起始地址的空間內(nèi),即底層程序cmd配置應(yīng)為:MEMORYPAGE 0 :

8、60;  BEGIN: origin = 0x33FFF6, length = 0x   /* Boot to FLASH will go here     */.SECTIONS.codestart           : > BEGIN       PAGE = 0.與此同時(shí),底層程序所有程序代碼段應(yīng)全部燒寫到FLASH A中:MEMORYPAGE 0 : FLASHA : origin = 0x, length = 0x007F80 /* on

9、-chip FLASH */.SECTIONS.cinit : > FLASHA PAGE = 0.pinit : > FLASHA, PAGE = 0.text : > FLASHA PAGE = 0.1.2 應(yīng)用程序cmd配置采用絕對地址跳轉(zhuǎn)實(shí)現(xiàn)由底層程序到應(yīng)用程序的跳轉(zhuǎn),為保證程序正常執(zhí)行,其跳轉(zhuǎn)地址必須固定,且該地址在應(yīng)用程序中的位置必須固定。將應(yīng)用程序的首地址作為跳轉(zhuǎn)地址,即跳轉(zhuǎn)地址固定為FLASH E的起始地址:0x,如圖4.2所示。圖4.2 應(yīng)用程序FLASH示意圖采用絕對地址跳轉(zhuǎn)實(shí)現(xiàn)從底層程序跳轉(zhuǎn)到應(yīng)用程序。跳轉(zhuǎn)指令為:#define Jump_App_Pro

10、gram (void(*)(void)0x /*use the Flash E sector to save the application program */(*Jump_App_Program)(); /*Jump to the application program */同時(shí)應(yīng)配置Prog App 的程序起始地址為從(FLASH E)起始地址0x開始,對應(yīng)CMD配置為:MEMORYPAGE 0 : BEGIN : origin = 0x, length = 0x /*0x is the start address of FLASH E */.SECTIONS.codestar

11、t           : > BEGIN       PAGE = 0 /* codestart is the start address of the program*/.與此同時(shí),底層程序所有程序代碼段應(yīng)全部燒寫到FLASH E中:MEMORYPAGE 0 : FLASHE : origin = 0x, length = 0x007F80 /* on-chip FLASH */.SECTIONS.cinit : > FLASHE PAGE = 0.pinit : > FLASHE,

12、 PAGE = 0.text : > FLASHE PAGE = 0.附錄2: 如何將程序和變量放到指定位置在CCS編程中,如果我們不指定變量的存放位置,編譯器會(huì)自動(dòng)的給變量分配一個(gè)位置,但是如果有時(shí)候需要把變量放在一個(gè)特定的空間內(nèi),我們應(yīng)該如何操作呢,CCS提供了如下的兩個(gè)指令:#pragma CODE_SECTION#pragma DATA_SECTION其中DATA_SECTION是針對數(shù)據(jù)空間的,CODE_SECTION是針對程序空間的,具體的使用辦法是:#pragma DATA_SECTION(buffer, ”DATA_sect”)char buffer512; /buffe

13、r為一數(shù)組#pragma CODE_SECTION(fun, ”CODE_sect”)Int fun(); /fun 為任意函數(shù)與此同時(shí),在CMD文件中為DATA_sect、CODE_sect開辟空間:DATA_sect : > RAML2 PAGE = 1 CODE_sec : > FLASHE PAGE = 0 附錄3:如何將FALSH中程序搬移到RAM中運(yùn)行CCS中經(jīng)常會(huì)遇到如下語句:MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart)它的作用是將ramfuncs段復(fù)制到內(nèi)存中

14、然后運(yùn)行。CMD文件中ramfuncs的定義如下;ramfuncs   : LOAD = FLASHD,                          RUN = RAML0,                          LOAD_START(_RamfuncsLoadStart),  &

15、#160;                      LOAD_END(_RamfuncsLoadEnd),                         RUN_START(_RamfuncsRunStart),                    &#

16、160;    PAGE = 0第1行表示該段的裝載在PAGA0的FLASHD中第2行表示該段的運(yùn)行地址在PAGE0的RAML0中LOAD_ START(_RamfuncsLoadStart)令編譯器創(chuàng)建了一個(gè)變量RamfuncsLoadStart,該變量指向段ramfuncs的裝載地址的首地址(LOAD_ START為編譯偽指令,請見CCS的幫助文檔);LOAD_ START(_RamfuncsLoadEnd)令編譯器創(chuàng)建了一個(gè)變量RamfuncsLoadEnd,該變量指向段ramfuncs的裝載地址的末地址(LOAD_ END為編譯偽指令,請見CCS的幫助文檔);LOA

17、D_ START(_RamfuncsRunStart)令編譯器創(chuàng)建了一個(gè)變量RamfuncsRunStart,該變量指向段ramfuncs的運(yùn)行地址的首地址(LOAD_ START為編譯偽指令,請見CCS的幫助文檔);從第1和2行可以看出,段ramfuncs中的函數(shù)DSP28x_usDelay()的裝載地址和運(yùn)行地址是不同的,本程序中裝載在Flash的塊 FLASHD中,而在SARAM L0中運(yùn)行,這只是目標(biāo),實(shí)際運(yùn)行時(shí)DSP并不會(huì)自動(dòng)將Flash中的代碼拷貝到SARAM中,因此需要手動(dòng)添加代碼來完成。在C函數(shù)中,為了使用變量RamfuncsLoadStart、RamfuncsLoadEnd和

18、RamfuncsRunStart,必須先聲明,本工程在文件DSP2833x_GlobalPrototypes.h中做了如下聲明:extern Uint16 RamfuncsLoadStart;extern Uint16 RamfuncsLoadEnd;extern Uint16 RamfuncsRunStart;然后就可以使用了。在Main.c中,使用MemCopy()函數(shù)將段ramfuncs中的函數(shù)DSP28x_usDelay()的代碼從裝載地址 RamfuncsLoadStartRamfuncsLoadEnd拷貝到RamfuncsRunStart開始的SARAM空間中。之后在程序運(yùn)行 時(shí),

19、只要調(diào)用DSP28x_usDelay()函數(shù),都會(huì)自動(dòng)地指向SARAM中相應(yīng)的函數(shù)入口地址,這一點(diǎn)是自動(dòng)完成的。MemCopy()函數(shù)原型在 MemCopy.c中,DSP2833x_GlobalPrototypes.h聲明。附錄4:十六進(jìn)制數(shù)據(jù)流文件(Hex文件)十六進(jìn)制數(shù)據(jù)流(Hex)是規(guī)律性極強(qiáng)的一種文件格式,該類文件是由行組成的,一行即是一個(gè)單元。Hex文件的行單元由以下6部分組成:: LL AAAA RR DDDD CC 行的開端 : : 標(biāo)志一個(gè)新的行的開端; 數(shù)據(jù)長度 : LL 表示后面DDDD的長度(單位Byte); 存儲(chǔ)地址 : AAAA 表十六位地址,當(dāng)記錄類型是04時(shí)表高十

20、六位地址,記錄類型是00時(shí)表低十六位地址; 記錄類型 : RR 共有0001和04三種記錄類型;00:表該行攜帶數(shù)據(jù)信息01:表Hex文件結(jié)束04:表高十六位地址有變化 數(shù)據(jù)內(nèi)容 : DDDD 是數(shù)據(jù)內(nèi)容; 校驗(yàn)內(nèi)容 : CC 是該行除去 : 和 CC 之外的數(shù)據(jù)的校驗(yàn)值。校驗(yàn)規(guī)律是:所有值加和后取反。附錄5:1.DSP reset后運(yùn)行的起始地址是多少?0x3FFFC02.仿真器燒寫程序的步驟是?根據(jù)cmd文件把程序燒到指定位置,然后執(zhí)行。3.DSP的Flash啟動(dòng)過程是什么?首先假設(shè)硬件配置GPIO8487上拉為1,即處于Flash啟動(dòng)過程。當(dāng)DSP復(fù)位后,會(huì)從復(fù)位向量0x3FFFC0處取

21、得復(fù)位向量,并跳轉(zhuǎn)到 InitBoot處開始執(zhí)行,InitBoot會(huì)讀GPIO8487的值,當(dāng)值全為1后,判斷為Flash啟動(dòng)方式。然后會(huì)跳到0x33FFF6處執(zhí)行。在 CCS5.2工程的cmd文件中有如下代碼:MEMORYPAGE 0 :   BEGIN       : origin = 0x33FFF6, length = 0x     /* Boot to M0 will go here                   

22、60;  */.SECTIONS.codestart           : > BEGIN       PAGE = 0.即表示把codestart段放到0x33FFF6位置處,文件“DSP2833x_CodeStartBranch.asm”中有 codestart段的定義,實(shí)際上codestart段只是包含了一個(gè)跳轉(zhuǎn)指令,是程序跳轉(zhuǎn)到_c_int00處,_c_int00在boot.asm in RTS library中有定義,_c_int00的代碼最終會(huì)調(diào)用c的main函數(shù),之后就是main函數(shù)的執(zhí)行。附錄6:Hex2000使用:CCS軟件默認(rèn)生成的是.out格式的文件,而很多應(yīng)用場合往往需要的是純二進(jìn)制代碼,TI提供了一個(gè)小工具H

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論