瞭解更多關於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 盒子。見圖: