孫紅敏 杜運(yùn)哲 楊正專(zhuān) 胡子佳
(南京中車(chē)浦鎮(zhèn)海泰制動(dòng)設(shè)備有限公司 江蘇 南京 210031)
地鐵列車(chē)調(diào)試和運(yùn)營(yíng)階段,制動(dòng)系統(tǒng)控制軟件需要根據(jù)地鐵列車(chē)現(xiàn)車(chē)運(yùn)行情況進(jìn)行優(yōu)化和修正,將涉及現(xiàn)車(chē)軟件升級(jí)操作,而地鐵制動(dòng)系統(tǒng)控制器安裝在地鐵列車(chē)車(chē)體下方,傳統(tǒng)軟件升級(jí)方式需要拆卸控制器通過(guò)專(zhuān)用燒錄工具對(duì)軟件進(jìn)行升級(jí),操作不便,耗時(shí)耗力,需要尋找一種更加方便快捷、安全有效的軟件升級(jí)方法。UDS(Unified Diagnostic Services)協(xié)議是國(guó)際ISO統(tǒng)一診斷服務(wù)協(xié)議標(biāo)準(zhǔn),定義了一套規(guī)范化和高安全性的控制器軟件升級(jí)服務(wù)標(biāo)準(zhǔn)[1]。目前基于 UDS 協(xié)議的軟件升級(jí)方法在汽車(chē)電子領(lǐng)域應(yīng)用廣泛,各大主流汽車(chē)生產(chǎn)商都基于UDS協(xié)議開(kāi)發(fā)了軟件升級(jí)工具[2]。因此,本文針對(duì)地鐵制動(dòng)系統(tǒng)控制器開(kāi)展了基于UDS協(xié)議的軟件升級(jí)方法研究,將 UDS 協(xié)議中控制器在線(xiàn)升級(jí)相關(guān)的診斷指令集成到控制器BootLoader程序中,通過(guò)上位機(jī)軟件配合控制器BootLoader程序?qū)崿F(xiàn)對(duì)應(yīng)用軟件的在線(xiàn)升級(jí)。
UDS(Unified Diagnostic Services)協(xié)議即ISO 14229道路車(chē)輛統(tǒng)一診斷服務(wù)協(xié)議,該協(xié)議為OSI模型中的一個(gè)應(yīng)用層協(xié)議,該協(xié)議支持CAN、LIN、Flexray、Ethernet和K-line常用汽車(chē)通訊總線(xiàn)[3]。
在UDS協(xié)議中,控制器作為診斷服務(wù)器,診斷設(shè)備作為客戶(hù)端,客戶(hù)端使用應(yīng)用層服務(wù)請(qǐng)求在1個(gè)或多個(gè)服務(wù)端中執(zhí)行診斷功能。服務(wù)端使用應(yīng)用層服務(wù)將請(qǐng)求的診斷服務(wù)提供的響應(yīng)數(shù)據(jù)發(fā)送回客戶(hù)端[4]。UDS協(xié)議定義了6大類(lèi)26種診斷服務(wù),每種服務(wù)都有獨(dú)立的SID(Service ID)。UDS協(xié)議定義了診斷服務(wù)的基本框架,主機(jī)廠和零部件供應(yīng)商可以根據(jù)自身需求開(kāi)發(fā)自有診斷服務(wù)工具,實(shí)現(xiàn)諸如故障讀取、參數(shù)設(shè)置、軟件程序升級(jí)等多種診斷服務(wù)功能[5]。
地鐵制動(dòng)系統(tǒng)控制器采用的微控制器(MCU)為恩智浦公司的MPC56系列MCU。該型控制器FLASH存儲(chǔ)容量為2 MB,編譯完成的映像文件格式為Motorola S-Record,文件后綴名為“.S19”。
Motorola S-Record格式允許在2個(gè)計(jì)算機(jī)系統(tǒng)之間上傳和下載二進(jìn)制文件,該格式在計(jì)算機(jī)系統(tǒng)與摩托羅拉微控制器和微處理器的仿真器或評(píng)估板之間傳輸程序和數(shù)據(jù)時(shí)被廣泛使用。Motorola S-Record格式文件內(nèi)容由多個(gè)S記錄組成,文件內(nèi)容中的一行為一個(gè)S記錄,每個(gè)S記錄由多個(gè)特殊格式ASCII字符組成,單個(gè)S記錄最多由156個(gè)字符組成[6]。每個(gè)S記錄由記錄類(lèi)型、字符長(zhǎng)度、存儲(chǔ)地址、代碼/數(shù)據(jù)、校驗(yàn)和5個(gè)部分組成,組成形式如圖1所示。
圖1 Motorola S-Record格式文件單個(gè)S記錄組成圖
(1)記錄類(lèi)型:由2個(gè)ASCII字符構(gòu)成,描述該條記錄的類(lèi)型,共有 S0、S1、S2、S3、S5、S6、S7、S8、S9這9種類(lèi)型。
(2)字符長(zhǎng)度:由2個(gè)ASCII字符構(gòu)成1個(gè)十六進(jìn)制整型值,描述了該條記錄后續(xù)包含的ASCII字符對(duì)數(shù)。
(3)存儲(chǔ)地址:由4、6、8個(gè)ASCII字符構(gòu)成1個(gè)十六進(jìn)制整型值,描述了數(shù)據(jù)字段需要被載入的存儲(chǔ)地址,該部分字符長(zhǎng)度取決于描述存儲(chǔ)地址的字節(jié)長(zhǎng)度。
(4)代碼/數(shù)據(jù):由0-64個(gè)ASCII字符構(gòu)成,每2個(gè)ASCII字符構(gòu)成1個(gè)字節(jié)的數(shù)據(jù),該字段描述了需要載入存儲(chǔ)地址的代碼或數(shù)據(jù)內(nèi)容。
(5)校驗(yàn)和:由2個(gè)ASCII字符構(gòu)成1個(gè)十六進(jìn)制的整型值,將前面所有字段的ASCII字符每2個(gè)組成1個(gè)字節(jié)的十六進(jìn)制整型值,將所有字節(jié)數(shù)值相加求和,保留和的最低2個(gè)字符為1個(gè)字節(jié),校驗(yàn)和為該字節(jié)補(bǔ)碼。
實(shí)際的Motorola S-Record格式存儲(chǔ)示例如圖2所示。
圖2 Motorola S-Record格式文件示例圖
MPC56系列單片機(jī)共擁有2 MB的片內(nèi)代碼存儲(chǔ)空間,地址范圍0x00000000~0x001FFFFF。其中前272 KB用于存儲(chǔ)BootLoader程序,地址范圍:0x00000000~0x00043FFF。剩下的地址空間用于存儲(chǔ)測(cè)試應(yīng)用程序代碼,地址范圍:0x00044000~0x001FFFFF,地址劃分示意如圖3所示。
圖3 映像文件地址劃分示意圖
軟件升級(jí)過(guò)程基于UDS服務(wù)協(xié)議實(shí)現(xiàn),上位機(jī)發(fā)送不同的服務(wù)ID號(hào)給控制器BootLoader程序來(lái)逐一實(shí)現(xiàn)軟件升級(jí)步驟,完成軟件升級(jí)過(guò)程,主要的步驟為重編程模式進(jìn)入、預(yù)編程過(guò)程、主編程過(guò)程。
控制器在運(yùn)行過(guò)程中收到上位機(jī)發(fā)送的服務(wù)ID號(hào)為0x10,子功能號(hào)為0x02的報(bào)文時(shí),控制機(jī)將在特定存儲(chǔ)區(qū)的外部重編程請(qǐng)求標(biāo)志有效,之后重啟控制器。
控制器重啟后首先進(jìn)入BootLoader程序,BootLoader程序?qū)刂破鬟M(jìn)行簡(jiǎn)單初始化后,對(duì)特定存儲(chǔ)區(qū)的外部重編程標(biāo)志進(jìn)行檢查,若外部重編程標(biāo)志有效,則BootLoader程序?qū)⑦M(jìn)入重編程會(huì)話(huà)模式,等待上位機(jī)發(fā)送新的報(bào)文信息,流程圖如圖4所示。
圖4 重編程模式進(jìn)入流程圖
預(yù)編程過(guò)程用來(lái)為要下載的控制器做重編程前的網(wǎng)絡(luò)準(zhǔn)備,同時(shí)也進(jìn)行提高軟件下載速度的相關(guān)操作,預(yù)編程過(guò)程流程如圖5所示:
圖5 預(yù)編程過(guò)程流程圖
(1)進(jìn)入擴(kuò)展診斷會(huì)話(huà)模式:上位機(jī)通過(guò)診斷會(huì)話(huà)控制(0x10)服務(wù),使控制器進(jìn)入擴(kuò)展診斷會(huì)話(huà)模式,為后續(xù)禁止控制器間的正常通信和控制 DTC 設(shè)置做準(zhǔn)備。
(2)讀取設(shè)備名稱(chēng)和項(xiàng)目信息: 上位機(jī)通過(guò)標(biāo)識(shí)符讀取數(shù)據(jù)(0x22)服務(wù)讀取控制器設(shè)備名稱(chēng)和項(xiàng)目信息,上位機(jī)確認(rèn)當(dāng)前設(shè)備和項(xiàng)目與即將更新的軟件一致后繼續(xù)后續(xù)操作。
(3)檢查重編程條件:上位機(jī)通過(guò)例行控制(0x31)服務(wù)啟動(dòng)控制器重編程條件檢查流程,控制器將按照設(shè)定的檢測(cè)流程對(duì)重編程條件進(jìn)行檢驗(yàn),若重編程條件不滿(mǎn)足,則控制器不執(zhí)行重編程操作并向上位機(jī)發(fā)送否定響應(yīng)。
(4)停止DTC服務(wù):上位機(jī)通過(guò)控制診斷故障碼(DTC)設(shè)置(0x85)服務(wù)停止控制器DTC 狀態(tài)位的更新,這樣可以提升后續(xù)的軟件升級(jí)速度。
(5)禁用非診斷通信功能:上位機(jī)通過(guò)通信控制(0x28)服務(wù)請(qǐng)求禁用控制器非診斷報(bào)文的發(fā)送和接收,可以避免控制器正常通信占用帶寬資源,有助于提升軟件升級(jí)速度。
預(yù)編程過(guò)程結(jié)束后進(jìn)入重編程過(guò)程,繼續(xù)進(jìn)行軟件升級(jí)工作。
主編程過(guò)程中將真正執(zhí)行軟件升級(jí)工作,主編程過(guò)程流程如圖6所示。
圖6 主編程過(guò)程流程圖
(1)進(jìn)入重編程會(huì)話(huà)模式:上位機(jī)通過(guò)診斷會(huì)話(huà)控制(0x10)服務(wù),使控制器進(jìn)入編程會(huì)話(huà)模式。
(2)安全訪(fǎng)問(wèn)控制:為了提高系統(tǒng)的安全性,控制器會(huì)對(duì)重編程請(qǐng)求進(jìn)行安全認(rèn)證,安全認(rèn)證通過(guò)后才可正常進(jìn)行重編程操作,否則控制器拒絕執(zhí)行重編程操作。安全訪(fǎng)問(wèn)流程為上位機(jī)通過(guò)安全訪(fǎng)問(wèn)(0x27)服務(wù)請(qǐng)求控制器安全種子,下位機(jī)將安全種子發(fā)送給上位機(jī),上位機(jī)接收到控制器安全種子后進(jìn)行計(jì)算得到上位機(jī)安全種子后將上位機(jī)安全種子發(fā)給控制器,控制器對(duì)上位機(jī)安全種子進(jìn)行解析,若與自身種子配對(duì),則控制器解鎖成功,可以進(jìn)行后續(xù)重編程操作,否則控制器將拒絕執(zhí)行重編程指令并發(fā)送否定響應(yīng)。
(3)FLASH驅(qū)動(dòng)下載:為了提高系統(tǒng)安全性,防止軟件程序跑飛并異常調(diào)用FLASH驅(qū)動(dòng)程序擦除軟件代碼情況出現(xiàn),在軟件代碼設(shè)計(jì)時(shí)控制器中并沒(méi)有FLASH驅(qū)動(dòng)程序的任何備份。所以,為了實(shí)現(xiàn)對(duì)軟件程序的升級(jí),上位機(jī)需要依次通過(guò)請(qǐng)求下載(0x34)服務(wù)、傳輸數(shù)據(jù)(0x36)服務(wù)、請(qǐng)求傳輸退出(0x37)服務(wù)將FLASH驅(qū)動(dòng)備份到控制器制定內(nèi)存中,驅(qū)動(dòng)下載完成后上位機(jī)通過(guò)例行控制(0x31)服務(wù)啟動(dòng)控制器“檢查編程完整性”例程來(lái)檢查FLASH驅(qū)動(dòng)程序的正確性。
(4)“指紋”信息寫(xiě)入:在軟件升級(jí)之前,上位機(jī)需要通過(guò)標(biāo)識(shí)符寫(xiě)入數(shù)據(jù)(0x2E)服務(wù)將“指紋”信息寫(xiě)入控制器的指定存儲(chǔ)區(qū),“指紋”信息包括上位機(jī)品牌、型號(hào)、主機(jī)名、物理地址、IP地址等信息。上位機(jī)通過(guò)按標(biāo)志符讀取數(shù)據(jù)(0x22)服務(wù)可以讀取控制器“指紋”信息,“指紋”信息可以實(shí)現(xiàn)對(duì)本次重編程操作上位機(jī)的信息追蹤。
(5)應(yīng)用軟件擦除:上位機(jī)通過(guò)例行控制(0x31)服務(wù)啟動(dòng)控制器“應(yīng)用程序擦除”例程,控制器執(zhí)行該例程對(duì)應(yīng)用程序FLASH存儲(chǔ)空間全部擦除,同時(shí)控制器將特定存儲(chǔ)區(qū)的應(yīng)用軟件標(biāo)志位置為無(wú)效。
(6)應(yīng)用軟件下載:上位機(jī)通過(guò)請(qǐng)求下載(0x34)服務(wù)、傳輸數(shù)據(jù)(0x36)服務(wù)、請(qǐng)求傳輸退出(0x37)服務(wù)將新的應(yīng)用軟件代碼寫(xiě)入對(duì)應(yīng)的FLASH地址。
(7)數(shù)據(jù)檢查:上位機(jī)通過(guò)例行控制(0x31)服務(wù)啟動(dòng)“檢查編程完整性”例程和“檢查編程依賴(lài)性”例程,對(duì)下載完成的應(yīng)用軟件代碼進(jìn)行完整性和依賴(lài)性檢查,檢查合格后將特定存儲(chǔ)區(qū)的應(yīng)用軟件標(biāo)志位置為有效。
(8)復(fù)位控制器:上位機(jī)通過(guò)ECU復(fù)位(0x31)服務(wù),使用物理尋址方式,使目標(biāo)控制產(chǎn)生硬復(fù)位,控制器復(fù)位并退出重編程過(guò)程。
(9)進(jìn)入默認(rèn)會(huì)話(huà)模式:上位機(jī)通過(guò)診斷會(huì)話(huà)控制(0x10)服務(wù),使控制器進(jìn)入默認(rèn)會(huì)話(huà)模式,進(jìn)入默認(rèn)會(huì)話(huà)模式后控制器網(wǎng)絡(luò)通信恢復(fù),DTC服務(wù)開(kāi)啟,完成控制器軟件升級(jí)完成。
根據(jù)上述軟件實(shí)現(xiàn)過(guò)程,使用JAVA語(yǔ)言進(jìn)行上位機(jī)程序設(shè)計(jì),使用C語(yǔ)言進(jìn)行BootLoad程序設(shè)計(jì),軟件設(shè)計(jì)完成后搭建驗(yàn)證平臺(tái)對(duì)軟件升級(jí)功能進(jìn)行實(shí)際驗(yàn)證。
驗(yàn)證環(huán)境搭建情況如圖7所示,控制器使用的MCU為MPC56系列,該控制器具備以太網(wǎng)通信模塊,配置后可以使用以太網(wǎng)通信接口與外部設(shè)備通信,映像文件存儲(chǔ)格式為S-Record,文件后綴為“.s19”。上位機(jī)程序在電腦端運(yùn)行,電腦和控制器之間使用網(wǎng)線(xiàn)連接,兩者之間采用以太網(wǎng)方式通信。
圖7 驗(yàn)證平臺(tái)示意圖
將控制網(wǎng)口與電腦網(wǎng)口使用網(wǎng)線(xiàn)連接完成后打開(kāi)上位機(jī)軟件,選擇需要刷新的控制器板卡,設(shè)置板卡功能尋址地址和物理尋址地址,選擇FLASH驅(qū)動(dòng)文件,選擇需要升級(jí)的應(yīng)用軟件程序“.s19”文件,選擇數(shù)據(jù)文件,然后勾選下載程序文件和下載數(shù)據(jù)文件選項(xiàng),再點(diǎn)擊開(kāi)始下載按鈕,進(jìn)入程序下載流程。在通訊日志界面顯示當(dāng)前正在進(jìn)行的操作步驟,軟件下載失敗時(shí)會(huì)有提示,可以通過(guò)查看下載失敗時(shí)的步驟診斷失敗原因。通過(guò)多次測(cè)成功完成了地鐵制動(dòng)系統(tǒng)控制器的軟件升級(jí)工作。實(shí)際驗(yàn)證結(jié)果表明,根據(jù)上一章基于UDS協(xié)議設(shè)計(jì)完成的軟件升級(jí)過(guò)程成功實(shí)現(xiàn)了地鐵制動(dòng)系統(tǒng)控制器在線(xiàn)升級(jí)操作。上位機(jī)操作界面如圖8所示。
圖8 上位機(jī)操作界面
本文設(shè)計(jì)了一種基于UDS協(xié)議的地鐵制動(dòng)系統(tǒng)控制器軟件升級(jí)方法,并搭建試驗(yàn)驗(yàn)證環(huán)境完成了地鐵制動(dòng)系統(tǒng)控制器軟件升級(jí)方法的驗(yàn)證。試驗(yàn)結(jié)果表明,該方法方便快捷、可靠有效地實(shí)現(xiàn)了地鐵制動(dòng)系統(tǒng)控制器軟件在線(xiàn)升級(jí),解決了傳統(tǒng)軟件升級(jí)方式需要拆卸控制器耗時(shí)耗力及操作不便的問(wèn)題,提升了軟件維護(hù)效率。