工具与软件:
我们看到的确切情况是、在微控制器上电时、我们将仿真类型称为 init。 Init 函数会对所有最近的数据项进行群组传输、如果在主动写入闪存(在 RAM 外执行 IE)时欠压、一些数据项可能会损坏、而其他数据项在传输中丢失、在下一次上电时、缺少所有先前数据项的接收组现在是我们的活动组、我们已经丢失了关键的 nvmem 数据。
我们能够确认这是在发生的
- 将 EEPROM 仿真类型 B 修改为不擦除 INIT 上的非活动组、以便我们可以查看这些组的历史记录
- 修改复位处理程序使其卡在 while (1)循环中、而不会实际复位器件
- 当我们看到我们陷入了附加到环路的困境时、NMI 异常与欠压相关、调用堆栈会在 EEPROM 初始化阶段启动并在闪存写入阶段结束