main函数之前,简要介绍MPC5644A 的启动过程

main函数之前,简要介绍MPC5644A 的启动过程

通常,工程师在开发嵌入式系统应用时,有时并不太关注MCU的启动过程,而是直接在main函数之内进行应用的开发。而MCU在复位之后,并不是直接运行到main函数写,那么,在main函数之前,程序到底做了哪些工作呢?本文以NXP MPC5644A的启动流程做一个简要的介绍,供大家参考。
MPC5644A 芯片内部包含一个叫做BAM(Boot Assist Module)的模块,从芯片的参考手册(RM)的BAM章节介绍里提到,BAM是一块4KB的ROM区域,包含有芯片的启动代码,支持四种启动模式:

  • 从内部flash启动;
  • 通过SCI或CAN接口串行启动;
  • 通过SCI或CAN接口串行启动,并包含波特率检测;
  • 从连接到外部总线(EBI)的存储器中启动。
    启动模式是根据芯片BAM外部控制引脚BOOTCFG[0:1]进行选择的,详细介绍可以参考手册。

在通常模式(normal mode)下,BAM程序在MCU复位后立即执行的,需要说明的是,在使用Codewarrior IDE debug调试时,BAM程序并不执行。
下图介绍了BAM程序的流程图:
main函数之前,简要介绍MPC5644A 的启动过程首先,BAM配置内核MMU(memory management unit),允许访问设备的内部资源。
在配置完MMU后,BAM程序检查复位状态寄存器(RSR)的BOOTCFG区域,判断程序以哪种模式启动。以内部启动(Internal boot)为例,BAM将查找RCHW(Reset Configuration Half Word),RCHW定义了启动选项,是由用户在芯片预留的地址编写的16bit配置数据。
main函数之前,简要介绍MPC5644A 的启动过程RCHW中的各个区域含义及功能,可以详见RM手册。表格21-3介绍了boot模式及其相应的配置。
main函数之前,简要介绍MPC5644A 的启动过程main函数之前,简要介绍MPC5644A 的启动过程关于censorship的内容,将在后续的文章中和大家一起分享。
紧接在RCHW后面的32bit(4字节) 中,存放有用户程序的起始地址,当BAM运行到此时,将会跳转值用户程序开始执行。需要说明,手册中此处所说的用户程序并不是main函数的起始地址,如果用Codewarrior IDE 2.1创建的工程,是指startup的起始地址,程序在进入startup后,还将进行一些列的初始化配置,包括SRAM ECC的初始化、中断及异常的配置等,才能进入我们定义的main函数执行。关于这部分的内容,将在后续的文章中进行分享。