AVR 闪存损坏

电器工程 微控制器 avr 大气压 闪光 失败
2022-01-13 03:32:46

这个问题与AVR 解编程本身有关。

项目信息:
我们有一个使用 ATMEGA644P 的电池供电产品。应用程序永久在睡眠模式下运行,并且仅在每秒一次 (RTC) 或触发两个外部中断线之一时唤醒。

该设备具有一个非常简单的引导加载程序,通过 UART 进行通信(使用 RS232 接口 IC)。它只是作为一种更新固件的便捷方法,因此不需要硬件 ISP 编程器。(引导加载程序需要校验和安全电报)

这些设备设计为禁用内部掉电,因为它使功耗加倍并且必须延长电池寿命(我想应该使用外部掉电检测 - 重新设计正在进行中)。

问题:
每隔几个月,设备就会停止工作,这些设备上没有执行任何固件更新。但是,经过进一步检查,这些设备的闪存内容似乎已损坏。此外,其中一些设备的电池仍然很好,但我不想排除某种欠压情况。

这是原始闪存内容(左)与损坏内容(右)的比较:

闪光灯对比

一些观察:

  • 损坏的块始终包含至少一个闪存页(256 字节)并且是页对齐的。换句话说:只有整个页面受到影响,而不是单个字节。
  • 损坏的内容大部分时间读取 0xFF,但也可能包含一些其他值或完全“随机”。
  • 图像左侧的小条显示所有受影响的区域。对于这个设备,它大约是闪存总内容的十分之一。
  • 我们有一个设备,其中只有一个页面受到影响。

写入闪存时的欠压情况可能会损坏闪存内容,这是完全合理的。但是,这意味着必须执行一些对闪存敏感的指令。

也许控制器由于电压不足而随机重新启动,并且在此期间引导加载程序代码的行为完全不可预测。引用另一个论坛上关于欠压的一些人的话:

“不仅是来自闪存的随机指令正在执行,而且是随机指令周期(无法保证来自闪存的代码将被正确读取和解释)。除此之外,mcu 的其他部分可能无法按设计运行,包括保护机制。”

问题:
您认为“欠压期间的随机行为和执行某些指令会更改闪存页面中的数据” - 解释是否合理?如果是这样的话,为什么我们不一直看到这种错误只是一些软件问题(堆栈溢出、无效指针)的原因。

你有什么其他想法会导致这种腐败吗?这可能是由 EMI/ESD 引起的吗?

4个回答

您应该注意到闪存没有被写入,而是被擦除。擦除的闪存充满 0xFF。您的前 256 个字节被完全擦除,您的第三个 256 字节区域被部分擦除(从正确数据到损坏的数据只有 0 到 1 个位翻转)。

根据数据表,这个闪存是页可擦除的(我通常使用比页大的擦除块)。如第 282 页所示,通过 SPM 执行页面擦除非常简单。

您可能会对第 23.8.1 节(防止 Flash Corruption)感兴趣:

当电压过低时,两种情况可能会导致 Flash 程序损坏。首先,对闪存的常规写入序列需要最低电压才能正常运行。其次,如果执行指令的电源电压过低,CPU本身可能会错误地执行指令。遵循以下设计建议可以轻松避免闪存损坏(一个就足够了):

  1. 如果系统中不需要更新引导加载程序,则对引导加载程序锁定位进行编程以防止任何引导加载程序软件更新。
  2. 在电源电压不足期间保持 AVR RESET 有效(低)。
    如果工作电压与检测电平匹配,则可以通过启用内部欠压检测器 (BOD) 来完成此操作。如果没有,可以使用外部低 VCC 复位保护电路。如果在写操作过程中发生复位,只要电源电压足够,写操作就会完成。
  3. 在低 VCC 期间保持 AVR 内核处于掉电睡眠模式。这将防止 CPU 尝试解码和执行指令,有效地保护 SPMCSR 寄存器,从而防止闪存被无意写入。

这是一个众所周知的问题,会影响许多微控制器(不仅仅是 Atmel)。闪存控制硬件在低压条件下会损坏或擦除部分内存。简单的解决方法是启用掉电保护。

当然,您应该始终在微控制器上启用掉电保护。

欠压是一个很可能的原因。例如,我曾经有一个项目,其中 1.8 V 的掉电电平经常导致损坏,而这些损坏不能用 3.5V 的掉电电平重现。

请注意,处理器运行得越快,它对欠压问题就越敏感。如果降低 CPU 频率对您来说是一个可用的选项,那么可能值得一试。

如果不遵循 PCB 设计的主要规则,EMC 将是您最大的敌人。以下是我自己的经验中最重要的一些: - 任何 IC 上的阻塞电容器,无论制造商在其数据表中告诉您什么关于地狱原理图的内容,在每个 IC 的电源线上至少放置一个介于 100pF 到 1nF 之间的电容 - 导电接地区域每个PCB的层尽可能。这些区域应尽可能频繁地通过通孔通过所有层接触,50mil 的网格是一个很好的价值。将这些区域连接到接地信号。- 切勿在 PCB 中留下未连接(浮动,无信号连接)的铜。它就像天线一样,将电磁辐射直接施加到设备上 - 使承载时钟信号的走线尽可能短

通过搜索引擎请求查找更多详细信息,例如“emc 证明 pcb 设计指南”