自己用C语言写NXP S32K116 serial bootloader
了解更多关于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如下: