dsp28335在線升級_第1頁
dsp28335在線升級_第2頁
dsp28335在線升級_第3頁
dsp28335在線升級_第4頁
dsp28335在線升級_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、摘 要:為解決特殊場合 DSP程序升級困難的問題,以TMS320F28035為例,介紹了一種基于串口通信的適合于 TMS320C2000系列DSP實(shí)現(xiàn)程序更新的在線升級方法。描述了該在線 升級方法的基本思想和實(shí)現(xiàn)步驟,給出了關(guān)鍵部分的程序代碼。實(shí)驗(yàn)證明,該方法簡單可靠, 可用于嵌入式設(shè)備軟件程序的升級更新中。關(guān)鍵詞:在線升級;DSP;串口通信;FlashTMS320C2000系歹U DSP是美國德州儀器公司(簡稱TI)推出的集微控制器和高性能 DSP特點(diǎn)于一身的 DSP系歹U。該系列的 DSP具有強(qiáng)大的控制信號處理能力1,能夠?qū)崿F(xiàn)復(fù)雜的控制算法。隨著電子技術(shù)的不斷發(fā)展以及用戶需求的不斷提升,可

2、能需要經(jīng)常對已經(jīng)投入使用的嵌入式設(shè)備程序進(jìn)行更新,而目前一般的程序升級方法是實(shí)地取下設(shè)備,露出JTAG端口后通過仿真器來更新程序2-4。這種方法雖然簡單有效,但對于某些特殊場合,會給程序升級帶來了極大的不便2。本文以TMS320F28035為例,描述了一種可以脫離JTAG仿真器,不改變DSP上電啟動方式,實(shí)現(xiàn) TMS320C2000i(列DSP應(yīng)用程序在線更新的方法。 1在線升級的基本思想 一般的基于DSP的軟件程序更新是在 CC/境下通過JTAG接口操作來實(shí)現(xiàn)的。基于 JTAG接口的方法雖然易于操作,而且調(diào)試方便,但經(jīng)常受空間以及傳輸距離的限制。例如 一臺DSP系統(tǒng)安裝在復(fù)雜、封閉的環(huán)境下

3、,當(dāng)程序需要更新或升級時(shí),利用JTAG接口難以實(shí) 現(xiàn)程序的在線升級3。而基于串口通信的在線升級技術(shù)是通過用底層程序燒寫應(yīng)用程序的 方法來達(dá)到程序升級的目的,該方法則不受復(fù)雜系統(tǒng)和復(fù)雜環(huán)境的限制。另外,在線升級方法不需要改變DSP的啟動方式,直接采用DSP默認(rèn)的內(nèi)部Flash方式啟動5,從而省去了要 對DSP的一些引腳進(jìn)行硬件設(shè)置的麻煩。底層程序指已經(jīng)固化在DSP旨定Flash空間中的程序,不允許用戶修改和擦除,主要用于實(shí)現(xiàn)在線升級的時(shí)機(jī)判斷、數(shù)據(jù)接收及代碼燒寫等功 能,該程序中使用了Flash2803x_API庫存函數(shù)(詳見2.2節(jié));應(yīng)用程序即為用戶的升級程序3。F28035 DS如次上電復(fù)

4、位,先運(yùn)彳T底層程序,與PC機(jī)建立聯(lián)系,然后根據(jù)PC機(jī)的指令來判斷是否需要升級應(yīng)用程序。若需要,則將通過串口發(fā)送來的應(yīng)用程序代碼燒寫至 F28035片內(nèi)Flash指定扇區(qū);否則將繼續(xù)執(zhí)行原有的應(yīng)用程序。當(dāng)應(yīng)用程序很大或DSP的RAM空間比較小時(shí),可采用將應(yīng)用程序代碼分批發(fā)給DSP DSP接收并燒寫完一批代碼后,再進(jìn)行下一批代碼的接收和燒寫工作,直到所有的應(yīng)用程序代碼都燒寫完畢。 2在線升級的具體實(shí)現(xiàn) 2.1應(yīng)用程序用戶的應(yīng)用程序經(jīng)過 CC制譯連接生成具有模塊化格式的目標(biāo)文件(.out),該文件中的代碼和數(shù)據(jù)分別存放在不同的段中,因而不能直接用來燒寫Flash,需將其轉(zhuǎn)換為Flash能識別的數(shù)據(jù)

5、格式二進(jìn)制文件(.bin)。本文采用 hex2000.exe和FileOshell.exe工具來實(shí)現(xiàn)文件轉(zhuǎn)換。首先,應(yīng)用程序經(jīng)過編譯連接生成.out文件,然后通過hex2000.exe把.out文件轉(zhuǎn)換成.hex文件,再通過 FileOshell.exe 將文件轉(zhuǎn)換成.bin文件。先做一個 批處理文件,內(nèi)容如下:Example_2803xAdcSoc.out-map Example_2803xAdcSoc.map-o Example_2803xAdcSoc.hex -m -memwidth 16 -image ROMS Flash28035:origin = 0x3e8000, len= 0x

6、1000, romwidth=16, fill=0xFFFF 其中,Example_2803xAdcSoc.out 是應(yīng)用程序經(jīng)過 CCS成的文件;-map是生成 map文件; -o是生成hex文件;-m是Motorola-S 格式;-memwidth 16指存儲器位數(shù)為 16 bit ; -image 指選擇映像文件;ROMS所需要轉(zhuǎn)換的起始地址、長度、位數(shù)及填充。本文選擇從0x3e8000 開始,長度是4 KB,即FlashH, FlashH中未用的部分用 0xFFFF填充,本文把這個批處理文 件命名為:Example_2803xAdcSoc.cmd。接下來要生成.bin 文件,先做一個

7、MS-DOS批處理 文件,其內(nèi)容如下:IFileIOShell.exe -i Example_2803xAdcSoc.hex -oExample_2803xAdcSoc.bin注意要把 Example_2803xAdcSoc.out 、 hex2000.exe、 FileIOShell.exe、Example_2803xAdcSoc.cmd和MS-DOSS批處理文件放在同一目錄下,然后雙擊 MS-DO瞟批處理文件,即生成所需要的Example_2803xAdcSoc.bin文件。2.2 底層程序底層程序用于實(shí)現(xiàn)將串口發(fā)送的數(shù)據(jù)燒寫至Flash的指定部分,涉及到應(yīng)用程序的正確定位和復(fù)位后的啟動過

8、程,是實(shí)現(xiàn)整個在線升級的重點(diǎn)。底層程序流程圖如圖1所示。底層程序主要實(shí)現(xiàn)以下功能 3:DSP上電復(fù)位;1uiur to FLii.M扃動畸從IT;機(jī)壽口發(fā)送來咕代礙球同葉正皿; Z jft給弟堂寫.竽特 系統(tǒng)更新更位完T?代碼布物燒與ECTftQlC PECHhlQUEET.com禺 HJ FUh 2a炸11 ff Mijh程汴燒bBl I度層理序跳程圖(1)上電復(fù)位查詢功能。 上電復(fù)位后通過接收上位機(jī)發(fā)送的命令判斷是否升級。若上位機(jī)發(fā)送的是升級命令,則跳轉(zhuǎn)到底層程序中升級部分執(zhí)行;否則,跳轉(zhuǎn)到原有的應(yīng)用程序處執(zhí)行。(2)搬移燒寫程序的功能。由于 F28035片上Flash不支持在其中一個扇區(qū)

9、運(yùn)行程序 去擦除或燒寫其他扇區(qū),故完成接收數(shù)據(jù)和燒寫Flash工作的這部分程序(即底層程序中的升級部分程序)需搬移至片內(nèi)RA般片外RAMk運(yùn)行。實(shí)現(xiàn)程序搬移的函數(shù)為:void MemCopy (Uint16 *SourceAddr, Uint16 *Source EndAddr, Uint16 *DestAddr)while (SourceAddr L0 SARAM PAGE=2/ 地址空間:0x3F80000x3F8800通過以上底層程序的設(shè)置,可將應(yīng)用程序緩存到指定的RAMK域中。(4)代碼接收結(jié)束后,將內(nèi)存中的代碼燒寫至指定Flash扇區(qū),該步驟通過調(diào)用Flash2803x_API庫函數(shù)

10、完成。底層程序中所用到的Flash2803x_API庫函數(shù)如下6:擦除扇區(qū)的函數(shù)為Uint16 Flash28035_Erase(Uint16 SectorMask , &Fstatus),其中,SectorMask為即將被擦除的扇區(qū);&Fstatus為執(zhí)行擦除操作后返回的狀態(tài)值,用來判斷擦除操作是否成功。將程序燒寫到 Flash扇區(qū)的函數(shù)為Uintl6 Flash28035_Program( & FlashAddr, &BuffAddr , Length , &Fstatus),其中,&FlashAddr 為即將被燒寫的 Flash 扇 區(qū)的起始地址;&BuffAddr為即將準(zhǔn)備燒寫的程序當(dāng)

11、前存放在內(nèi)存空間的首地址;Length為程序長度;&Fstatus為執(zhí)行燒寫操作后返回的狀態(tài)值,用來判斷燒寫操作是否成功。 校驗(yàn)燒寫到 Flash 中的程序?yàn)?Uint16 Flash28035_Verify(&FlashAddr , &BuffAddr , Length , &Fstatus),其中,&FlashAddr指定從Flash內(nèi)開始比較的首地址; &BuffAddr為被比較文件 的存儲首地址;Length是需要比較的16 bit字的個數(shù),程序長度;&Fstatus是執(zhí)行校驗(yàn)操 作后返回的狀態(tài)值,用來判斷校驗(yàn)操作是否成功。2.3 底層程序和應(yīng)用程序的定位DSP F28035上電復(fù)位后

12、,CPUW從內(nèi)部Boot Rom BEGINPAGE = 0應(yīng)用程序cmd文件的部分配置如下:BEGIN : origin = 0x3E8FFE, length = 0x000002codestart : BEGINPAGE = 03燒寫步驟首先把底層程序通過 JTAG接口燒寫到F28035中,然后再進(jìn)行應(yīng)用程序的燒寫。應(yīng) 用程序的燒寫步驟為:先把串口調(diào)試工具的參數(shù)配置為波特率9 600 bit/s、8 bit數(shù)據(jù)位、1 bit停止位、沒有奇偶校驗(yàn)位;選擇發(fā)送文本文件方式,發(fā)送應(yīng)用程序的.bin文件到DSP 由于F28035的RAMK比較小,可以采取把應(yīng)用程序代碼分為多次發(fā)送的方式。燒寫過程如

13、圖2所示。Fltl_K.il tEM r3 4t lAtfei ta uffr紂*Liu*irn, p m iai mi 3SF*2板寫過程本文介紹了一種基于串口通信的DSP應(yīng)用程序在線升級技術(shù),可以在不打開機(jī)箱的條件下實(shí)現(xiàn)模塊軟件的更新升級。經(jīng)過實(shí)驗(yàn)發(fā)現(xiàn),采用在線升級技術(shù)來更新程序所耗費(fèi)的時(shí) 間比采用JTAG口燒寫程序所耗費(fèi)的時(shí)間要長一些,但解決了復(fù)雜情況下程序升級困難的問 題??傊?,該方法簡單可靠,可應(yīng)用于嵌入式設(shè)備的軟件程序更新升級中。目標(biāo)板:C2000 的 28335/28069一、主要思路:1、準(zhǔn)備升級程序(相當(dāng)于一個bootloader ),作為上電首先運(yùn)行的程序。進(jìn)入升級程序,首

14、先判斷需不需要升級,需要升級,進(jìn)入升級狀態(tài),通信完成新的主程序的接收,存入,升 級成功后,進(jìn)入主程序運(yùn)行。2、在主程序運(yùn)行時(shí),收到升級指令,標(biāo)記升級標(biāo)志,重啟進(jìn)入升級程序進(jìn)去升級。3、板子上電后,會調(diào)到 flash啟動的起始地址 0x33FFF6 ( DSP28335 ),這個地址存放著 程序的codestart的其實(shí)地址。所以,修改了 0x33FFF6的存放的值,那么就能決定執(zhí)行那 一段程序。還可以通過匯編跳轉(zhuǎn)指令直接跳轉(zhuǎn)到程序codestart執(zhí)行。二、升級程序1、具備能力:具備通信能力和Flash讀寫能力2、準(zhǔn)備:Flash API移植、上位機(jī)的升級配套程序; 存儲升級標(biāo)志位的空間(外部

15、EEPROM , 不會隨便擦除的內(nèi)部 Flash)3、流程:接收- 校驗(yàn)- 燒寫- 跳轉(zhuǎn)三、升級步驟1、數(shù)據(jù)接收:通過 CAN/串口等方式接收數(shù)據(jù)。由于 28335內(nèi)存較小,不適合緩存大量的數(shù)據(jù),這里是接收一部分?jǐn)?shù)據(jù),校驗(yàn)完成后燒寫進(jìn)Flash ,再去接收一部分?jǐn)?shù)據(jù)2、數(shù)據(jù)解析:接收到的數(shù)據(jù)是hex格式的數(shù)據(jù),所以需要解析才能放入對應(yīng)的flash地址。但由于28335能力限制,這里采用先在上位機(jī)解析完成,采用先告知地址,然后發(fā)送數(shù)據(jù)的方式完成數(shù)據(jù)通信和傳輸。3、校驗(yàn):這里采用 crc校驗(yàn)。/*Name : crc16Function: crc 校驗(yàn) 16 位*Params : data (UI

16、nt8 * ):待操作的數(shù)組 len:數(shù)據(jù)長度Return : UInt16 :返回CRC值CRC校驗(yàn)碼為2個字節(jié)高位在前*/UInt16 crc16(Uint8 *data, UInt16 len)UInt16 CRC = OxFFFF;UInt8 j, TMP = 0;UInt8 i;for (i = 0; i len; i+)CRC A= datai;for (j = 0; j 1;if(TMP)CRC = CRC A 0xA001;return CRC;4、數(shù)據(jù)燒寫flash :運(yùn)用flash API提供的接收完成數(shù)據(jù)的燒寫。這里要注意 flash API必 須運(yùn)行在RAM中。5、完成

17、數(shù)據(jù)燒寫后,需要跳轉(zhuǎn)到主程序。一般采用匯編指令。匯編指令asm(LB 0xXXXXXX) 或者匯編函數(shù)。這里采用asm的方式,跳轉(zhuǎn)地址為新應(yīng)用程序的起始地址,這里必須規(guī)定每次跟新的新應(yīng)用程序的起始地址必須固定。asm( LB 0x3xxxxx);如果是使用變動的起始地址,則必須采用匯編函數(shù),把地址作為參數(shù)傳進(jìn)函數(shù)。四、主程序1、接收升級指令后,能夠標(biāo)志升級狀態(tài)。重啟進(jìn)入升級程序,進(jìn)行判斷,進(jìn)而升級程序。2、主程序運(yùn)行后,升級狀態(tài)標(biāo)記為不用升級狀態(tài)。五、注意點(diǎn)1、升級程序與主程序要嚴(yán)格分開,合理分配 flash空間,附升級程序和主程序 cmd大致分配空間。主程序cmd文件/* File: f28

18、335 nonBIOSflash.cmd -Linker command file for non-DSP/BIOS* code with DSP in Boot to Flash boot mode.* History: 09/18/07 - original (D. Alter)*/MEMORYPAGE 0: /* Program Memory */BEGIN_M0 : origin = 0x000000, length = 0x000002 /* Part of M0SARAM.Used for Boot to M0 bootloader mode. */FLASH_PROGRAMS :

19、 origin = 0x310000, length = 0x000010 /* On-chip FLASH */FLASH_PROGRAM : origin = 0x310010, length = 0X01FFF0 /* On-chip FLASH */ZONE7A: origin = 0x200000, length = 0x010000CSM_RSVD : origin = 0x33FF80, length = 0x000076 /* Part of FLASH Sect or A. Reserved when CSM is in use. */BEGIN_FLASH : origin

20、 = 0x33FFF6, length = 0x000002 /* Part of FLASH Sect or A. Used for Jump to flash bootloader mode. */PASSWORDS : origin = 0x33FFF8, length = 0x000008 /* Part of FLASH Sec tor A. CSM password locations. */ADC_CAL : origin = 0x380080, length = 0x000009 /* ADC_cal function inReserved memory */OTP : ori

21、gin = 0x380400, length = 0x000400 /* 1Kw OTP */IQTABLES : origin = 0x3FE000, length = 0x000B50 /* Part of Boot ROM */IQTABLES2 : origin = 0x3FEB50, length = 0x00008C /* Part of Boot ROM * /FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0 /* Part of Boot ROM*/BOOTROM : origin = 0x3FF27C, length = 0x0

22、00D44 /* 8Kw Boot ROM */RESET : origin = 0x3FFFC0, length = 0x000002 /* part of Boot ROM */FLASH_CONST : origin = 0x300000, length = 0x010000PAGE 1 : /* Data Memory */M0SARAM:origin = 0x000002, length = 0X0003FE /* 1Kw M0 SARAM */M1SARAM : origin = 0x000400, length = 0x000400 /* 1Kw M1 SARAM */DRAM

23、: origin = 0x008000, length = 0x008000PIEVECT : origin = 0x000D00, length = 0x000100ZONE7B : origin = 0x210000, length = 0x010000/ FLASH_DATA : origin = 0x330000, length = 0x008000 /* On-chip FLASH*/SECTIONS/* Compiler Required Sections */* Program memory (PAGE 0) sections */.text1 : DSP2833x_CodeSt

24、artBranch.obj(.text) FLASH_PROGRAMS, PAGE = 0.text2 : *(.text) FLASH_PROGRAM, PAGE = 0.cinit : FLASH_PROGRAM, PAGE = 0.const : FLASH_PROGRAM, PAGE = 0.econst : FLASH_CONST, PAGE = 0.pinit : FLASH_PROGRAM, PAGE = 0.reset : RESET,PAGE = 0, TYPE = DSECT /* We are not using the .reset section */.switch

25、: FLASH_PROGRAM, PAGE = 0.cio : FLASH_PROGRAM, PAGE = 0/* Data Memory (PAGE 1) sections */.bss: DRAM,PAGE = 1.ebss: DRAM,PAGE = 1.stack: DRAM,PAGE = 1.sysmem: ZONE7B,PAGE = 1.esysmem: ZONE7B,PAGE = 1/* User Defined Sections */codestart : BEGIN_FLASH, PAGE = 0/* Used by file CodeStartBranch.asm */csm

26、_rsvd : CSM_RSVD, PAGE = 0/* Used by file passwords.asm */internalMemFuncs : FLASH_PROGRAM, PAGE = 0/* Used by file Xintf.c. Link to internal memory */passwords : PASSWORDS, PAGE = 0/* Used by file passwords.asm */* Section secureRamFuncs used by file SysCtrl.c. */ramfuncs:LOAD = FLASH_PROGRAM, PAGE

27、 = 0/* Should be Flash */RUN = ZONE7A, PAGE = 0/* Must be CSM securedRAM */LOAD_START(_RamfuncsLoadStart),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart)/* Allocate ADC_cal function (pre-programmed by factory into TI reserved memo ry) */.adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD/* en

28、d of file */升級程序cmd文件/* File: f28335 nonBIOSflash.cmd - Linker command file for non-DSP/BIOS* code with DSP in Boot to Flash boot mode.* History: 09/18/07 - original (D. Alter)*/MEMORYPAGE 0: /* Program Memory */BEGIN_M0 : origin = 0x000000, length = 0x000002 /* Part of M0SARAM.Used for Boot to M0 b

29、ootloader mode. */FLASH_PROGRAM : origin = 0x330000, length = 0x005000 /* On-chip FLASH G*/FLASH_PROGRAM1 : origin = 0x335000, length = 0x001000 /* On-chip FLASH G*/FLASH_CONST : origin = 0x336000, length = 0x001000 /* On-chip FLASH G*/ZONE7A : origin = 0x200000, length = 0x010000CSM_RSVD : origin =

30、 0x33FF80, length = 0x000076 /* Part of FLASH Sect or A. Reserved when CSM is in use. */BEGIN_FLASH : origin = 0x33FFF6, length = 0x000002 /* Part of FLASH Sect or A. Used for Jump to flash bootloader mode. */PASSWORDS : origin = 0x33FFF8, length = 0x000008 /* Part of FLASH Sec tor A. CSM password l

31、ocations. */ADC_CAL : origin = 0x380080, length = 0x000009 /* ADC_cal function inReserved memory */OTP : origin = 0x380400, length = 0x000400 /* 1Kw OTP */IQTABLES : origin = 0x3FE000, length = 0x000B50 /* Part of Boot ROM */IQTABLES2 : origin = 0x3FEB50, length = 0x00008C /* Part of Boot ROM * /FPU

32、TABLES : origin = 0x3FEBDC, length = 0x0006A0 /* Part of Boot ROM */BOOTROM : origin = 0x3FF27C, length = 0x000D44 /* 8Kw Boot ROM */RESET : origin = 0x3FFFC0, length = 0x000002 /* part of Boot ROM */PAGE 1 : /* Data Memory */M0SARAM: origin = 0x000002, length = 0x0003FE /* 1Kw M0 SARAM */M1SARAM: o

33、rigin = 0x000400, length = 0x000400 /* 1Kw M1 SARAM */DRAM : origin = 0x008000, length = 0x008000PIEVECT : origin = 0x000D00, length = 0x000100ZONE7B : origin = 0x210000, length = 0x010000/FLASH_DATA : origin = 0x330000, length = 0x008000 /* On-chip FLASH B*/SECTIONSFlash28_API:-lFlash28335_API_V210

34、.lib(.econst)-lFlash28335_API_V210.lib(.text)LOAD = FLASH_PROGRAM1,RUN = ZONE7A,LOAD_START(_Flash28_API_LoadStart),LOAD_END(_Flash28_API_LoadEnd),RUN_START(_Flash28_API_RunStart),PAGE = 0/* Compiler Required Sections */* Program memory (PAGE 0) sections */.text: FLASH_PROGRAM,PAGE =:0.cinit: FLASH_PROGRAM,PAGE =:0.const: FLASH_PROGRAM,PAGE=(.econst: FLASH_CONST,PAGE =0.pinit: FLASH_PROGRAM,PAGE =:0.reset: RESET,PAGE = 0, TYPE = DSECT /* We are not using the .reset section */.switch : FLASH_PROGRAM, PAGE = 0.cio : FLASH_PROGRAM, PAGE = 0/* Data Memory (PAGE 1)

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論