此LIN UDS bootloader的上位機是zFlash, LIN盒子是自己開發的,更新應用程式時bootloader和上位機zFlash間通訊採用UDS協議 ...
瞭解更多關於bootloader 的C語言實現,請加我Q扣: 1273623966 (驗證信息請填 bootloader),歡迎咨詢或定製bootloader(線上升級程式)。
LIN 匯流排是汽車ECU使用比較多的一種匯流排, 車燈, 車門, 汽車空調控制面板等等ECU都有在使用. 而這些ECU離線升級時, 就需要使用到LIN bootloader, OEM廠商都會要求升級ECU應用程式必須遵循UDS協議,也就是需要LIN UDS bootloader. 今天要介紹的就是一款基於NXP ARM Coretex-M0 的32-bit MCU S32K116 的LIN UDS bootloader. 此款LIN UDS bootloader 採用三層軟體架構,代碼容易理解,移植也很方便。
LIN UDS bootloader 是獨立於應用程式的一個放置在PFLASH頭部的一個程式。Memory map 如下:
按照以上memory map放置LIN UDS bootloader, LIN UDS bootloader程式的linker script 需要做如下修改(註意,應用程式的linker script 也同樣需要修改,這裡就不列出來):
/* Specify the memory areas */ MEMORY { /* Flash */ m_interrupts (RX) : ORIGIN = 0x00000000, LENGTH = 0x000000C0 m_flash_config (RX) : ORIGIN = 0x00000400, LENGTH = 0x00000010 m_text (RX) : ORIGIN = 0x00000410, LENGTH = 0x0000EBF0 APP_Info_text (RX) : ORIGIN = 0x0000F000, LENGTH = 0x00000200 APP_text (RX) : ORIGIN = 0x0000F200, LENGTH = 0x00010E00 /*0x0001FBF0*/ /* SRAM_L */ m_custom (RW) : ORIGIN = 0x1FFFFC00, LENGTH = 0x00000400 /* SRAM_U */ m_data (RW) : ORIGIN = 0x20000000, LENGTH = 0x000020C0 m_data_2 (RW) : ORIGIN = 0x200020C0, LENGTH = 0x00000F30 flash_driver (RW) : ORIGIN = 0x20002FF0, LENGTH = 0x00000800 /*2kB flash driver*/ exchange_info (RW) : ORIGIN = 0x200037F0, LENGTH = 0x00000010 /*exchange information*/ }
ECU 上電後運行進入LIN UDS bootloader程式,判斷是否有更新請求,沒有更新請求且應用程式有效則跳轉到應用程式,有更新請求或應用程式無效則停留在bootloader, 上電流程如下圖:
LIN UDS Bootloader 升級應用程式的整個流程主要使用了ISO 14229-1 標準中定義的以下UDS Services:
LIN UDS bootloader 工作在ECU端,是UDS server端,上位機工作在PC端,是UDS client端。上位機請求以上UDS service (發送請求Frame), LIN UDS bootloader 接收到請求作出正響應或負響應 (發送響應Frame)。不管是請求Frame 還是響應Frame, 都需要遵循ISO-17987. 分為單幀或多幀,格式如下:
/* package single frame */ /* ____________________________________________ */ /* | NAD | PCI | SID | D1 | D2 | D3 | D4 | D5 | */ /* |_____|_____|_____|____|____|____|____|____| */ /* package first frame */ /* ____________________________________________ */ /* | NAD | PCI | LEN |SID | D2 | D3 | D4 | D5 | */ /* |_____|_____|_____|____|____|____|____|____| */ /* package consecutive frame */ /* ___________________________________________ */ /* | NAD | PCI | D1 | D2 | D3 | D4 | D5 | D6 | */ /* |_____|_____|____|____|____|____|____|____| */
上位機是我用Visual Studio 和 C# 開發的PC端軟體, 界面如下:
LIN UDS bootloader 升級應用程式使用的LIN 盒子是我們開發的Z-Box LIN, 非常漂亮,非常好用的一款LIN 盒子。見圖:
~!!~!!~!!~!!~!!~WELCOME TO MY HOME: WWW.CNBLOGS.COM/GEEKYGEEK~!!~!!~!!~!!~!!~