S32Kxxx bootloader 之 LIN UDS bootloader

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章