控制/MCU
在分析和定位RT异常复位或者启动失败的原因时,RT内部有两个寄存器复位寄存器SRC_SRSR和BootMode寄存器SRC_SBMR1,我们可以通过J-Link Commander注入探针命令读取这两个寄存器内容作为辅助分析手段,具体方法如下:
在出现异常复位情况时(MCU已经正常跑起来了),我们连上J-Link并打开J-Link Commander,先敲入connect,然后按照提示步骤连接到内核,如右图所示;
查看RT参考手册(以RT1020为例)确定SRC_SRSR寄存器地址为0x400F8008,然后继续在J-Link Commander窗口输入“mem32 0x400F8008 1”,即可返回该寄存器内容如下图,默认RT第一次运行时该寄存器为0x1,由该寄存器描述可知上一次触发MCU复位的原因为POR_B有效,即外部有信号拉低POR_B或者MCU上电复位;
可以模拟一次软件复位来观察该寄存器的变化,先输入“w4 0x400F8008 1”即写1清零SRC_SRSR对应的位,然后再次输入“mem32 0x400F8008 1”以确认寄存器位是否正确清0,接下来输入“r”即复位命令,默认该复位命令为软件复位命令(即写ARM内核寄存器位SYSRESETREQ触发CPU内核软复位),最后输入“mem32 0x400F8008 1”,可以看到SRC_SRSR寄存器变为2,对照手册即上一次复位类型为软复位;
这一步我们模拟一次启动失败的情况,将RT1021_EVK的SW7拨码由原来的“0010”(QSPI Flash启动)改为“1010”(SD卡启动),然后我们手动按复位按键,此时MCU处于启动失败的条件(因为我们没有插入SD卡)。我们需要重新打开J-Link Commander,继续输入“connect”一系列操作连接到内核,最后输入“mem32 0x400F8004 1”读取SRC_SBMR1寄存器内容为0x40,即BT_CFG[6](GPIO_B0_10)=1;
打EMC的时候或者板子干扰比较大的时候,很容易出现MCU的假象死机(即MCU电源都正常且POR_B也为高,这种情况实际是MCU复位后启动失败死在ROM里),通过这种方式可以有效判定外部哪个BT_CFG管脚的干扰造成的。此外,mem32命令也可以通过AHB读的方式访问RT片上RAM空间,片外SDRAM和片外SPI NorFlash。
当用户需要检查Flash内容是否被意外篡改或者要回读Flash内容以确认当前运行的软件版本时,J-Link Commander也提供了这样的功能,即“savebin”和“verifybin”命令如下图,具体用法如下:
编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !