羅成娥,任海強(qiáng)
(1.重慶郵電大學(xué) 通信與信息工程學(xué)院,重慶400065;2.重慶恩菲斯軟件有限公司)
?
基于ISO15765協(xié)議的嵌入式系統(tǒng)升級基于ISO15765協(xié)議的嵌入式系
羅成娥1,任海強(qiáng)2
(1.重慶郵電大學(xué) 通信與信息工程學(xué)院,重慶400065;2.重慶恩菲斯軟件有限公司)
CAN分布式系統(tǒng)內(nèi)節(jié)點(diǎn)應(yīng)用軟件升級代價(jià)高,針對此進(jìn)行了研究,論述一種將ISO15765協(xié)議診斷服務(wù)功能運(yùn)用于CAN總線之上,利用具有Cortex-M3內(nèi)核的節(jié)點(diǎn)微控制器STM32F103VET6集成功能模塊和在線應(yīng)用編程技術(shù)(In Application Programming,IAP)。研究實(shí)現(xiàn)了嵌入式軟件在線升級方案,實(shí)驗(yàn)證明該方案操作便捷,可靠性和穩(wěn)定性好,對其他運(yùn)用在無線網(wǎng)絡(luò)中的嵌入式應(yīng)用軟件遠(yuǎn)程升級有參考意義。
ISO 15765協(xié)議;升級; CAN總線; IAP
本升級系統(tǒng)中,節(jié)點(diǎn)通過CAN總線[1-4],運(yùn)用In Application Programming(IAP)[5-7]技術(shù)進(jìn)行升級維護(hù),這種技術(shù)實(shí)現(xiàn)較簡便,且嵌入式設(shè)備一般都提供IAP的Flash編程接口,所以本系統(tǒng)使用IAP接口。目前運(yùn)用IAP技術(shù)實(shí)現(xiàn)在線升級方案版本繁多復(fù)雜,參考文獻(xiàn)[8]采用CCP協(xié)議提出適用于汽車Electronic Control Unit(ECU)的升級系統(tǒng)方案,但實(shí)現(xiàn)過程復(fù)雜且協(xié)議開銷大,參考文獻(xiàn)[9]由奇瑞公司提出一種通過口令驗(yàn)證等工作的升級方法,該方式增加了系統(tǒng)負(fù)擔(dān)和操作復(fù)雜度。本文提出一種將診斷協(xié)議ISO15765[10]運(yùn)用到CAN總線定義的底層協(xié)議ISO11898[11]之上,來實(shí)現(xiàn)嵌入式應(yīng)用軟件在線升級方案,系統(tǒng)網(wǎng)絡(luò)應(yīng)用進(jìn)程交互方式采用Client/ Server(C/S)模式[12],客戶運(yùn)用ISO15765協(xié)議提供的診斷服務(wù)功能,結(jié)合IAP技術(shù)通過CAN_bus將升級軟件燒寫到服務(wù)器端存儲(chǔ)器中換掉原應(yīng)用程序。該方案操作便捷,可靠性和穩(wěn)定性好,對別的應(yīng)用在無線網(wǎng)絡(luò)(如GSM、GPRS等)中的嵌入式應(yīng)用軟件遠(yuǎn)程升級[13]有借鑒意義。
STM32F103VET6屬于STM32F103xx[14-16]系列芯片,是1款基于ARM Cortex TM_M3 32位的RISC內(nèi)核的微控制器[17-18]
通過IAP[19-20]技術(shù)Flash存儲(chǔ)器結(jié)構(gòu)上被映射為兩個(gè)存儲(chǔ)塊,即用于存儲(chǔ)IAP功能程序代碼的BootLoader存儲(chǔ)塊[21]和用于存儲(chǔ)IAP功能外全部代碼的常態(tài)存儲(chǔ)塊。默認(rèn)狀態(tài)時(shí)PC指針只能移動(dòng)于常態(tài)存儲(chǔ)區(qū)內(nèi)并讀取指令當(dāng)且僅當(dāng)MCU處于運(yùn)行模式時(shí),此刻的PC指針不斷讀取需要執(zhí)行的程序指令,在升級操作執(zhí)行前需要完成兩個(gè)程序塊的編寫[19],即通過IAP功能燒入執(zhí)行在線升級功能的代碼塊,和通過JTAG或ISP接口燒入并利用如CAN,USB、USART等通信接口實(shí)現(xiàn)程序和數(shù)據(jù)接收來實(shí)現(xiàn)對升級功能軟件升級的代碼塊, Flash中需同時(shí)燒錄這兩塊代碼。當(dāng)編寫完這兩部分代碼后,若客戶提出升級程序的需要[21], 此時(shí)在程序指令指導(dǎo)下PC指針將跳轉(zhuǎn)至BootLoader程序區(qū),當(dāng)該部分程序完成數(shù)據(jù)通信和CRC校驗(yàn)等升級操作后PC指針再次回到常態(tài)存儲(chǔ)區(qū)執(zhí)行原位置處的應(yīng)用程序。
2.1 系統(tǒng)設(shè)計(jì)
方案采用Client/Server(C/S)模式[12],客戶端為PC機(jī),服務(wù)器端為集成有微控制器STM32F103VET6、光耦合器、CAN總線控制器和CAN收發(fā)器等功能模塊的嵌入式系統(tǒng),由于客戶端無法直接與CAN總線網(wǎng)絡(luò)進(jìn)行通信,故增加CAN總線接口卡將PC機(jī)通過CAN總線連接服務(wù)器[22]。此處選擇USB-CAN總線適配器[23]。
本系統(tǒng)中客戶端用作操作界面[24],當(dāng)客戶需要對目標(biāo)服務(wù)器進(jìn)行應(yīng)用軟件升級時(shí)便向目標(biāo)服務(wù)器發(fā)送升級命令,客戶要與目標(biāo)服務(wù)器間進(jìn)行通信需解析目標(biāo)文件。最后根據(jù)ISO15765通信協(xié)議組織命令報(bào)文并將報(bào)文發(fā)送至目標(biāo)服務(wù)器,目標(biāo)服務(wù)器識(shí)別升級命令后調(diào)用BootLoader程序完成如注冊中斷服務(wù)程序[22]和接收數(shù)據(jù)并執(zhí)行Flash編程等操作完成應(yīng)用程序升級。
2.2 通信協(xié)議
圖1 ISO-15765通信協(xié)議分層結(jié)構(gòu)
通信協(xié)議分層結(jié)構(gòu)對應(yīng)嵌入式系統(tǒng)TCP/IP協(xié)議模型[12],ISO-15765通信協(xié)議分層結(jié)構(gòu)如圖1所示,本協(xié)議模型中應(yīng)用層為本文軟件開發(fā)工作的重點(diǎn),主要負(fù)責(zé)客戶與目標(biāo)服務(wù)器間應(yīng)用層業(yè)務(wù)流開發(fā)。應(yīng)用層運(yùn)用ISO15765協(xié)議[10]診斷服務(wù)功能實(shí)現(xiàn)目標(biāo)服務(wù)器識(shí)別、工作模式切換、數(shù)據(jù)下載和傳送、Flash編程等功能,這些操作由ISO15765診斷協(xié)議的診斷服務(wù)指令完成。ISO15765-2[24-26]協(xié)議用于網(wǎng)絡(luò)層,負(fù)責(zé)對診斷數(shù)據(jù)包封裝與解封裝、分包和組包、多幀整理等操作。長報(bào)文的多包數(shù)據(jù)傳輸過程中的流控制和順序控制、同步控制和錯(cuò)誤恢復(fù)等功能以及命令格式在ISO15765-2協(xié)議中也給出了定義。此外ISO15765診斷功能與底層CAN數(shù)據(jù)幀和網(wǎng)絡(luò)層報(bào)文間的具體映射情況[24]該協(xié)議也給出了詳細(xì)定義,底層協(xié)議需要規(guī)定一些物理特性,因 CAN網(wǎng)絡(luò)[1-4,11]可達(dá)1 Mbps的快速通信速率和非破壞性網(wǎng)絡(luò)仲裁機(jī)制以及通信方式可靠靈活,已被廣泛應(yīng)用于車載網(wǎng)絡(luò),故底層協(xié)議采用基于國際標(biāo)準(zhǔn)的ISO11898-1 協(xié)議。
按診斷系統(tǒng)對診斷服務(wù)的公共需求建立并定義了ISO15765[10,27]國 際標(biāo)準(zhǔn)協(xié)議,其診斷服務(wù)功能完全涵蓋ISO14230診斷協(xié)議[28-29],該協(xié)議運(yùn)用成熟,靈活可靠,開銷代價(jià)小,完善的診斷協(xié)議標(biāo)準(zhǔn)使得ISO15765協(xié)議堅(jiān)持了道路機(jī)動(dòng)車網(wǎng)絡(luò)的發(fā)展走勢。目前ISO15765協(xié)議[10,27]已經(jīng)廣泛運(yùn)用于歐美等多個(gè)國家汽車生產(chǎn)廠商普遍運(yùn)用ISO15765診斷協(xié)儀到嵌入式診斷系統(tǒng)中,對將來的FlexRay、Most、無線網(wǎng)絡(luò)等也可以很好運(yùn)用此協(xié)議標(biāo)準(zhǔn)。ISO15765協(xié)議以O(shè)SI模型為基準(zhǔn)從結(jié)構(gòu)上將協(xié)議分7層,這可允許將ISO15765協(xié)議各層功能分開運(yùn)用到其他底層協(xié)議之上[10,27-28],此處將ISO15765協(xié)議診斷服務(wù)功很好運(yùn)用到CAN總線通信網(wǎng)絡(luò)中,底層運(yùn)用CAN總線定義的基于ISO11898的數(shù)據(jù)鏈路層和物理層協(xié)議,應(yīng)用層運(yùn)用ISO15765協(xié)議[10,27-28]特有完備的診斷服務(wù)功能實(shí)現(xiàn)數(shù)據(jù)上載和下載、數(shù)據(jù)傳送、診斷服務(wù)管理、輸入和輸出控制、遠(yuǎn)程啟動(dòng)ECU例程等診斷服務(wù)功能。
2.3 存儲(chǔ)器映像和Flash分區(qū)存儲(chǔ)
STM32F103VET6[15-18]片內(nèi)集成512 KB Flash和64 KB SRAM,用于存放用戶程序的Main Block存儲(chǔ)塊和Information Block信息塊組成Flash程序存儲(chǔ)器,Main Block地址范圍從0x0800 0000~0x0807 FFFF,容量為64K×64位,共256頁每頁2K,Information Block容量為258×64位,地址0x1FFF F000~0x1FFF F7FF共2 KB的System memory和地址0x1FFF F800~0x1FFF F80F共16字節(jié)的Option Bytes組成,STM32F103VET6存儲(chǔ)器映像略——編者注。
本文根據(jù)BootLoader程序大小將512 KB的Flash分兩個(gè)區(qū),即地址0x0800 0000~0x0800 1FFF共1 KB 存儲(chǔ)空間的BootLoader程序和地址0x0800 2000~0x0808 0000共 504 KB的空間的應(yīng)用程序,F(xiàn)lash分區(qū)存儲(chǔ)如圖2所示。
圖2 Flash分區(qū)存儲(chǔ)
2.4 在線升級運(yùn)行狀態(tài)和流程設(shè)計(jì)
根據(jù)方案設(shè)計(jì)將服務(wù)器運(yùn)行狀態(tài)主要分成硬件初始化、運(yùn)行用戶程序和在線升級3個(gè)基本運(yùn)行狀態(tài)[22],圖3為升級狀態(tài)轉(zhuǎn)移圖。
圖3 狀態(tài)轉(zhuǎn)移圖
圖4 升級流程
① 硬件初始化[18,22]:初始化變量和存儲(chǔ)器以及所有外設(shè),設(shè)置堆棧和中斷,轉(zhuǎn)換ISR向量表等,只有當(dāng)狀態(tài)轉(zhuǎn)換或優(yōu)化性能時(shí),轉(zhuǎn)換ISR向量表可選擇將向量表從代碼段拷貝到SRAM中指定地方。啟動(dòng)應(yīng)用程序和允許中斷由復(fù)位服務(wù)子程序來完成它們軟件復(fù)位、建立中斷向量表和處理中斷函數(shù)等職能,當(dāng)服務(wù)器獲得升級命令時(shí)則會(huì)關(guān)閉所有中斷服務(wù)進(jìn)程以避免Flash在編程時(shí)受訪問[22],減少進(jìn)程占用。服務(wù)器若發(fā)生異常情況如數(shù)據(jù)溢出中斷時(shí)則轉(zhuǎn)入相應(yīng)中斷處理進(jìn)程,因服務(wù)器在默認(rèn)模式下不能釋放接收緩沖區(qū)以及執(zhí)行BootLoader程序等升級操作故將工作模式換至擴(kuò)展診斷模式。
② 判斷服務(wù)器當(dāng)前狀態(tài)是否滿足在線升級前提條件,如當(dāng)客戶有升級請求時(shí)PC指針跳轉(zhuǎn)至應(yīng)用程序起始地址0x0800 2000處執(zhí)行,否則等待升級。
③ 服務(wù)器進(jìn)入編程模式后執(zhí)行升級過程[22],即擦除Flash、下載并接收升級程序、寫入Flash等實(shí)現(xiàn)Flash編程的操作。
2.5 診斷服務(wù)
診斷服務(wù)的6種服務(wù)原語由應(yīng)用層提供[30],應(yīng)用層服務(wù)原語如圖5所示。其中請求原語(Req)表示請求某個(gè)診斷服務(wù),接口函數(shù)為xxx_Req();請求確認(rèn)原語(Req_con)表示請求報(bào)文是否傳送到ECU端,接口函數(shù)為SendReqCon();確認(rèn)原語(Con)表示接收響應(yīng)數(shù)據(jù),接口函數(shù)為SendConfirm();指示原語(ind)表示接收請求數(shù)據(jù),接口函數(shù)為SendInd();響應(yīng)原語(resp)表示發(fā)送響應(yīng)報(bào)文,接口函數(shù)為xxx_Resp();響應(yīng)確認(rèn)原語(resp_con)表示響應(yīng)報(bào)文是否發(fā)送到診斷儀端,接口函數(shù)為SendRespCon()。服務(wù)器與客戶通過診斷命令信息交互[26],由診斷命令實(shí)現(xiàn)。
圖5 應(yīng)用層服務(wù)原語
3.1 啟動(dòng)配置過程
STM32F103VET6芯片屬于STM32F10xxx系列芯片[14-17],啟動(dòng)模式可選擇3種不同方式,通過選擇BOOT[1∶0]的引腳來制定,在SYSCLK 的第4個(gè)上升沿時(shí)BOOT引腳的值會(huì)被鎖存,這個(gè)動(dòng)作在目標(biāo)系統(tǒng)復(fù)位后執(zhí)行。此時(shí)操作人員如果要選擇系統(tǒng)復(fù)位后的啟動(dòng)模式可以通過設(shè)置BOOT1和BOOT0引腳的情況,由于當(dāng)系統(tǒng)從待機(jī)模式退出時(shí)BOOT引腳的值將被重新鎖存,CPU應(yīng)沿著啟動(dòng)存儲(chǔ)器的0x0000 0004 指示的地址開始執(zhí)行代碼且啟動(dòng)已經(jīng)延遲了一段時(shí)間。此時(shí)刻前CPU在地址0x0000 0000處得到堆棧頂?shù)牡刂?,?dāng)系統(tǒng)處于待機(jī)模式時(shí)BOOT 引腳需要設(shè)置為系統(tǒng)需要的啟動(dòng)配置模式。
3.2 IAP技術(shù)詳細(xì)過程
本文根據(jù)IAP技術(shù)原理設(shè)計(jì)用于存放啟動(dòng)程序(Startup.S)[24]、傳輸協(xié)議、CAN驅(qū)動(dòng)程序、引導(dǎo)程序等數(shù)據(jù)的引導(dǎo)加載程序——BootLoader程序來實(shí)現(xiàn)lAP技術(shù)[19],用戶需通選擇一個(gè)通信接口,如RS232、USB、CAN總線等接口。此處選擇CAN總線接口來接收客戶端程序,默認(rèn)狀態(tài)時(shí)PC指針處于存儲(chǔ)有協(xié)議棧和操作系統(tǒng)控制算法等數(shù)據(jù)的應(yīng)用代碼區(qū)[8]。當(dāng)系統(tǒng)上電或復(fù)位后若有升級命令,首先PC指針會(huì)跳到BootLoader 區(qū)啟動(dòng)BootLoader程序,此時(shí)測試其對應(yīng)引腳電平,若為低電平則初始化IAP程序入口指針地址。其次執(zhí)行BootLoader程序塊,利用其中的的IAP程序,通過串口(或JTAG調(diào)試接口)下載完備的應(yīng)用程序并將其寫入Flash指定區(qū)域[8],以及完成CRC校驗(yàn)等應(yīng)用程序升級操作,待升級操作結(jié)束后系統(tǒng)重啟。具體代碼實(shí)現(xiàn)略——編者注。
[1] 羅峰,孫汝昌.汽車CAN總線系統(tǒng)原理、設(shè)計(jì)與應(yīng)用[M].北京:電子工業(yè)出版社,2011.
[2] Feng Luo, Jie Chen, Guibao Zhuang, et al.Research On CAN Controller Conformance Test System[C]// Computer Science and Information Technology .IEEE,2009:582-585.
[3] 楊春杰.CAN總線技術(shù)[M].北京:北京航空航天大學(xué)出版社,2009.
[4] Peter Liggesmeyer,Dieter Rombach.Software Engineering eingebetter systeme Grundlagen-Methodik-Anwendungen[M].張聚,汪慧英,等譯.北京:電子工業(yè)出版社,2009:228-244.
[5] 姜曉梅,李祥和,任朝榮,等.基于ARM的IAP在線及遠(yuǎn)程升級技術(shù)[J].計(jì)算機(jī)應(yīng)用,2008,28(2):519-521.
[6] Dae-Sik Ko.A Design of X-internet Development Framework Based on Server Service Application Programming Interface[C]//Future Generation Communication and Networking(FGCN).IEEE CONFERENCE PUBLICATION,2007:468-471.
[7] Rick Grehan,Robert Moote.Real-Time Programming A Guidf To 32-Bit Embeddel Developmen[M].許汝峰,譯.北京:中國電力出版社,2002.
[8] 蔣建春,陳洪霞,鄭太雄.基于CCP的ECU在線編程技術(shù)的實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2011,37(5):241-243.
[9] 王聰,王金龍.一種整車診斷方法. CN,101692017 A[P]. 2010-04-07.
[10] ISO.14229 Road Vehicles- Diagnostic Systems, Keyword Protocol 2000-Part 3-Application Layer, 1997.
[11] ISO.11898 Robert Bosch GmbH.CAN Specification Version2.0A/0B,1991.
[12] M Tim Jones.TCP/IP Application Layer Protocols for Embedded Systems [M].路曉村,徐宏,等譯.北京:電子工業(yè)出版社,2003.
[13] 趙炯,賈培源,李中山,等.嵌入式設(shè)備遠(yuǎn)程在線升級技術(shù)[J].計(jì)算機(jī)工程,2010,36(12):262-264.
[14] 馬忠梅,徐琰,葉青林.ARM Cortex微控制器教程[M].北京:北京航空航天大學(xué)出版社,2010.
[15] 南京萬利.STM32F10xxx參考手冊,2008.
[16] ST. RM0008 Reference manual STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced ARM-based 32-bit MCUs,2010.
[17] 楊濤,唐攀.深入淺出嵌入式底層軟件開發(fā)[M].北京:北京航空航天大學(xué)出版社,2011.
[18] 李寧.基于MDK的SAM3處理器開發(fā)應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2010.
[19] 張舞杰,南亦民.基于STM32F103VB的應(yīng)用編程技術(shù)的實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2009,29(10):2820-2822.
[20] Zhichao Dai, Ying Xiang. Design of Remote Upgrade of Equipment Monitoring System Software[C]//2010 Second International Conference on Information Technology and Computer Science.IEEE,2010.
[21] 李興鶴,蔡亮,宋吉波. STM32用戶基于IAP的程序更新技術(shù)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2012,12(1):74-75.
[22] 冉曉蓉,張凡,孫林.基于CAN總線在線更新機(jī)制的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與科學(xué),2008,30(1):125-127.
[23] DSP開發(fā)工作室.USB轉(zhuǎn)CAN總線接口適配器使用說明書[OL].[2013-07].http://shop72113390.taobao.com/.
[24] 蔣建春,連依萍,鄭太雄,等.基于診斷協(xié)議的車身ECU在線升級系統(tǒng)的設(shè)計(jì)[J].重慶郵電大學(xué)學(xué)報(bào):自然科學(xué)版,2011,23(4):464-468.
[25] 黃麗芳,張斌.基于汽車診斷技術(shù)的在線刷新協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)[OL]. [2013-07].http://www.cnki.cn.
[26] 郭嘉強(qiáng),黃麗芳.基于Internet的遠(yuǎn)程診斷技術(shù)方案的分析與研究[OL].[2013-07].http://www.cnki.cn.
[27] ISO.ISO/DIS 14229-1.2 Road vechicles-unified diagnostic services(UDS)-Part 1:Specification and requirements,2010.
[28] 劉國權(quán).KWP2000協(xié)議分析及開發(fā)測試 [C]//2006年恒潤科技用戶大會(huì),2006.
[29] International Standard Organization.ISO15765-3 Road vechicles-Diagnostics on Controller Area Networks(CAN)-Part 3:Implementation of unified diagnostic services(UDS on CAN,2010.
[30] 劉麗麗,徐皚冬,宋巖,等.車輛通用故障診斷協(xié)議的研究與開發(fā)[J].計(jì)算機(jī)工程,2012,38(16):9-13.
羅成娥(碩士研究生),主要研究方向?yàn)榍度胧杰浖?;任海?qiáng)(高級工程師),主要研究方向?yàn)槠囯娮?、嵌入式軟件開發(fā)。
(責(zé)任編輯:高珍 收修改稿日期:2013-07-27)
Luo Cheng′e1,Ren Haiqiang2
(1. College of Communication and Information Engineering, Chongqing University of Posts and Telecommunications, Chongqing 400065,China;2. NFS software Co.,Ltd.)
Upgrading application programs in the nodes in a CAN system is at high cost. It raises a scheme which apples the diagnostic function of the ISO15765 protocol on CAN bus, and it is taken advantage of the integrated function blocks of STM32F103VET6 ,which affords the Cortex-M3 kernel. the In Application Programming technology is well used to the implement research of the online updgrade solution. The program can also has the reference significance for the design of the remote online updgrade process in other embedded systems because of its advantages of convenient operation, high reliability and stability.
ISO 15765 protocol; upgrade; CAN bus; IAP
TP311
A