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 盒子。见图: