自己用C语言写NXP S32K116 serial bootloader

时间:2024-01-26 11:34:56

了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序)。

 

  每次我有了新的EVA 板子,我都忍不住给它写个Serial Bootloader(一般都是串口bootloader)。 这样更新EVA 板子上面的程序时,非常方便,直接通过串口就可以更新,

不需要插拔烧写器。NXP S32K116 EVA 板子已经在手上有一段时间了,但是一直没有时间去写bootloader来。直到最近才找到一点时间,完成了NXP S32K116 bootloader。

让“自己用C语言写MCU bootloader"这个传统能够继续保持。

 

      NXP S32K116 是ARM Cortex-M0 内核的32位单片机,有着丰富的外设和优越的性能及完善的开发工具链。广泛使用到汽车电子,工业控制,物联网等领域。虽然之前

没有接触过它,感觉上手挺快的,主要是NXP S32K 的Processor Expert真心不错,我这个S32K116 bootloader的外设driver都是用Processor Expert自动生成的,我只手写

了bootloader 的应用层,整个过程很顺利,除了在bootloader跳转到Application的实现上出现了问题,多花了不少时间。当然,NXP S32K的工具链也有弱点,比如S32 DS

(Design Studio)比较慢,有时候会卡死。还有就是S32 DS没有Simulator debug 功能,只能在实际硬件上才能debug.

 

    Bootloader是一个独立的程序,和Application不可以有重叠。我的这个S32K116 bootloader 是在P-Flash的头部,Memory Map设计如下:

    bootloader memory: 0x00000000  ~ 0x00003FFF, 修改bootloader的linker script如下:

MEMORY
{
  /* Flash */
  m_interrupts          (RX)  : ORIGIN = 0x00000000, LENGTH = 0x000000C0
  m_flash_config        (RX)  : ORIGIN = 0x00000400, LENGTH = 0x00000010
  m_text                (RX)  : ORIGIN = 0x00000410, LENGTH = 0x00003BF0

  /* SRAM_L */

  /* SRAM_U */
  m_data                (RW)  : ORIGIN = 0x20000000, LENGTH = 0x000020C0
  m_data_2              (RW)  : ORIGIN = 0x200020C0, LENGTH = 0x00001740
}

    application memory: 0x00004000 ~ 0x0001FFFF, 修改application的linker script如下: