




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、DSP程序在線升級唐俊松tangjunson .c n2015/12/041. 引言一般而言,DSP程序更新是在 CCS環(huán)境下通過JTAG接口來實現(xiàn)的。但 JTAG燒寫程 序只能實現(xiàn)一對一燒寫(即電腦到DSP),且不能遠(yuǎn)距離燒寫程序。而當(dāng)產(chǎn)品發(fā)布后或需要同時升級多個DSP程序時,通過JTAG燒寫程序則很難實現(xiàn)。在線程序升級的主要思想是通過串口通信更新程序,通過串口通信可實現(xiàn)程序遠(yuǎn)程升級JTAG燒寫程序所存在的弊端。2.通過串口( RS232)更新DSPS序且可同時實現(xiàn)對多個 DSP的程序更新,這有效地解決了1.通過JTAG更新DSF程序圖1.1通過不同方式實現(xiàn) DSP程序更新2
2、. 程序在線升級的基本思想基于串口通信的程序在線升級功能框圖如圖2.1所示,底層程序(Prog Local)和應(yīng)用程序(ProgApp)分別由兩個獨立的 CCS Project產(chǎn)生。底層程序(Prog Local)是產(chǎn)品發(fā)布前通過 JTAG燒寫固化在 DSP指定Flash空間中的 程序,不允許用戶修改和擦除,主要用于實現(xiàn)與上位機(jī)的通信,同時在需要升級程序時將上位機(jī)發(fā)送過來的程序代碼燒寫到FLASH中。應(yīng)用程序(ProgApp)是可以更新的程序。通過CCS編譯產(chǎn)生程序代碼文件(hex),然后通過RS232通信將程序代碼發(fā)送到DSP,繼而由底層程序(Prog Local)將應(yīng)用程序代碼燒寫到應(yīng)用程
3、序所對應(yīng)FLSH空間(Prog App)中。DSP圖2.1DSP程序在線升級功能框圖在線升級程序流程圖如圖 22所示。DSP上電復(fù)位后先運行底層程序,在底層程序中 判斷是否需要升級,如不需要升級,則跳轉(zhuǎn)到應(yīng)用程序執(zhí)行。如需要升級,則擦除應(yīng)用程序 對應(yīng)FLASH區(qū),并將升級代碼寫入到應(yīng)用程序FLASH區(qū)中。Begi n是否升級?2否應(yīng)用程序跳轉(zhuǎn)底層程序與上位機(jī)通信接收升級程序代碼將升級程序代碼燒寫到FlashEnd圖2.2DSP程序更新流程圖3. 在線程序升級的具體實現(xiàn)3.1 FLASH 分配要實現(xiàn)程序在線升級,必須使底層程序和應(yīng)用程序相互獨立。如圖2.1所示,本項目將底層程序(LocalPro
4、gram )配置在 FLASH A 中,應(yīng)用程序(Application Program )配置在 FLASHE中,從而實現(xiàn)底層程序與應(yīng)用程序的獨立。實現(xiàn)程序相互獨立需通過配置cmd文件完成,具體配置方法見附錄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ù)據(jù)格式( hex文件)(hex數(shù)據(jù)文件格式詳 見附錄4)。生成hex文件后,通過上位機(jī)讀取h
5、ex文件數(shù)據(jù),并將數(shù)據(jù)通過RS232通信發(fā)送至DSP。CCS自帶工具h(yuǎn)ex2000. exe可實現(xiàn).out文件到.hex文件的轉(zhuǎn)換。(轉(zhuǎn)換方法見附錄6)CCS編譯-JA.outHex2000>A.hexRS232-*DSPProject A圖3.2應(yīng)用程序代碼產(chǎn)生方法DS吐電復(fù)位Jump to Flash'3.3 底層程序(Local Prog )底層程序主要實現(xiàn)兩個功能:(1)與上位機(jī)通信;(2)升級時,將串口接收到的數(shù)據(jù)燒寫至Flash的指定區(qū)域。底層程序主要實現(xiàn)以下功能,其流程圖如右圖所示:(1) 與上位機(jī)通信,判斷是否升級DSP上電復(fù)位后與上位機(jī)通信, 判斷是 否需要升級
6、。若上位機(jī)發(fā)送的是升級命 令,則跳轉(zhuǎn)到底層程序中升級部分執(zhí)行;否則,跳轉(zhuǎn)到原有的應(yīng)用程序處執(zhí)行。(2) 從上位機(jī)接受程序代碼并校驗接收上位機(jī)發(fā)送的應(yīng)用程序代碼并保存到DSP指定內(nèi)存中(RAM 區(qū)),(如 何將數(shù)據(jù)保存至9指定內(nèi)存,詳見附錄2)。 與此同時,需校驗接收數(shù)據(jù)是否準(zhǔn)確。(3) 燒寫程序的搬移由于DSP不支持對FLASH燒寫的同時 在FLASH中運行程序,因此負(fù)責(zé)燒寫 Flash的這部分程序應(yīng)搬移至片內(nèi)RAM執(zhí)行。(如何實現(xiàn)程序搬移,詳見附錄3)(4) 燒寫程序代碼搬移結(jié)束后,將之前 RAM中接受到的程序代碼燒寫至指定 Flash扇區(qū),該步驟通過調(diào)用 Flash28335_API庫函數(shù)
7、完成(Flash28335_API的使用請看附件中FLASH_AP文檔)。4總結(jié)實現(xiàn)程序在線升級的主要難點是如何實現(xiàn)底層程序和應(yīng)用程序相互獨立,以及如何通過CCS產(chǎn)生需要更新的應(yīng)用代碼。本報告首先介紹了DSP程序在線升級的主要思想,然后對程序在線升級的實現(xiàn)方法作了簡單介紹,并在附錄中給出了具體實現(xiàn)過程中可能會遇到的問題及解決辦法。附錄1底層程序和應(yīng)用程序cmd配置要實現(xiàn)如圖4.1所示的FLASH分配,須通過配置底層程序和應(yīng)用程序cmd文件完成。其中底層程序?qū)?yīng) CCS Project L,配置其cmd文件使其程序分配在 FLASH A區(qū);應(yīng)用程序 對應(yīng)CCS Project A,配置其cmd文
8、件使其程序分配在 FLASH E區(qū)。圖4.1 DSP FLASH分區(qū)示意圖1.1底層程序cmd配置DSP F28335上電復(fù)位后,當(dāng)硬件配置為FLASH啟動時,程序指針將跳轉(zhuǎn)到Flash的0X33FFF6處(F28335啟動過程,詳見附錄5)。由于這個地址是固定的,因此底層程序必須 燒寫在以這個地址為起始地址的空間內(nèi),即底層程序cmd配置應(yīng)為:MEMORYPAGE 0:BEGIN: origin = 0x33FFF6, le ngth = 0x000002/* Boot to FLASH will go here */SECTIONS .:> BEGIN PAGE = 0codestar
9、t與此同時,底層程序所有程序代碼段應(yīng)全部燒寫到FLASH A中:MEMORYPAGE 0:FLASHA : origin = 0x338000, le ngth = 0x007F80/* on-chip FLASH */ SECTIONS.ci nit:> FLASHAPAGE =:0.pi nit:> FLASHA,PAGE =:0.text:> FLASHAPAGE :=0.1.2應(yīng)用程序cmd配置采用絕對地址跳轉(zhuǎn)實現(xiàn)由底層程序到應(yīng)用程序的跳轉(zhuǎn),為保證程序正常執(zhí)行,其跳轉(zhuǎn)地址必須固定,且該地址在應(yīng)用程序中的位置必須固定。將應(yīng)用程序的首地址作為跳轉(zhuǎn)地址,即跳轉(zhuǎn)地址固定為 F
10、LASHE的起始地址:0x318000,如圖4.2所示。Code StartApplicati on Program(FLASH E圖4.2應(yīng)用程序FLASH示意圖采用絕對地址跳轉(zhuǎn)實現(xiàn)從底層程序跳轉(zhuǎn)到應(yīng)用程序。跳轉(zhuǎn)指令為:#define Jump_App_Program (void (*)( void )0x318000 /*use the Flash E sector to save the applicati on program */(*Jump_App_Program)(); /*Jump to the applicati on program */同時應(yīng)配置 Prog App的程序起
11、始地址為從(FLASH日起始地址0x318000開始,對應(yīng) CMD配置為:MEMORYPAGE 0:BEGIN : origin = 0x318000, length = 0x000002 /*0x318000 is the start address of FLASH E */SECTIONS.codestart: > BEGINPAGE = 0/*codestart is the start address of the program*/. 與此同時,底層程序所有程序代碼段應(yīng)全部燒寫到FLASH E 中:MEMORYPAGE 0 :FLASHE: origin = 0x318002
12、, length = 0x007F80/* on-chip FLASH */SECTIONS.cinit: > FLASHEPAGE = 0.pinit: > FLASHE,PAGE = 0.text.: > FLASHEPAGE = 0附錄 2: 如何將程序和變量放到指定位置在CCS編程中,如果我們不指定變量的存放位置,編譯器會自動的給變量分配一個位置,但是如果有時候需要把變量放在一個特定的空間內(nèi),我們應(yīng)該如何操作呢,CCS提供了如下的兩個指令:#pragma CODE_SECTION#pragma DATA_SECTION其中DATA_SECTION是針對數(shù)據(jù)空間的,CO
13、DE_SECTION是針對程序空間的,具體的使用辦法是:#pragma DATA_SECTION(buffe,r D”ATA_sect ”)char buffer512;/buffer 為一數(shù)組#pragma CODE_SECTION(fu,n C”O(jiān)DE_sect ”)Int fun(); /fun為任意函數(shù)與此同時,在CMD文件中為DATA_sect CODE_sect開辟空間:DATA_sect : > RAML2PAGE= 1CODE_sec: > FLASHEPAGE= 0附錄3:如何將FALSH中程序搬移到RAM中運行CCS中經(jīng)常會遇到如下語句:MemCopy(&
14、;RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart) 它的作用是將ramfuncs段復(fù)制到內(nèi)存中然后運行。CMD文件中ramfuncs的定義如下;ramfu ncs : LOAD = FLASHD,RUN = RAML0,LOAD_START(_Ramfu ncsLoadStart), LOAD_END(_Ramfu ncsLoadE nd), RUN_START(_Ramfu ncsRu nStart), PAGE = 0第1行表示該段的裝載在 PAGA0的FLASHD中第2行表示該段的運行地址在PAGE0的RAML
15、0中LOAD_ START(_Ramfu ncsLoadStar令編譯器創(chuàng)建了一個變量Ramfu ncsLoadStart,該變量指向段ramfuncs的裝載地址的首地址(LOAD_ STAR為編譯偽指令,請見 CCS的幫助文檔);LOAD_ START(_RamfuncsLoadEn令編譯器創(chuàng)建了一個變量RamfuncsLoadEnd,該變量指向段ramfuncs的裝載地址的末地址(LOAD_ END為編譯偽指令,請見 CCS的幫助文檔);LOAD_ START(_RamfuncsRunStar令編譯器創(chuàng)建了一個變量RamfuncsRunStart,該變量指向段ramfuncs的運行地址的首
16、地址(LOAD_ STAR為編譯偽指令,請見 CCS的幫助文檔); 從第1和2行可以看出,段ramfuncs中的函數(shù)DSP28x_usDelay(的裝載地址和運行地址是不 同的,本程序中裝載在 Flash的塊FLASHD中,而在SARAM L0中運行,這只是目標(biāo),實際 運行時DSP并不會自動將Flash中的代碼拷貝到 SARAM中,因此需要手動添加代碼來完成。在 C 函數(shù)中,為了使用變量 RamfuncsLoadStart、RamfuncsLoadEnd 和 RamfuncsRunStart,必 須先聲明,本工程在文件DSP2833x_GlobalPrototypes.h中做了如下聲明:ext
17、ern Ui nt16 Ramfu ncsLoadStart;extern Uin t16 Ramfu ncsLoadE nd;extern Ui nt16 Ramfu ncsRu nStart;然后就可以使用了。在 Ma in .c中,使用 MemCopy()函數(shù)將段ramfu ncs中的函數(shù) DSP28x_usDelay()的 代碼從裝載地址 RamfuncsLoadStart RamfuncsLoadEnd 拷貝至U RamfuncsRunStart開始的SARAM空間中。之后在程序運行時,只要調(diào)用DSP28x_usDelay()函數(shù),都會自動地指向 SARAM中相應(yīng)的函數(shù)入口地址,這一
18、點是自動完成的。MemCopy()函數(shù)原型在 MemCopy.c 中,DSP2833x_GlobalPrototypes.h 聲明。附錄4:十六進(jìn)制數(shù)據(jù)流文件(Hex文件)十六進(jìn)制數(shù)據(jù)流(Hex )是規(guī)律性極強(qiáng)的一種文件格式,該類文件是由行'組成的,一行即是一個單元。Hex文件的 行'單元由以下6部分組成::LLAAAARRDD- DDCC 行的開端:標(biāo)志一個新的 行'的開端; 數(shù)據(jù)長度:LL'表示后面DDDD的長度(單位Byte); 存儲地址: AAAA'表十六位地址,當(dāng)記錄類型是 04時表高十六位地址,記錄類型是 00寸表低十六位地址; 記錄類型:
19、RR共有 00'和)0£種記錄類型; 00:'表該行攜帶數(shù)據(jù)信息 01:'表 Hex 文件結(jié)束 04:'表高十六位地址有變化 數(shù)據(jù)內(nèi)容: DDD'D 是數(shù)據(jù)內(nèi)容; 校驗內(nèi)容:CC是該行除去 :和CC之外的數(shù)據(jù)的校驗值。 校驗規(guī)律是:所有值 加和后取反。附錄 5: TMS320F28335啟動過程1. DSP reset后運行的起始地址是多少?0x3FFFC02. 仿真器燒寫程序的步驟是?根據(jù) cmd 文件把程序燒到指定位置,然后執(zhí)行。3. DSP的 Flash啟動過程是什么?首先假設(shè)硬件配置 GPIO8487上拉為1,即處于Flash啟動過程。
20、當(dāng)DSP復(fù)位后,會從復(fù)位 向量0x3FFFC0處取得復(fù)位向量,并跳轉(zhuǎn)到InitBoot處開始執(zhí)行,InitBoot會讀GPIO8487的值,當(dāng)值全為1后,判斷為Flash啟動方式。然后會跳到0X33FFF6處執(zhí)行。在 CCS5.2工程的 cmd 文件中有如下代碼:MEMORY1PAGE 0 :BEGINhere: origin = 0x33FFF6, length*/= 0x000002/* Boot to M0 will goSECTIONS.codestart: > BEGIN PAGE = 0.即表示把 codestart 段放到 0x33FFF6 位置處,文件“DSP2833x_CodeStartBranch.asm中有codestart 段的定義,實際上 codestart 段只是包含了一個跳轉(zhuǎn)指令,是程序跳轉(zhuǎn)到 _c_int00 處,一c_i nt00在boot.asm in RTS library中有定義,_c_in t00的代碼最終會調(diào)用 c的ma in函數(shù), 之后就是 main 函數(shù)的執(zhí)行。附錄6: Hex2000使用:CCS軟件默認(rèn)生成的是.out格式的文件,而很多應(yīng)用場合往往需要的是純二進(jìn)制代碼,TI提供了一個小工具 HEX2000 能幫助實現(xiàn)格式的轉(zhuǎn)化,具體的說明還是請參看 TMS320C28x Assembly Lan guage Tools手冊
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 木材定金合同范本
- 會計臨時勞務(wù)合同范本
- 勞務(wù)派遣合同范本購買
- 協(xié)議證明合同范本
- 業(yè)委會與物業(yè)委托合同范本
- 別墅規(guī)劃合同范本
- 區(qū)域保護(hù)合同范本
- 農(nóng)村房子修繕承包合同范本
- 公園門衛(wèi)服務(wù)合同范本
- 包裝費合同范本
- 物業(yè)服務(wù)行業(yè)禮儀培訓(xùn)
- 退市新規(guī)解讀-上海證券交易所、大同證券
- 教育部中國特色學(xué)徒制課題:現(xiàn)代職業(yè)教育體系建設(shè)背景下中國特色學(xué)徒制治理體系與資源配置研究
- 22陳涉世家 司馬遷 公開課一等獎創(chuàng)新教學(xué)設(shè)計 度部編版初中語文九年級下冊
- 2021年飽和蒸汽及過熱蒸汽焓值表
- 《抗戰(zhàn)中的英雄人物》課件
- 外墻真石漆施工方案
- 森林防火安全生產(chǎn)工作
- 護(hù)理工作十四五規(guī)劃
- 《服裝市場營銷》課件
- 網(wǎng)絡(luò)安全風(fēng)險評估報告模板
評論
0/150
提交評論