一直以来,我们都当芯片启动 ROM 程序运行状态完全是个黑盒子,如果遇到异常,我们通常是去猜其可能遇到的问题,那么能不能不全靠猜呢?答案是可以的,这便是今天要聊的 ROM 启动日志!
一、ROM启动日志原理
我们知道 i.MX RT 系列上电都是片内固化的 ROM 程序代码先运行,由 ROM 来加载启动设备里的用户程序去执行,所以如果用户程序不能正常启动,一定是 ROM 程序执行过程中遇到了异常。
i.MX RT 初始 ROM 代码来源于它的老大哥 i.MX 处理器,翻看 i.MX 参考手册其中有关于 ROM Log Event 功能的描述,所谓 ROM Log Event 就是 ROM 程序在执行过程中将其重要节点事件(状态)按时间轴记录到一个日志缓冲区里(日志缓冲区通常在片内 RAM 固定地址处),这个日志内容显然对于分析 ROM 执行过程非常有用,那么 i.MX RT 系列 ROM 代码里有没有保留这个功能呢?很高兴,它还在!
下表记录了 i.MX RT 全系列型号的 ROM 启动日志缓冲区地址:
二、获取ROM启动日志数据
上一节我们知道了 ROM 启动日志缓冲区存储地址,获取其数据的方法就简单了,可以直接连接上仿真器去读取。不过这里有需要注意的地方:如果是在 ROM 跳转用户程序之前发生的异常(日志体现为启动失败),那么内核 PC 应该还停留在 ROM 空间,这时候 RAM 区数据是完整的,无人破坏。如果是在 ROM 跳转到用户程序之后发生的异常(日志体现为启动成功),这时候用户程序已经开始执行了,这可能会破坏 RAM 区数据(如果用户程序链接文件里用到了存储启动日志的 RAM 区域),这时候启动日志内容就不一定有效了。