嵌入式:访问未写入的 ROM 地址内容

Embedded: Accessing unwritten ROM address content

我正在开发使用 Aurix TC234 的嵌入式设备。 在其上运行的我的(AUTOSAR)软件需要在启动期间在特定的 ROM 地址范围内进行一些检查。

需要检查的数据在我的软件hex文件烧写过程中没有写入。 这意味着必须在我的软件在该设备上闪烁之前写入地址范围。

我最坏的情况: 有人忘记闪烁该地址范围。我的软件已刷新,并且在启动期间访问了内存。 在这种情况下,陷阱就会出现。

我的问题: 是否有一种安全的方法来检查特定的 ROM 地址范围是否已写入? 这样的陷阱能对付吗?

我对 TC234 不熟悉,但如果在任何嵌入式设备上访问未写入的闪存会导致陷阱,我会感到惊讶。已写入和未写入闪存之间的唯一区别应该是后者应该将所有内容写入(假设闪存开始被擦除)。您应该能够简单地检查数据块中所有字节是否为 0xFF。

如果您的闪存最初未被擦除,您可以向数据块添加一个校验字段,可能包含块其余部分的 CRC 值。启动时,根据 CRC 字段检查块内容。

编辑:如果您确实遇到了陷阱,我认为这是由于您的代码在没有首先验证数据的情况下使用了块中的数据,从而导致诸如在数组中使用无效索引或错误指针。 回复撤回。查看评论。

经过几次检查,对于 ROM 的 ECC 错误的 TC29X 流程可以像下面这样处理:

  • 启用 SMU 警报
  • 从 SMU 捕获 ISR 中的 ECC 错误
  • 在无初始化 RAM 区域存储标志
  • 必须调用软件重置(ECC 无法退出陷阱)
  • 在下次启动时检查标志值

希望此帮助和类似的解决方案能在您的微机上使用。