《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于CAN總線的Bootloader設計與實現
基于CAN總線的Bootloader設計與實現
2015年微型機與應用第18期
王 琦1,黃悅鵬1,邢正陽1,蘇駿凱1,倪孟雄2
(1.南京郵電大學 通信與信息工程學院,江蘇 南京 210000; 2.上海奉天電子有限公司,上海 201800)
摘要: 使用BDM工具下載或升級應用程序,不僅麻煩而且穩定性也不高。采用在線更新的方法,設計并實現了一種基于CAN總線的Bootloader。介紹車載網絡通信與診斷服務的實現、Bootloader的設計以及其在車載控制單元的實現,并在此基礎上,提出最小Bootloader的概念,可以有效提高程序的靈活性。實驗結果證明,Bootloader能正確引導加載程序的運行,準確方便地實現應用程序的下載和更新,在軟件開發和測試過程中能夠極大地提高工作效率,而且Bootloader的穩定性也很高。還能將網絡層和UDS診斷服務部分方便地移植到其他芯片上,為后序的軟件開發與測試提供了方便。
Abstract:
Key words :

  摘  要: 使用BDM工具下載或升級應用程序,不僅麻煩而且穩定性也不高。采用在線更新的方法,設計并實現了一種基于CAN總線的Bootloader。介紹車載網絡通信與診斷服務的實現、Bootloader的設計以及其在車載控制單元的實現,并在此基礎上,提出最小Bootloader的概念,可以有效提高程序的靈活性。實驗結果證明,Bootloader能正確引導加載程序的運行,準確方便地實現應用程序的下載和更新,在軟件開發和測試過程中能夠極大地提高工作效率,而且Bootloader的穩定性也很高。還能將網絡層和UDS診斷服務部分方便地移植到其他芯片上,為后序的軟件開發與測試提供了方便。

  關鍵詞引導裝載程序;在線更新;診斷服務;CAN總線

0 引言

  為了避免在更新程序的過程中拆除ECU,通過串行總線、SD卡或USB口以及相應的通信協議,將應用程序更新到單片機中[1]。在更新過程中,系統不免受到外界干擾和軟件故障等影響,因此可靠性成為Bootloader開發工作中首要考慮的因素。同時,Bootloader也存在軟件升級的問題,現行的方案并不完善。為此,本文提出最小Bootloader以保證程序的靈活性,為了應對程序更新出錯的意外狀況,提出Stay-In-Boot的概念,增強程序的穩定性。

1 Bootloader部分

  1.1 Bootloader原理

  Bootloader的主要工作是初始化硬件設備、分配內存映射等,構建良好的軟硬件程序,并決定升級應用程序還是繼續運行原有的應用程序[2]。如果升級應用程序,則擦除原有程序數據并通過CAN網絡把更新的程序下載到Flash中,再拷貝到RAM中運行;如果繼續運行原有的應用程序,則把Flash中的應用程序數據拷貝到RAM里,程序跳轉到地址0x4000(僅針對S12G192而言)處運行。

  1.2 S12G192單片機的內存空間

  S12系列單片機支持兩種尋址方式:局部地址尋址和全局地址尋址。只有在對Flash進行操作時才會有全局地址的概念,對RAM和EEPROM進行操作時使用局部地址就可以了。

  Bootloader應該放在受保護的Flash中,但不是所有Flash都可以設置保護,所以一般放置在0xc000~0xfeff區間內。

2 ISO15765協議[3]

  按協議內容和體系結構實現來進行劃分,ISO15765協議共分為4層,分別是應用層、網絡層、數據鏈路層和物理層。應用層診斷協議設計應遵循ISO14229-1或ISO15765-3,應用層規定了具體診斷服務的服務標識符(SID)及后面所攜帶的參數格式與內容。應用層數據經過網絡層實現數據的傳輸、打包、解包,數據傳輸時以單幀和多幀的方式按ISO15765-2進行傳輸。數據經數據鏈路層時應按ISO 11898-1轉化為有效的CAN數據幀,最后經物理層實現與另一節點的通信。被診斷電子控制單元(Electronic Control Unit,ECU)收到請求報文后,再按協議體系結構進行逐層解析。

3 基于ISO15765的Bootloader設計與實現

001.jpg


  單片機中的Bootloader程序必須設計得盡量小,因為ECU中有限的Flash容量是由應用程序和Bootloader程序共同占用的。本文將Bootloader分為8大部分,如圖1所示。下面詳細介紹框圖內各個組件的設計與實現。

  3.1 CAN Driver的設計與實現

  CAN驅動完成CAN的底層配置,包括CAN初始化,CAN的發送和接收函數。CAN初始化又分為關看門狗、屏蔽所有中斷、初始化PLL和時鐘等[4]。

  3.2 ISO15765協議的實現

  ISO15765協議的實現主要包括udsDiag.c、udsDiag.h、udsNWL.c和udsNWL.h 4個文件的配制。udsDiag.c和udsDiag.h用于提供診斷服務[5],udsNWL.c和udsNWL.h用于提供網絡傳輸服務。udsNWL.c中最重要的是從網絡層發送和接收數據的兩個函數。udsDiag.c對每個服務進行響應。

  3.3 Flash驅動的實現

  在Flash寫入或擦除數據之前,必須驗證操作的合法性[6],在S12G192中通過配置FPROT寄存器來保護Flash不受非法的擦寫。在下載應用程序時把Flash Driver下載到ECU的RAM中,應用程序下載完成后再把RAM中的數據清除,ECU進入正常操作模式。這樣不僅可以保護Bootloader,還能節省Flash內存空間,因為在大多數微控制器平臺中Flash存儲的代碼不能對Flash擦除或編程[7],至少是對與代碼在同一頁的Flash不能這樣操作。

  3.4 安全模式的實現

  安全模式提供安全訪問和下載驗證,本文通過實現ISO15765[3]中的安全訪問服務(服務號為0x27)來提供下載驗證[8],具體流程是上位機向ECU發送requestSeed來申請一個Seed;得到ECU返回Seed后,上位機將Seed進行處理得出結果Key發送給ECU,如果Key正確,則得到訪問ECU的授權。

  3.5 最小Bootloader

  考慮到Bootloader后續升級和同一系列芯片移植的需求,通過BDM或P&E燒寫進芯片的Bootloader僅完成傳送和接收數據的這一基本需求,Flash擦寫、部分診斷服務和加鎖等程序數據通過網絡層傳送到單片機寫進指定的內存空間,這一舉措不僅方便Bootloader實現增量更新,還能提高Bootloader的可移植性。

  3.6 Bootloader主程序

  3.6.1 初始化流程

  單片機復位后,在調用主程序之前,進入Start12.c源文件。執行Init(void)函數,完成的操作有清空RAM空間,把初始化數據從ROM拷貝到RAM等[9]。

  3.6.2 上電啟動流程

  ECU上電或者復位后,程序從0xfffe處開始運行[10],先進行一些基本初始化操作,再根據有無外部編程請求來決定進入Bootloader還是應用程序。但是如果升級過程中出現意外導致升級失敗,則再次上電時可能無法進入Bootloader。為了避免此類情況的發生,提出Stay-In-Boot的概念,也就是在上電復位后即使存在應用程序,也強制單片機進入Bootloader。設置一個wait timer,在wait timer沒有超時的情況下,如果收到一個Stay-In-Boot CAN Message,則ECU停留在Bootloader中;如果wait timer過期了,而且應用程序有效,則進入應用程序。這樣可以有效避免更新程序時出現意外導致無法重新刷新的情況,保證了程序的穩定性。

  3.6.3 主循環流程

  ECU進入Bootloader后,設置全局變量waitTime,每次進入收發中斷將waitTime減1,在主程序的for循環中不斷檢測waitTime的值,如果為零,則跳轉到應用程序啟動地址,否則繼續檢測CAN網絡上有無數據可接收。為了保證CAN網絡上的數據能夠完整接收,本設計將waitTime設置得很大,設置為5 000。

  3.7 測試及結果分析

  用BDM編程工具[11]將實現的Bootloader燒錄到S12G192[12]單片機中,隨后移除BDM,將外部開關設為啟動加載模式,并上電。通過上位機發送編寫完成的“*.s19”文件,通過CAN網絡把數據流發送到單片機中,并運行。多次燒錄均沒有出現數據丟失的情況,能完整地解碼上位機發送的數據流,而且燒錄后也能成功下載應用程序,應用程序能正常工作,也能持續響應PC端上位機的診斷請求。

002.jpg

  Bootloader的性能指標主要在穩定性,另外本文也提出靈活性給開發工作帶來的好處。在板子已燒寫了最小Bootloader的前提下,通過上位機傳送Flash驅動程序和應用程序的s19到單片機(如圖2所示),通過CANoe檢測到應用程序發送的報文[13](如圖3所示),證明最小Bootloader能正確高效地運行,在需要擴展Flash時Bootloader將不需要改變,更改上位機發送的Flash配置文件即可。

  另外,本文采用的是傳輸S-record文件,這有改進之處,通過實驗證明,直接傳輸hex文件比S-record快近一倍,因為Bootloader不再進行文件的解析,解析工作交給PC端上位機。這一改進可有效提高量產效率。

4 結論

  本文設計并實現了基于ISO15765協議的Bootloader,提出使用最小Bootloader來優化程序,增強程序的靈活性;開發過程中增加Stay-In-Boot狀態,防止刷新出錯時出現死循環,提高了程序的穩定性。經測試證明Bootloader能正確引導程序運行,下載數據完整、無誤,沒有出現數據丟失、錯誤等現象,在高負載下也能準確、高效地實現ECU端程序的在線下載和更新。

參考文獻

  [1] 王亞剛.嵌入式Bootloader機制的分析與移植[J].計算機工程,2010,36(06):267-269.

  [2] Cheng Anyu, Yao Yan, Duan Zhihui, et al. ECU loader design of in-vehicle CAN network based on ISO15765[C].International Conference on Information Science and Technology, 2011:1215-1217.

  [3] International Organization for Standardization. ISO 15765-2004 road vehicles-diagnostic on controller area network(CAN)[S]. 2004.

  [4] 張艷,鮑可進.整車控制器Bootloader的設計與實現[J].計算機工程,2011,37(12):233-235.

  [5] 李銳,王晶瑩,姚燕,等.基于ISO15765的車載CAN網絡診斷設計[J].計算機工程,2012,38(4):35-36.

  [6] 李權,鄢萍,賀曉輝.高可靠性的嵌入式軟件現場更新方法[J].計算機應用,2010,30(08):2221-2231.

  [7] 李婉,李宏.單片機IAP升級方法在血液中分析儀中的應用[J].微型機與應用,2014,33(21):16-18.

  [8] 王冬良.基于CAN總線的轉向角傳感器采集電路設計[J].微型機與應用,2014,33(22):77-79.

  [9] 張家田,王金成,嚴正娟,等.基于CAN總線的井下視頻信號采集系統設計[J].電子應用技術,2013,39(12):15-21.

  [10] 何海波.基于XC2287M的工程機械ECU設計[J].電子應用技術,2014,40(12):27-29.

  [11] 羅峰,孫澤昌.汽車CAN總線系統原理、設計與應用[M].北京:電子工業出版社,2011.

  [12] Freescale.MC9S12G family reference manual and data sheet[Z]. 2013.

  [13] International Organization for Standardization. ISO 14229-2006 road vehicles——unified diagnostics services(UDS) specification and requirements(v2)[S]. 2006.


此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 永久免费观看午夜视频在线 | 亚洲一级毛片 | 日本不卡视频一区二区 | 日韩国产成人精品视频 | 久久青草18免费观看网站 | 精品看片| 欧美在线网 | 欧美精品免费专区在线观看 | 欧美成人免费观看国产 | 午夜综合 | 国产在线麻豆精品观看 | 久久国产精品成人免费 | 国产精品午夜久久 | 男人看片资源 | 污视在线看 | 国产99视频精品免视看7 | 欧美日韩精品福利在线观看 | 五月天婷婷缴情五月免费观看 | 日韩精品网 | 亚洲十八 | 黄色免费网 | 一本久道久久综合中文字幕 | 中文字幕手机在线视频 | xxx日本免费 | 最新国产精品精品视频 | 久久青草免费97线频观 | 天天干天天夜 | 欧美一级看片免费观看视频在线 | 日本亚洲国产精品久久 | 成年人黄色在线观看 | 91精品啪在线观看国产线免费 | 欧美性大战久久久久久久蜜桃 | 日韩欧美 在线播放 | 涩涩精品| 色视频线观看在线播放 | 国产三级网站 | 久草视频精品 | 天天操天天透 | 99视频免费播放 | 久久天天躁夜夜躁狠狠 | 亚洲色图欧美一区 |