摘要:針對(duì)發(fā)射車載高、低壓配電設(shè)備軟件升級(jí)過(guò)程中存在的難題,例如傳統(tǒng)JTAG和串口IAP升級(jí)方式難以滿足頻繁升級(jí)需求,設(shè)備拆裝不便且存在風(fēng)險(xiǎn)等。文章提出了一種基于CDSPF28335N和CAN總線的智能升級(jí)方法。該方法旨在解決產(chǎn)品批量生產(chǎn)軟件燒錄以及列裝后現(xiàn)場(chǎng)在線升級(jí)和軟件維護(hù)問(wèn)題。文章詳細(xì)闡述了系統(tǒng)組成、工作原理、升級(jí)方法和實(shí)現(xiàn)流程,并驗(yàn)證了該方法的可行性和有效性。
關(guān)鍵詞:智能升級(jí);CAN總線;CDSPF28335N;配電設(shè)備
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2025)01-0065-03 開(kāi)放科學(xué)(資源服務(wù)) 標(biāo)識(shí)碼(OSID) :
0 引言
發(fā)射車載配電設(shè)備負(fù)責(zé)整車高、低壓電能分配,通常包含多臺(tái)設(shè)備。這些設(shè)備的控制軟件運(yùn)行于基于CDSPF28335N數(shù)字信號(hào)處理器的主控板上。通過(guò)軟件升級(jí)或配置更改,可以快速便捷地滿足用戶需求變化和功能擴(kuò)展。然而,傳統(tǒng)的JTAG仿真接口升級(jí)需要拆卸設(shè)備,而串口IAP升級(jí)方式需要將BOOT引腳引出至外部維護(hù)接口。這兩種傳統(tǒng)升級(jí)方式都無(wú)法同時(shí)升級(jí)多個(gè)設(shè)備軟件,導(dǎo)致設(shè)備批量燒錄效率較低。
為解決上述問(wèn)題,本文提出了一種基于CDSPF28335N和CAN總線的智能升級(jí)方法。該方法利用CAN 總線廣播通信實(shí)現(xiàn)總線內(nèi)多個(gè)相同設(shè)備軟件的同時(shí)升級(jí),并利用CAN總線幀ID實(shí)現(xiàn)對(duì)不同設(shè)備軟件的智能識(shí)別和單獨(dú)升級(jí)。此外,該方法還利用FlashAPI 函數(shù)庫(kù)實(shí)現(xiàn)設(shè)備不停機(jī)在線升級(jí)。
1 系統(tǒng)簡(jiǎn)介及智能升級(jí)硬件組成
1.1 系統(tǒng)簡(jiǎn)介
高、低壓配電設(shè)備實(shí)現(xiàn)發(fā)射車整車的高壓配電和低壓配電,保證高壓用電設(shè)備和低壓用電設(shè)備的安全可靠,其中低壓配電設(shè)備軟件完全相同,通過(guò)讀取存儲(chǔ)的不同配置信息完成不同的電能分配功能。
1.2 硬件組成
配電設(shè)備本身須具備CAN 總線控制器和EEPROM 存儲(chǔ)芯片。因此可將CAN總線和EEPROM作為軟件智能升級(jí)的硬件組成使用。
2 智能升級(jí)的設(shè)計(jì)原理和方法
2.1 CAN 總線
軟件智能升級(jí)CAN總線設(shè)計(jì)需考慮滿足配電設(shè)備CAN通信要求的同時(shí),避免與用戶通信協(xié)議造成重疊和沖突。本研究將軟件升級(jí)標(biāo)識(shí)符“DID”、設(shè)備地址唯一標(biāo)識(shí)符“PID”、功能標(biāo)識(shí)符“FID”編入29位擴(kuò)展幀ID中,并對(duì)數(shù)據(jù)域信息進(jìn)行CRC校驗(yàn)。軟件升級(jí)幀格式定義,如表1所示。
2.2 I2C 總線和EEPROM
本研究中關(guān)于EEPROM讀寫(xiě)操作,通過(guò)EEPROM 存儲(chǔ)設(shè)備地址號(hào)、軟件升級(jí)狀態(tài)字,標(biāo)識(shí)當(dāng)前設(shè)備地址號(hào)及升級(jí)狀態(tài)[1]。詳細(xì)存放地址,如圖1所示。
3 智能升級(jí)的設(shè)計(jì)和實(shí)現(xiàn)
智能升級(jí)主要設(shè)計(jì)實(shí)現(xiàn)包括:
1) 二次Bootloader引導(dǎo)程序設(shè)計(jì);
2) 應(yīng)用程序智能升級(jí)模塊設(shè)計(jì)及目標(biāo)程序轉(zhuǎn)化;
3) 上位機(jī)程序設(shè)計(jì)。
3.1 二次Bootloader 引導(dǎo)程序設(shè)計(jì)
本研究需自行編寫(xiě)二次Bootloader引導(dǎo)程序。即芯片上電后正常運(yùn)行官方Bootloader,然后運(yùn)行二次Bootloader,“二次Boootloader引導(dǎo)程序”即相當(dāng)于應(yīng)用程序1,用戶“應(yīng)用程序”相當(dāng)于應(yīng)用程序2。
3.1.1 CMD 文件配置
針對(duì)數(shù)字信號(hào)處理器CMD 文件作出了詳細(xì)解釋,本研究通過(guò)工程下的CMD文件可知0x33FFF6中存放著codestart函數(shù),然后調(diào)用了RST中的c_int00函數(shù),最后跳轉(zhuǎn)至main函數(shù)執(zhí)行[2]。因此,為避免升級(jí)流程的擦除過(guò)程中二次Bootloader引導(dǎo)程序段代碼被擦除,二次Bootloader 程序的CMD 可參照官方CMD 文件,將0x33FFF6依然定義為程序BEGIN段,將其余空間分配到Flash的A和H區(qū)中。
3.1.2 初始化配置
初始化只須對(duì)CAN模塊、I2C模塊以及相應(yīng)的中斷進(jìn)行配置,其余外設(shè)資源的相關(guān)配置及中斷都可關(guān)閉。
3.1.3 FlashAPI 函數(shù)調(diào)用
本研究參考了文獻(xiàn)[3] 針對(duì)FlashAPI庫(kù)函數(shù)的詳細(xì)調(diào)用方法,并且根據(jù)芯片官方提供的FlashAPI函數(shù)庫(kù)進(jìn)行調(diào)用,API函數(shù)庫(kù)包含了:
1) Flash2833x_API_Config. h 和Flash2833x_API_Library.h;
2) Flash2833x_API_V210.lib文件。
3.1.4 跳轉(zhuǎn)函數(shù)
跳轉(zhuǎn)函數(shù)CAN_BOOT_JumpToApplication()主要用于升級(jí)前跳轉(zhuǎn)至二次Bootloader程序入口,執(zhí)行二次Bootloader引導(dǎo)程序,以及升級(jí)成功或失敗后跳轉(zhuǎn)至應(yīng)用程序入口,執(zhí)行應(yīng)用程序。
3.1.5 I2C 讀寫(xiě)EEPROM
1) ReadData():用于初始化配置后,程序啟動(dòng)I2C 總線模塊,讀取EEPROM地址0x0001FF00存儲(chǔ)的“升級(jí)狀態(tài)字”數(shù)據(jù);
2) WriteData():用于在接收到上位機(jī)升級(jí)指令后,將“升級(jí)狀態(tài)字”數(shù)據(jù)寫(xiě)入EEPROM的0x0001FF00段地址;此外用于在首次燒錄程序時(shí)將設(shè)備唯一地址號(hào)寫(xiě)入EEPROM的0x0001FF00段地址。
3.1.6 與上位機(jī)CAN 通信模塊設(shè)計(jì)
1) 協(xié)議設(shè)計(jì):如本文2.1節(jié)所述,為避免與配電設(shè)備原有通信協(xié)議沖突或重疊,設(shè)計(jì)了如表1所示,以分包號(hào)DF、升級(jí)標(biāo)識(shí)符DID、功能標(biāo)識(shí)符FID、設(shè)備地址唯一標(biāo)識(shí)符PID的幀ID格式標(biāo)識(shí)升級(jí)過(guò)程。
2) 郵箱分配:CAN總線控制器擁有32個(gè)可單獨(dú)配置為接收或者發(fā)送的郵箱[4] ,每個(gè)郵箱可獨(dú)立作為發(fā)送或接收郵箱使用。配電設(shè)備使用了其中0~19號(hào)共20 個(gè)郵箱用于外部CAN通信,本研究將用于在線升級(jí)的接收和發(fā)送郵箱分別配置為郵箱30和郵箱31。
3) 狀態(tài)機(jī)設(shè)計(jì):
①狀態(tài)機(jī)進(jìn)入方式:進(jìn)入方式有兩種,一是上電后二次Bootloader 引導(dǎo)程序通過(guò)I2C 總線讀取到EEPROM中存儲(chǔ)的“升級(jí)狀態(tài)字”狀態(tài)為需要升級(jí)時(shí),程序等待10s時(shí)間接收上位機(jī)的升級(jí)握手,由此進(jìn)入狀態(tài)機(jī);二是應(yīng)用程序運(yùn)行過(guò)程中,接收到上位機(jī)升級(jí)指令,應(yīng)用程序改寫(xiě)“升級(jí)狀態(tài)字”后跳轉(zhuǎn)至二次Bootloader引導(dǎo)程序入口,執(zhí)行二次Bootloader引導(dǎo)程序,重復(fù)方式一的運(yùn)行步驟,由此進(jìn)入狀態(tài)機(jī)。
②狀態(tài)機(jī)運(yùn)行過(guò)程:進(jìn)入狀態(tài)機(jī)后,此時(shí)將狀態(tài)機(jī)分為節(jié)點(diǎn)識(shí)別狀態(tài)、Flash 擦除狀態(tài)、程序固化狀態(tài)、指令反饋狀態(tài)、數(shù)據(jù)校驗(yàn)狀態(tài)以及錯(cuò)誤處理狀態(tài),其正常執(zhí)行成功后返回狀態(tài)機(jī)執(zhí)行成功結(jié)果。而升級(jí)失敗或錯(cuò)誤后均跳轉(zhuǎn)至錯(cuò)誤處理狀態(tài),判斷錯(cuò)誤原因,并將錯(cuò)誤原因代號(hào)反饋至上位機(jī),嘗試3次返回上一執(zhí)行狀態(tài),如連續(xù)超過(guò)3次則終止?fàn)顟B(tài)機(jī),返回狀態(tài)機(jī)執(zhí)行失敗結(jié)果。
③狀態(tài)機(jī)返回結(jié)果:若狀態(tài)機(jī)返回成功結(jié)果,則通過(guò)I2C總線將EEPROM中“升級(jí)狀態(tài)字”的內(nèi)容更改為“不需要升級(jí)”,然后執(zhí)行程序跳轉(zhuǎn),跳轉(zhuǎn)至應(yīng)用程序入口執(zhí)行應(yīng)用程序;若狀態(tài)機(jī)返回失敗結(jié)果,則直接跳轉(zhuǎn)至應(yīng)用程序入口執(zhí)行應(yīng)用程序。
3.2 應(yīng)用程序智能升級(jí)模塊設(shè)計(jì)及目標(biāo)程序轉(zhuǎn)化
3.2.1 CMD 文件配置
應(yīng)用程序的CMD 文件配置與本文3.1.1 節(jié)中類似,只須將應(yīng)用程序的入口地址定義為0x320000作為程序BEGIN段,還需要將Flash D區(qū)的起始地址改為0x320002,長(zhǎng)度改為0x007FFE。同時(shí)其余空間配置于除了Flash A區(qū)和H區(qū)以外的其他區(qū)段中。
3.2.2 通信模塊設(shè)計(jì)
應(yīng)用程序需接收到上位機(jī)升級(jí)握手指令后,二次Bootloader引導(dǎo)程序才開(kāi)始執(zhí)行,進(jìn)入狀態(tài)機(jī)。同樣地,通信模塊須加入跳轉(zhuǎn)函數(shù)CAN_BOOT_JumpToAp?plication(),用于握手成功后跳轉(zhuǎn)至二次Bootloader引導(dǎo)程序入口。
3.2.3 目標(biāo)程序格式轉(zhuǎn)化
利用TI公司提供的生成工具h(yuǎn)ex2000可以將out 文件轉(zhuǎn)換為可以直接燒寫(xiě)到Flash的hex文件格式[5] ,具體操作步驟為:
1) 在工程中選擇Propoties,進(jìn)入工程屬性;
2) 在屬性中選擇Build-gt;C2000 Hex Utility,勾選“Enable C2000 Hex Utility”選項(xiàng);
3) 重新編譯工程,即可在工程根目錄Rlease文件中找到生成好的hex文件。
3.3 上位機(jī)程序設(shè)計(jì)
本研究的上位機(jī)程序采用QT Creator進(jìn)行編寫(xiě),界面、通信模塊等設(shè)計(jì)[6]。
3.3.1 上位機(jī)界面設(shè)計(jì)
上位機(jī)界面設(shè)計(jì)大致功能為:
1) CAN基本配置:用于選擇CAN波特率;USB轉(zhuǎn)CAN 轉(zhuǎn)換器的設(shè)備號(hào)、通道號(hào);連接、斷開(kāi)CAN 轉(zhuǎn)換器;
2) 顯示功能:用于顯示當(dāng)前CAN總線上的配電設(shè)備節(jié)點(diǎn),顯示當(dāng)前軟件版本號(hào)信息;
3) 文件格式解析與分發(fā):通過(guò)點(diǎn)擊“打開(kāi)文件”按鈕,打開(kāi)生成的hex文件,自動(dòng)解析文件數(shù)據(jù),并自動(dòng)按軟件升級(jí)的通信協(xié)議要求分發(fā)文件數(shù)據(jù);
4) 升級(jí)功能按鈕:“下載準(zhǔn)備”與“下載鎖定”用于在線升級(jí)前與處理器程序進(jìn)行通信握手,“更新固件”用于啟動(dòng)軟件升級(jí)。
3.3.2 上位機(jī)CAN 通信設(shè)計(jì)
上位機(jī)CAN 通信驅(qū)動(dòng)部分依據(jù)ZLG 致遠(yuǎn)電子CAN通信二次開(kāi)發(fā)函數(shù)庫(kù)ControlCAN,調(diào)用其庫(kù)函數(shù)驅(qū)動(dòng);CAN通信應(yīng)用部分依據(jù)本文3.1.6節(jié)中所述總線協(xié)議進(jìn)行設(shè)計(jì)。
4 試驗(yàn)驗(yàn)證結(jié)果與分析
通過(guò)對(duì)高、低壓配電設(shè)備軟件在線升級(jí)進(jìn)行驗(yàn)證,CAN總線波特率為250 kbit/s,升級(jí)文件大小小于500 kB時(shí),單節(jié)點(diǎn)設(shè)備軟件升級(jí)完成時(shí)間大約為70 s,5 個(gè)節(jié)點(diǎn)相同設(shè)備軟件同時(shí)升級(jí)完成時(shí)間大約為80 s。因多節(jié)點(diǎn)時(shí)升級(jí)時(shí),為避免通信握手堵塞,按設(shè)備地址號(hào)由小到大依次間隔10 ms對(duì)上位機(jī)通信握手進(jìn)行回復(fù),因此當(dāng)同時(shí)升級(jí)多節(jié)點(diǎn)設(shè)備時(shí),會(huì)導(dǎo)致整個(gè)升級(jí)完成時(shí)間延長(zhǎng)。
5 結(jié)論
本研究利用基于CDSPF28335N 數(shù)字信號(hào)處理器,CAN總線通信特性以及I2C總線讀寫(xiě)EEPROM方式實(shí)現(xiàn)了配電設(shè)備軟件智能升級(jí)方法,解決了發(fā)射車載配電設(shè)備傳統(tǒng)升級(jí)方式須拆裝、耗時(shí)長(zhǎng)、操作煩瑣等問(wèn)題,且解決了設(shè)備大批量生產(chǎn)的軟件燒寫(xiě)問(wèn)題。經(jīng)過(guò)驗(yàn)證,智能升級(jí)方法穩(wěn)定、可靠,傳輸效率高,具有較高的應(yīng)用價(jià)值。
參考文獻(xiàn):
[1] 王典洪,李東峰,劉兵.EEPROM與DSP的接口技術(shù)[J].微處理機(jī),2008,29(2):30-32.
[2] 路帥,郭勇.DSP的CMD文件詳解[J].信息通信,2019,32(1):105-106.
[3] 黃浩,楊靖宇,徐杰,等.基于JDSPF28335的電子控制器在線加載軟件設(shè)計(jì)[J].信息技術(shù)與信息化,2023(5):51-54.
[4] 尹良鏡,王東升.基于TMS320F28335的CAN總線的在線升級(jí)[J].機(jī)械工程與自動(dòng)化,2018(4):84-86.
[5] 姚秀娟,王德勝.基于TMS320F2812的遠(yuǎn)程在線升級(jí)設(shè)計(jì)與實(shí)現(xiàn)[J].電子世界,2013(12):121-122.
[6] 霍亞飛.Qt Creator快速入門[M].4版.北京:北京航空航天大學(xué)出版社,2022.
【通聯(lián)編輯:聞翔軍】