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

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

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

    用戶的應用程序經過CCS編譯連接生成具有模塊化格式的目標文件(.out),該文件中的代碼和數據分別存放在不同的段中,因而不能直接用來燒寫Flash,需將其轉換為Flash能識別的數據格式——二進制文件  (.bin)。本文采用hex2000.exe和FileOshell.exe工具來實現文件轉換。首先,應用程序經過編譯連接生成.out文件,然后通過hex2000.exe把.out文件轉換成.hex文件,再通過FileOshell.exe將文件轉換成.bin文件。先做一個批處理文件,內容如下:
    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 是應用程序經過CCS生成的文件;-map是生成map文件;-o是生成hex文件;-m是Motorola-S 格式;-memwidth 16指存儲器位數為16 bit;-image指選擇映像文件;ROMS 是所需要轉換的起始地址、長度、位數及填充。本文選擇從0x3e8000開始,長度是4 KB,即FlashH,FlashH中未用的部分用0xFFFF填充,本文把這個批處理文件命名為:Example_2803xAdcSoc.cmd。接下來要生成.bin文件,先做一個MS-DOS型批處理文件,其內容如下:     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 底層程序
    底層程序用于實現將串口發送的數據燒寫至Flash的指定部分,涉及到應用程序的正確定位和復位后的啟動過程,是實現整個在線升級的重點。底層程序流程圖如圖1所示。底層程序主要實現以下功能[3]:

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

 

 

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

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲一区二区三区高清不卡| 欧美不卡视频一区发布| 午夜精彩国产免费不卡不顿大片| 亚洲精品欧美日韩专区| 亚洲国产色一区| 在线成人亚洲| 激情亚洲网站| 伊人久久大香线蕉av超碰演员| 国产一区二区三区丝袜| 国产亚洲va综合人人澡精品| 国产欧美亚洲精品| 国产伦精品免费视频| 国产精品影音先锋| 国产精品夜色7777狼人| 国产精品爽爽ⅴa在线观看| 国产精品另类一区| 国产精品午夜在线| 国产人妖伪娘一区91| 国产欧美一区二区色老头| 国产日韩欧美中文| 国产亚洲一级| 红桃视频亚洲| 亚洲第一精品久久忘忧草社区| 在线精品视频在线观看高清| 亚洲国产精品传媒在线观看 | 国产婷婷色一区二区三区| 国产区欧美区日韩区| 国产视频一区在线观看| 国内自拍一区| 亚洲福利在线看| 99国产欧美久久久精品| 一区二区三区欧美激情| 亚洲欧美精品中文字幕在线| 欧美在线视频在线播放完整版免费观看| 欧美一区二区高清在线观看| 久久精品视频在线看| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲精品麻豆| 亚洲午夜激情网站| 久久国产精品一区二区三区| 美女视频网站黄色亚洲| 欧美日韩亚洲一区在线观看| 国产精品网站视频| 激情偷拍久久| 日韩亚洲欧美成人| 午夜视黄欧洲亚洲| 亚洲三级国产| 亚洲免费影视| 另类酷文…触手系列精品集v1小说| 欧美国产三区| 国产精品人人做人人爽| 激情综合色丁香一区二区| 亚洲精品五月天| 午夜精品久久| 一本久道综合久久精品| 久久av一区| 欧美国产大片| 国产欧美va欧美不卡在线| 亚洲国产精品福利| 亚洲女爱视频在线| 亚洲精品久久久蜜桃| 午夜精品网站| 欧美高清视频| 国产日韩精品在线观看| 亚洲精品在线免费| 欧美中文在线观看国产| 一区二区三区四区五区精品| 久久精品人人做人人爽电影蜜月| 欧美欧美全黄| 国内精品久久久久国产盗摄免费观看完整版 | 国产一区二区三区高清| 99re视频这里只有精品| 亚洲高清自拍| 午夜免费在线观看精品视频| 欧美国产综合视频| 国产日产欧产精品推荐色| 亚洲精品中文字幕女同| 久久精品日韩一区二区三区| 亚洲欧美成aⅴ人在线观看| 免费视频久久| 国产午夜精品理论片a级探花| 日韩午夜激情| 亚洲激情视频| 久久精品免费播放| 国产精品久久国产愉拍| 亚洲国产精品第一区二区| 欧美一级夜夜爽| 亚洲在线黄色| 欧美精品色综合| 好吊视频一区二区三区四区| 亚洲午夜性刺激影院| 日韩午夜精品| 欧美xxx成人| 激情91久久| 欧美伊人久久久久久久久影院| 亚洲尤物视频在线| 欧美激情第10页| 亚洲国产成人精品久久久国产成人一区| 亚洲欧美日韩区| 午夜精品久久久久久| 欧美日韩精品是欧美日韩精品| 在线精品观看| 亚洲国产成人精品女人久久久| 欧美在线影院| 国产精自产拍久久久久久| 亚洲网站在线看| 亚洲免费综合| 欧美日韩在线另类| 亚洲老板91色精品久久| 亚洲美女视频在线观看| 六十路精品视频| 影音先锋在线一区| 亚洲国产成人av| 美女图片一区二区| 亚洲第一福利在线观看| 亚洲国产精品激情在线观看| 久久久久久久高潮| 国内免费精品永久在线视频| 香蕉久久精品日日躁夜夜躁| 欧美在线影院| 国产真实精品久久二三区| 性8sex亚洲区入口| 久久久噜噜噜久久| 国产真实乱偷精品视频免| 欧美一区亚洲二区| 久久久中精品2020中文| 黄网站色欧美视频| 亚洲激情在线播放| 欧美韩国一区| 日韩视频一区| 亚洲综合色激情五月| 国产精品视频精品视频| 亚洲男人影院| 久久久久高清| 在线免费观看日本一区| 亚洲精品美女在线观看| 欧美人与禽性xxxxx杂性| 一本一道久久综合狠狠老精东影业| 亚洲天堂av高清| 国产精品麻豆va在线播放| 午夜视频精品| 免费不卡欧美自拍视频| 亚洲日本成人网| 亚洲一区免费网站| 国产伦精品一区二区三区高清| 久久99伊人| 欧美成人亚洲成人日韩成人| 亚洲免费观看在线观看| 亚洲欧美在线观看| 国产亚洲精品aa| 91久久亚洲| 欧美日韩国产专区| 亚洲在线国产日韩欧美| 玖玖综合伊人| 99国产一区| 久久精品三级| 亚洲黄一区二区| 亚洲欧美制服另类日韩| 好吊日精品视频| 一本色道**综合亚洲精品蜜桃冫| 国产精品乱码一区二区三区| 欧美中日韩免费视频| 欧美人体xx| 欧美一级视频| 欧美精品日韩三级| 亚洲欧美中文日韩在线| 欧美成人免费播放| 一区二区三区四区蜜桃| 久久精品视频va| 亚洲卡通欧美制服中文| 久久国产精品电影| 亚洲精品女人| 久久精品在线免费观看| 亚洲日本欧美| 久久精品国内一区二区三区| 亚洲精品小视频在线观看| 久久精品99久久香蕉国产色戒| 亚洲精品九九| 久久久久看片| 一本色道久久88综合日韩精品| 久久久av水蜜桃| 一区二区三区久久网| 美女啪啪无遮挡免费久久网站| 一区二区三区视频在线| 欧美a级大片| 午夜精品www| 欧美日韩成人一区| 亚洲第一天堂无码专区| 国产精品视频999| 99视频精品全国免费| 国产亚洲综合精品| 亚洲一二三区在线观看| 亚洲大片在线观看| 久久九九久精品国产免费直播| 日韩亚洲欧美综合| 免费成人高清在线视频| 亚洲欧美另类在线观看| 欧美日韩精品系列| 亚洲精品久久久久久久久久久久久 | 亚洲视频在线观看三级|