了解更多关于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~!!~!!~!!~!!~!!~