《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于串口通信的DSP應(yīng)用程序在線(xiàn)升級(jí)方法
基于串口通信的DSP應(yīng)用程序在線(xiàn)升級(jí)方法
來(lái)源:微型機(jī)與應(yīng)用2013年第14期
汪晶晶, 蘇建徽, 孫佩石
(教育部光伏系統(tǒng)工程研究中心 合肥工業(yè)大學(xué)能源研究所, 安徽 合肥230009)
摘要: 為解決特殊場(chǎng)合DSP程序升級(jí)困難的問(wèn)題,以TMS320F28035為例,介紹了一種基于串口通信的適合于TMS320C2000系列DSP實(shí)現(xiàn)程序更新的在線(xiàn)升級(jí)方法。描述了該在線(xiàn)升級(jí)方法的基本思想和實(shí)現(xiàn)步驟,給出了關(guān)鍵部分的程序代碼。實(shí)驗(yàn)證明,該方法簡(jiǎn)單可靠,可用于嵌入式設(shè)備軟件程序的升級(jí)更新中。
Abstract:
Key words :

摘  要:為解決特殊場(chǎng)合DSP程序升級(jí)困難的問(wèn)題,以TMS320F28035為例,介紹了一種基于串口通信的適合于TMS320C2000系列DSP實(shí)現(xiàn)程序更新的在線(xiàn)升級(jí)方法。描述了該在線(xiàn)升級(jí)方法的基本思想和實(shí)現(xiàn)步驟,給出了關(guān)鍵部分的程序代碼。實(shí)驗(yàn)證明,該方法簡(jiǎn)單可靠,可用于嵌入式設(shè)備軟件程序的升級(jí)更新中。
關(guān)鍵詞: 在線(xiàn)升級(jí); DSP;串口通信; Flash

    TMS320C2000系列DSP是美國(guó)德州儀器公司(簡(jiǎn)稱(chēng)TI)推出的集微控制器和高性能DSP特點(diǎn)于一身的DSP系列。該系列的DSP具有強(qiáng)大的控制信號(hào)處理能力[1],能夠?qū)崿F(xiàn)復(fù)雜的控制算法。隨著電子技術(shù)的不斷發(fā)展以及用戶(hù)需求的不斷提升,可能需要經(jīng)常對(duì)已經(jīng)投入使用的嵌入式設(shè)備程序進(jìn)行更新,而目前一般的程序升級(jí)方法是實(shí)地取下設(shè)備,露出JTAG端口后通過(guò)仿真器來(lái)更新程序[2-4]。這種方法雖然簡(jiǎn)單有效,但對(duì)于某些特殊場(chǎng)合,會(huì)給程序升級(jí)帶來(lái)了極大的不便[2]。本文以TMS320F28035為例,描述了一種可以脫離JTAG仿真器,不改變DSP上電啟動(dòng)方式,實(shí)現(xiàn)TMS320C2000系列DSP應(yīng)用程序在線(xiàn)更新的方法。
1 在線(xiàn)升級(jí)的基本思想
    一般的基于DSP的軟件程序更新是在CCS環(huán)境下通過(guò)JTAG接口操作來(lái)實(shí)現(xiàn)的。基于JTAG接口的方法雖然易于操作,而且調(diào)試方便,但經(jīng)常受空間以及傳輸距離的限制。例如一臺(tái)DSP系統(tǒng)安裝在復(fù)雜、封閉的環(huán)境下,當(dāng)程序需要更新或升級(jí)時(shí),利用JTAG接口難以實(shí)現(xiàn)程序的在線(xiàn)升級(jí)[3]。而基于串口通信的在線(xiàn)升級(jí)技術(shù)是通過(guò)用底層程序燒寫(xiě)應(yīng)用程序的方法來(lái)達(dá)到程序升級(jí)的目的,該方法則不受復(fù)雜系統(tǒng)和復(fù)雜環(huán)境的限制。另外,在線(xiàn)升級(jí)方法不需要改變DSP的啟動(dòng)方式,直接采用DSP默認(rèn)的內(nèi)部Flash方式啟動(dòng)[5],從而省去了要對(duì)DSP的一些引腳進(jìn)行硬件設(shè)置的麻煩。底層程序指已經(jīng)固化在DSP指定Flash空間中的程序,不允許用戶(hù)修改和擦除,主要用于實(shí)現(xiàn)在線(xiàn)升級(jí)的時(shí)機(jī)判斷、數(shù)據(jù)接收及代碼燒寫(xiě)等功能,該程序中使用了Flash2803x_API庫(kù)存函數(shù)(詳見(jiàn)2.2節(jié));應(yīng)用程序即為用戶(hù)的升級(jí)程序[3]。
    F28035 DSP每次上電復(fù)位,先運(yùn)行底層程序,與PC機(jī)建立聯(lián)系,然后根據(jù)PC機(jī)的指令來(lái)判斷是否需要升級(jí)應(yīng)用程序。若需要,則將通過(guò)串口發(fā)送來(lái)的應(yīng)用程序代碼燒寫(xiě)至F28035片內(nèi)Flash指定扇區(qū);否則將繼續(xù)執(zhí)行原有的應(yīng)用程序。當(dāng)應(yīng)用程序很大或DSP的RAM空間比較小時(shí),可采用將應(yīng)用程序代碼分批發(fā)給DSP,DSP接收并燒寫(xiě)完一批代碼后,再進(jìn)行下一批代碼的接收和燒寫(xiě)工作,直到所有的應(yīng)用程序代碼都燒寫(xiě)完畢。
2 在線(xiàn)升級(jí)的具體實(shí)現(xiàn)
2.1 應(yīng)用程序

    用戶(hù)的應(yīng)用程序經(jīng)過(guò)CCS編譯連接生成具有模塊化格式的目標(biāo)文件(.out),該文件中的代碼和數(shù)據(jù)分別存放在不同的段中,因而不能直接用來(lái)燒寫(xiě)Flash,需將其轉(zhuǎn)換為Flash能識(shí)別的數(shù)據(jù)格式——二進(jìn)制文件  (.bin)。本文采用hex2000.exe和FileOshell.exe工具來(lái)實(shí)現(xiàn)文件轉(zhuǎn)換。首先,應(yīng)用程序經(jīng)過(guò)編譯連接生成.out文件,然后通過(guò)hex2000.exe把.out文件轉(zhuǎn)換成.hex文件,再通過(guò)FileOshell.exe將文件轉(zhuǎn)換成.bin文件。先做一個(gè)批處理文件,內(nèi)容如下:
    Example_2803xAdcSoc.out
    -map Example_2803xAdcSoc.map
    -o Example_2803xAdcSoc.hex
    -m
    -memwidth 16
    -image
    ROMS
    {
       Flash28035:  origin = 0x3e8000, len= 0x1000, romwidth=
        16, fill=0xFFFF
    }

其中,Example_2803xAdcSoc.out 是應(yīng)用程序經(jīng)過(guò)CCS生成的文件;-map是生成map文件;-o是生成hex文件;-m是Motorola-S 格式;-memwidth 16指存儲(chǔ)器位數(shù)為16 bit;-image指選擇映像文件;ROMS 是所需要轉(zhuǎn)換的起始地址、長(zhǎng)度、位數(shù)及填充。本文選擇從0x3e8000開(kāi)始,長(zhǎng)度是4 KB,即FlashH,F(xiàn)lashH中未用的部分用0xFFFF填充,本文把這個(gè)批處理文件命名為:Example_2803xAdcSoc.cmd。接下來(lái)要生成.bin文件,先做一個(gè)MS-DOS型批處理文件,其內(nèi)容如下:     IFileIOShell.exe -i Example_2803xAdcSoc.hex -o Example_2803xAdcSoc.bin
    注意要把Example_2803xAdcSoc.out、hex2000.exe、FileIO
Shell.exe、Example_2803xAdcSoc.cmd和MS-DOS型批處理文件放在同一目錄下,然后雙擊MS-DOS型批處理文件,即生成所需要的Example_2803xAdcSoc.bin文件。
2.2 底層程序
    底層程序用于實(shí)現(xiàn)將串口發(fā)送的數(shù)據(jù)燒寫(xiě)至Flash的指定部分,涉及到應(yīng)用程序的正確定位和復(fù)位后的啟動(dòng)過(guò)程,是實(shí)現(xiàn)整個(gè)在線(xiàn)升級(jí)的重點(diǎn)。底層程序流程圖如圖1所示。底層程序主要實(shí)現(xiàn)以下功能[3]:

    (1)上電復(fù)位查詢(xún)功能。上電復(fù)位后通過(guò)接收上位機(jī)發(fā)送的命令判斷是否升級(jí)。若上位機(jī)發(fā)送的是升級(jí)命令,則跳轉(zhuǎn)到底層程序中升級(jí)部分執(zhí)行;否則,跳轉(zhuǎn)到原有的應(yīng)用程序處執(zhí)行。
    (2)搬移燒寫(xiě)程序的功能。由于F28035片上Flash不支持在其中一個(gè)扇區(qū)運(yùn)行程序去擦除或燒寫(xiě)其他扇區(qū),故完成接收數(shù)據(jù)和燒寫(xiě)Flash工作的這部分程序(即底層程序中的升級(jí)部分程序)需搬移至片內(nèi)RAM或片外RAM上運(yùn)行。實(shí)現(xiàn)程序搬移的函數(shù)為:
    void MemCopy (Uint16 *SourceAddr,  Uint16 *Source End
        Addr, Uint16 *DestAddr)
       {
      while (SourceAddr < SourceEndAddr)
          {
                *DestAddr++ = *SourceAddr++;
            }
             return ;
    }
其中,SourceAddr為Flash中升級(jí)程序的起始地址,SourceEndAddr為Flash中升級(jí)程序的結(jié)束地址;DestAddr為搬移至內(nèi)存的首地址。
    (3)接收上位機(jī)發(fā)送的應(yīng)用程序代碼并保存到DSP
指定的內(nèi)存中(一般為RAM區(qū))。這是通過(guò)串口RS232來(lái)實(shí)現(xiàn)的。并確定用于數(shù)據(jù)保存的這部分內(nèi)存未被占用。例如,若需要將應(yīng)用程序代碼暫存到F28035的L0 SARAM區(qū)域(地址空間0x3F8000-0x3F8800)。定義數(shù)組Uint16 BlockBuffer[2048]用于存儲(chǔ)應(yīng)用程序代碼,在底層程序中采用存儲(chǔ)器定位語(yǔ)句,將上面的緩沖數(shù)組定位到相應(yīng)的存儲(chǔ)空間:
   #pragma DATA_SECTION(BlockBuffer,“BlockTransferbuffer”);
     在底層程序CMD文件中,采用定位語(yǔ)句,將BlockTransferbuffer定位到DSP的L0 SRAM空間:
    BlockTransferBuffer:> L0 SARAM  PAGE=2  
                          //地址空間:0x3F8000~0x3F8800
    通過(guò)以上底層程序的設(shè)置,可將應(yīng)用程序緩存到指定的RAM區(qū)域中。
    (4)代碼接收結(jié)束后,將內(nèi)存中的代碼燒寫(xiě)至指定Flash扇區(qū),該步驟通過(guò)調(diào)用Flash2803x_API庫(kù)函數(shù)完成。底層程序中所用到的Flash2803x_API庫(kù)函數(shù)如下[6]:
    ①擦除扇區(qū)的函數(shù)為Uint16 Flash28035_Erase(Uint16 SectorMask,&Fstatus),其中,SectorMask為即將被擦除的扇區(qū);&Fstatus為執(zhí)行擦除操作后返回的狀態(tài)值,用來(lái)判斷擦除操作是否成功。②將程序燒寫(xiě)到Flash扇區(qū)的函數(shù)為Uintl6 Flash28035_Program(&FlashAddr, &BuffAddr,Length,&Fstatus),其中,&FlashAddr為即將被燒寫(xiě)的Flash扇區(qū)的起始地址;&BuffAddr為即將準(zhǔn)備燒寫(xiě)的程序當(dāng)前存放在內(nèi)存空間的首地址;Length為程序長(zhǎng)度;&Fstatus為執(zhí)行燒寫(xiě)操作后返回的狀態(tài)值,用來(lái)判斷燒寫(xiě)操作是否成功。③校驗(yàn)燒寫(xiě)到Flash中的程序?yàn)閁int16 Flash28035_Verify(&FlashAddr,&BuffAddr,Length,&Fstatus),其中,&FlashAddr指定從Flash內(nèi)開(kāi)始比較的首地址;&BuffAddr為被比較文件的存儲(chǔ)首地址;Length是需要比較的16 bit字的個(gè)數(shù),程序長(zhǎng)度;&Fstatus是執(zhí)行校驗(yàn)操作后返回的狀態(tài)值,用來(lái)判斷校驗(yàn)操作是否成功。
2.3 底層程序和應(yīng)用程序的定位
    DSP F28035上電復(fù)位后,CPU將從內(nèi)部Boot Rom獲得復(fù)位向量。復(fù)位向量指向Boot Rom并執(zhí)行其內(nèi)部的Bootloader程序,執(zhí)行完畢后確定從內(nèi)部Flash啟動(dòng)。程序指針跳轉(zhuǎn)到Flash的0x3F7FF6處。由于這個(gè)地址是固定的,因此底層程序必須燒寫(xiě)在以這個(gè)地址為起始地址的空間內(nèi)。DSP進(jìn)入底層軟件程序中運(yùn)行,首先通過(guò)接收上位機(jī)的命令來(lái)判斷是否進(jìn)行在線(xiàn)升級(jí),如果進(jìn)行在線(xiàn)升級(jí),則跳轉(zhuǎn)到相應(yīng)升級(jí)程序中執(zhí)行;否則,跳轉(zhuǎn)到原有的應(yīng)用程序處執(zhí)行。由底層程序跳轉(zhuǎn)到原有的應(yīng)用程序處執(zhí)行時(shí),采用絕對(duì)地址跳轉(zhuǎn)。部分程序如下所示:
     #define Jumpgxcx (void (*)(void))0x3E8FFE 
                            //定義應(yīng)用程序的跳轉(zhuǎn)地址
     SCI_SendStatus(“upgrade program? (y/n):”)  
                                 //向上位機(jī)詢(xún)問(wèn)是否升級(jí)
     temp = SCIA_GetByteData_app();   
                        //接收上位機(jī)發(fā)送來(lái)的是否升級(jí)命令
           if (temp==’y’)                  
           {
                 main2();   //如果升級(jí),則跳轉(zhuǎn)到升級(jí)程序中執(zhí)行
           }
           Else     
           {
                  (*Jumpgxcx)();   
    //如果不升級(jí),則采用絕對(duì)地址跳轉(zhuǎn)到應(yīng)用程序中執(zhí)行
       }
}
    底層程序的cmd配置與應(yīng)用程序的cmd配置要保持一致,不能產(chǎn)生地址沖突。同時(shí),要注意底層程序和應(yīng)用程序的跳轉(zhuǎn)地址配置。
    底層程序cmd文件的部分配置如下:
    BEGIN : origin = 0x3F7FF6, length = 0x000002 
    RESET : origin = 0x3FFFC0, length = 0x000002 /*
    codestart : > BEGIN           PAGE = 0
    應(yīng)用程序cmd文件的部分配置如下:
    BEGIN : origin = 0x3E8FFE, length = 0x000002 
    codestart : > BEGIN         PAGE = 0
3 燒寫(xiě)步驟
    首先把底層程序通過(guò)JTAG接口燒寫(xiě)到F28035中,然后再進(jìn)行應(yīng)用程序的燒寫(xiě)。應(yīng)用程序的燒寫(xiě)步驟為:先把串口調(diào)試工具的參數(shù)配置為波特率9 600 bit/s、8 bit數(shù)據(jù)位、1 bit停止位、沒(méi)有奇偶校驗(yàn)位;選擇發(fā)送文本文件方式,發(fā)送應(yīng)用程序的.bin文件到DSP。由于F28035的RAM區(qū)比較小,可以采取把應(yīng)用程序代碼分為多次發(fā)送的方式。燒寫(xiě)過(guò)程如圖2所示。

 

 

    本文介紹了一種基于串口通信的DSP應(yīng)用程序在線(xiàn)升級(jí)技術(shù),可以在不打開(kāi)機(jī)箱的條件下實(shí)現(xiàn)模塊軟件的更新升級(jí)。經(jīng)過(guò)實(shí)驗(yàn)發(fā)現(xiàn),采用在線(xiàn)升級(jí)技術(shù)來(lái)更新程序所耗費(fèi)的時(shí)間比采用JTAG口燒寫(xiě)程序所耗費(fèi)的時(shí)間要長(zhǎng)一些,但解決了復(fù)雜情況下程序升級(jí)困難的問(wèn)題。總之,該方法簡(jiǎn)單可靠,可應(yīng)用于嵌入式設(shè)備的軟件程序更新升級(jí)中。
參考文獻(xiàn)
[1] 蘇奎峰,呂強(qiáng),耿慶鋒,等.TMS320F2812原理與開(kāi)發(fā)[M]. 北京:電子工業(yè)出版社,2005.
[2] 李聲飛,代華山.基于串口通信的DSP程序動(dòng)態(tài)加載技術(shù)[J]. 電訊技術(shù),2011,51(6):121-124.
[3] 李靜,張樹(shù)團(tuán).TMS320F2812片內(nèi)Flash在線(xiàn)燒寫(xiě)技術(shù)研究[J].國(guó)外電子元器件,2008(10):37-40.
[4] 孫軼,許少尉. TMS320F2812芯片的Flash燒寫(xiě)技術(shù)[J].航空計(jì)算技術(shù),2006,36(5):46-49.
[5] TI公司. TMS320F281x boot ROM serial Flash programming[Z]. 2007.
[6] TI公司. TMS320F2803x piccolo Flash API[Z].2010.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 亚洲成人看片 | 一级国产视频 | 国产一区二区高清在线 | 丁香伊人五月综合激激激 | 国产精品毛片一区二区三区 | 香港三级88久久经典 | 偷自拍第一页 | 欧美日产国产亚洲综合图区一 | 另类视频在线观看 | 亚洲视频免费一区 | 日本特级淫片免费 | 亚洲一区二区三区久久 | 日本欧美高清 | 成人免费午间影院在线观看 | 国产精品99久久久久久宅男 | 欧美成人视屏 | 亚洲第一区视频 | 久久久久国产成人精品 | 国产一级精品视频 | 色哟哟国产成人精品 | 精品亚洲福利一区二区 | 99久久久国产精品免费播放器 | 国产一区二区三区视频在线观看 | 国产精品久久久久久久久久影院 | 亚洲一级毛片中文字幕 | 久久99国产精品亚洲 | 欧美日韩精品国产一区二区 | 一级做a爰片久久毛片看看 一级做a爰片久久毛片鸭王 | 久草福利资源 | 国产欧美日韩中文久久 | 99视频网 | 久国产 | 国产欧美日韩在线 | 欧美国产成人免费观看永久视频 | 国产亚洲精品美女一区二区 | 久久精品国产精品青草色艺 | a级高清观看视频在线看 | 国产成人免费高清激情视频 | 亚洲一区视频在线 | 欧美日韩亚洲成色二本道三区 | 日韩美女视频一区 |