嚴(yán)建龍
(洛陽(yáng)欒川鉬業(yè)集團(tuán)股份有限公司選礦三公司,河南欒川471500)
隨著嵌入式芯片在通信、電子、工業(yè)等領(lǐng)域的日益廣泛應(yīng)用,DSP 芯片燒寫程序的難易程度和產(chǎn)品后續(xù)升級(jí)服務(wù)變得十分重要。目前TMS320F2811 芯片程序更新方法主要有兩種:
1) 通過TI 公司提供的燒寫工具,利用JTAG 仿真器進(jìn)行程序的擦除、燒寫等操作;
2) 通過引導(dǎo)加載程序的下載功能,通過上位機(jī)軟件將經(jīng)轉(zhuǎn)換后的程序文件經(jīng)過各種接口燒寫至片內(nèi) Flash 中[1]。
第一種方式便于跟蹤調(diào)試,但在實(shí)際應(yīng)用中增加了電路板體積,需將產(chǎn)品機(jī)殼打開,操作繁瑣,維護(hù)性差,用戶體驗(yàn)差,在產(chǎn)品量產(chǎn)后嚴(yán)重制約效率,在一些特殊場(chǎng)合JTAG 接口會(huì)影響產(chǎn)品工作的可靠性;而后者則大大降低了維護(hù)成本,有效提升了升級(jí)效率及可靠性,尤其是在產(chǎn)品量產(chǎn)階段具有十分可觀的經(jīng)濟(jì)價(jià)值[2]。
實(shí)現(xiàn)基于串口的TMS320F2811 程序在線升級(jí),主要需完成以下兩個(gè)方面工作:編寫基于串口通信的BootLoader 引導(dǎo)程序;制定上位機(jī)與MCU 間通信協(xié)議。
著重針對(duì)以上兩點(diǎn)具體的實(shí)現(xiàn)方式進(jìn)行詳細(xì)的闡述及討論。系統(tǒng)工作原理如圖1所示。
圖1 系統(tǒng)工作原理框圖
F2811 軟件中包含兩個(gè)CCS 工程,其中工程A為輔助軟件升級(jí)程序,必須通過J-Link 進(jìn)行燒寫;工程B 為待進(jìn)行升級(jí)程序,既可通過J-Link 進(jìn)行燒寫,也可通過串口與上位機(jī)通信,以在線升級(jí)方式進(jìn)行燒寫。工程A、B 均須按照要求分配地址空間。
F2811 的 Flash 大小是 128k×16,分為 10 個(gè)Sector,每個(gè)Sector 有其各自的大小[3],地址區(qū)域劃分的詳細(xì)信息見表1。
將Flash 區(qū)域重新劃分,具體見表2,可實(shí)現(xiàn)根據(jù)串口指令進(jìn)入原始程序,或者新程序,并且在Bootloader 過程中對(duì)設(shè)備進(jìn)行更新[4]。
表1 F2811 Flash Sector 地址區(qū)域劃分
表2 F2811 Flash Sector 地址區(qū)域重新劃分
軟件在運(yùn)行過程中,若串口收到進(jìn)行程序升級(jí)指令后,BOOT 程序首先檢測(cè)當(dāng)前軟件所處的有效區(qū)標(biāo)志,其中輔助升級(jí)程序在段J 位置設(shè)置為A區(qū),待升級(jí)程序在J 位置設(shè)置為B 區(qū),擦除處于非有效區(qū)的Flash 空間,待擦除完畢后,通過對(duì)話框形式選擇待燒寫的hex 文件,之后軟件將自動(dòng)重啟,若軟件之前處于A 區(qū),則完成軟件的在線升級(jí);否則軟件處于B 區(qū)則重復(fù)上述步驟完成軟件的在線升級(jí)。系統(tǒng)軟件主程序設(shè)計(jì)具體流程如圖2所示。
在擦除A 區(qū)過程中若出現(xiàn)異常情況,導(dǎo)致A 區(qū)應(yīng)用程序不可用,但由于B 區(qū)中的更新程序完好,當(dāng)系統(tǒng)重新上電運(yùn)行時(shí),BOOT 程序?qū)⑼ㄟ^B 區(qū)將輔助升級(jí)軟件重新下載到A 區(qū),自動(dòng)重啟后從A 區(qū)運(yùn)行,可執(zhí)行后續(xù)的升級(jí)操作,提高了整個(gè)系統(tǒng)的可靠性。
圖2 系統(tǒng)軟件主流程圖
Boot 中操作函數(shù)均通過CCS 開發(fā)環(huán)境制作成.lib 文件[5],輔助升級(jí)程序和待升級(jí)程序均可以調(diào)用,其中重要的函數(shù)如下:
unsigned int Get_Active_Section(void); //檢測(cè)軟件有效區(qū)標(biāo)志,返回值A(chǔ) 或B
void Enter_Update (int Erase_A); //根據(jù)所處區(qū)域,進(jìn)行flash 擦除、軟件升級(jí)操作
存儲(chǔ)區(qū)實(shí)現(xiàn)主要是通過.cmd 文件進(jìn)行[6],輔助升級(jí)程序與待升級(jí)程序的設(shè)置具體如下[7]:
MCU 更新數(shù)據(jù)采用 Intel HEX 文件[8],若要實(shí)現(xiàn)該HEX 文件,需使用hex2000.exe 工具和批處理文件out2hex.bat。具體內(nèi)容如下:
此program.cmd 文件的內(nèi)容如下:
將批處理文件 out2hex.bat、hex2000.exe、program.cmd 和CCS 開發(fā)環(huán)境中編譯生成的first.out文件放在同一路徑下,雙擊out2hex 文件即可。
F2811 與上位機(jī)軟件之間的命令交互,主要包括進(jìn)入程序升級(jí)操作、擦除操作、發(fā)送程序數(shù)據(jù)操作、升級(jí)完成等,各項(xiàng)操作指令有對(duì)應(yīng)幀頭、幀尾及校驗(yàn)字節(jié),保證了數(shù)據(jù)傳輸和交互過程的準(zhǔn)確性及可靠性。
系統(tǒng)上位機(jī)軟件界面如圖3所示,包括操作按鈕、程序文件選擇對(duì)話框、程序運(yùn)行狀態(tài)顯示框等。
圖3 上位機(jī)界面
在上位機(jī)界面選擇相應(yīng)串口號(hào),配置串口通信的參數(shù)為:波特率115200bps,數(shù)據(jù)位8,起始位1,停止位1,無(wú)奇偶校驗(yàn)位。
點(diǎn)擊“start”按鈕啟動(dòng)更新模式,然后按照提示框一步步完成軟件的串口在線升級(jí),軟件完成在線升級(jí)后,將自動(dòng)進(jìn)行軟件重啟,通過上位機(jī)軟件可查詢升級(jí)后的軟件版本號(hào),以確定軟件是否升級(jí)成功。
通過對(duì)基于串口TMS320F2811 芯片BOOT 引導(dǎo)程序原理的詳細(xì)闡述,分析了具體的實(shí)現(xiàn)步驟和方法。提出的基于串口的TMS320F2811 程序在線升級(jí)方法具有通用性,對(duì)于其它嵌入式芯片的實(shí)現(xiàn)具有一定的借鑒意義。實(shí)際應(yīng)用結(jié)果表明,基于串口的在線升級(jí)方法可靠性高,達(dá)到了預(yù)期的效果,大大提升了實(shí)際工作效率。