《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于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網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
美女免费视频一区| 国产一区在线观看视频| 久久精品日韩| 香蕉亚洲视频| 午夜免费日韩视频| 午夜精品福利一区二区蜜股av| 亚洲视频一区二区在线观看| 亚洲美女区一区| 亚洲卡通欧美制服中文| 亚洲日本中文字幕| 亚洲精品1区| 亚洲精品美女| 日韩一级裸体免费视频| 亚洲免费激情| 一区二区三区日韩精品视频| 一本色道久久综合亚洲91| 在线亚洲精品| 亚洲综合精品四区| 午夜欧美精品久久久久久久| 欧美在线视频免费观看| 久久久精品999| 欧美 日韩 国产一区二区在线视频| 麻豆国产精品va在线观看不卡 | 久久久青草婷婷精品综合日韩| 久久久久久久高潮| 免费观看在线综合| 欧美另类在线播放| 国产精品毛片va一区二区三区 | 日韩亚洲视频| 亚洲特级片在线| 亚洲欧美成人综合| 欧美在线亚洲| 日韩视频精品| 亚洲综合二区| 久久婷婷影院| 欧美美女喷水视频| 国产精品毛片一区二区三区| 国产亚洲欧美另类中文 | 午夜天堂精品久久久久| 欧美在线一级视频| 亚洲精品免费一二三区| 亚洲视频精选| 久久久久久久久久看片| 欧美激情亚洲一区| 国产精品久久久久久一区二区三区 | 欧美v亚洲v综合ⅴ国产v| 欧美日韩国产亚洲一区| 国产精品视频专区| 国产亚洲一区二区三区在线观看 | 久久久精品动漫| 欧美精品入口| 国产欧美精品在线| 在线观看一区| 亚洲视频第一页| 久久精品国产2020观看福利| 99av国产精品欲麻豆| 欧美在线|欧美| 欧美大片免费观看在线观看网站推荐| 欧美香蕉大胸在线视频观看| 国产一区二区三区直播精品电影| 亚洲国产一二三| 在线亚洲精品福利网址导航| 亚洲高清视频在线| 亚洲一区二区三区三| 久久免费少妇高潮久久精品99| 欧美精品在线看| 国产一区二区三区精品久久久| 亚洲美女精品一区| 久久激情一区| 香蕉久久夜色精品| 欧美精品在线免费播放| 国产亚洲欧美一级| 亚洲视频一区在线| 亚洲美女在线视频| 久久国产综合精品| 欧美新色视频| 亚洲欧洲偷拍精品| 欧美一区二区三区视频免费| 一区二区欧美亚洲| 免费久久精品视频| 国产亚洲人成网站在线观看| 在线视频欧美精品| 日韩视频免费在线观看| 久久久精彩视频| 国产精品区一区| 99精品视频免费观看| 91久久中文| 久久深夜福利| 国产亚洲欧洲| 亚洲欧美欧美一区二区三区| 一本一本a久久| 欧美国产日韩一二三区| 黄色av成人| 欧美亚洲在线观看| 亚洲欧美在线aaa| 欧美日韩一区二区免费视频| 亚洲国产中文字幕在线观看| 久久国产精品网站| 久久精品人人做人人爽电影蜜月| 国产精品人人做人人爽人人添| 日韩一区二区久久| av成人国产| 欧美喷水视频| 亚洲欧洲免费视频| 亚洲精品国产视频| 欧美大片在线观看一区| 精品1区2区| 亚洲第一成人在线| 久久精品视频在线看| 国产精品一卡| 亚洲欧美日韩直播| 欧美一区二区三区在线| 国产精品入口麻豆原神| 亚洲视频一区二区免费在线观看| 亚洲午夜成aⅴ人片| 欧美日韩三级电影在线| 亚洲精选91| 正在播放亚洲| 国产精品yjizz| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲一区二区三区四区五区黄| 欧美午夜精品久久久久久孕妇| 亚洲美女精品成人在线视频| 一区二区三区精品国产| 欧美日本国产在线| 99国产精品久久| 亚洲欧美一区二区三区久久| 国产精品揄拍500视频| 午夜精品美女自拍福到在线| 欧美在线观看一二区| 国产日韩欧美一区二区三区四区| 亚洲欧美日韩国产综合精品二区| 午夜精品久久久久久久99樱桃| 国产精品午夜在线观看| 欧美一区二区三区四区在线观看地址 | 久久久www成人免费毛片麻豆| 黑人一区二区三区四区五区| 久久精品人人爽| 欧美精品播放| 9国产精品视频| 欧美一级淫片播放口| 国产一区激情| 亚洲黄色性网站| 欧美日本精品| 亚洲欧美日韩国产综合| 久久亚洲综合色一区二区三区| 亚洲电影免费在线| 制服丝袜亚洲播放| 国产精品综合网站| 亚洲国产第一页| 欧美日韩伦理在线| 亚洲自拍偷拍福利| 久久一区二区三区四区五区| 亚洲激情精品| 亚洲欧美久久| 伊人春色精品| 亚洲一区三区电影在线观看| 国产伦理一区| 亚洲精品韩国| 国产精品xxxav免费视频| 欧美一区二区视频观看视频| 欧美高清视频免费观看| 国产精品99久久久久久久女警 | 欧美日韩一区二区免费视频| 亚洲精品老司机| 性欧美大战久久久久久久免费观看| 国产偷久久久精品专区| 亚洲人成网站精品片在线观看| 欧美日韩综合在线| 亚洲第一福利在线观看| 欧美日韩在线视频一区二区| 久久成人免费日本黄色| 欧美人与禽猛交乱配| 欧美亚洲一区二区在线| 欧美激情一区二区三区蜜桃视频| 中国成人亚色综合网站| 久久综合导航| 亚洲一区欧美激情| 欧美丰满少妇xxxbbb| 亚洲欧美制服中文字幕| 欧美日韩123| 久久精品国产亚洲高清剧情介绍| 欧美三级视频在线播放| 久久精品免费看| 国产精品拍天天在线| 亚洲美女中文字幕| 国产一区二区中文| 亚洲尤物精选| 亚洲三级性片| 久久一区欧美| 亚洲欧美日韩精品久久奇米色影视| 欧美精彩视频一区二区三区| 欧美一区国产二区| 欧美特黄一级大片| 亚洲精品乱码久久久久久久久| 国产视频丨精品|在线观看| 亚洲视频成人| 亚洲精品日日夜夜| 欧美成人精品影院| 久久精品欧美|