主题中讨论的其他器件:SEGGER
您好!
为了向 Segger (或 IAR)提出正确的问题 、如果您能猜测哪种操作可能会使 CPU 处于 ECC 损坏的状态、我将不胜感激、因为我很确定这是由我们的开发环境造成的。 我基本上重复了相同的"编译、下载和调试模式"、通常一切都正常、但这种预取问题很少引起人们的关注、即使闪存已被加载一次也是如此。
问题1:如果调试器由于某种原因有时会执行整个芯片擦除、ECC 是否会损坏(擦除是否清除 ECC 区域)-如果是、则此意外的整个芯片擦除可能是导致此类行为的潜在原因?
我正在使用 IAR IDE 和 Segger 的 Jlink、在我按照这里的说明填充整个存储器之后、已经对推测取问题进行了几次计数(确切地说是3或4、所以没有太多的比较我已经下载了多少代码) (我的同事也遇到过这种情况、因此这不应是用户或单个器件链问题)。
https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/588269
在存储器填满1个完整的存储器后、我一直将映像大小恢复为"正常大小"、因此在正常调试中、不会反复对整个存储器进行编程。 我还使用 Segger 的比较作为"使用最快的方法"、因此它应该只刷写所需的部分、并且典型的编程需要几秒钟的时间。 由于这种情况只发生了几次、我下载了很多代码、因此这种预取错误的可能性很可能小于每毫秒、但当它达到时、需要一段时间才能了解根本原因-这就是它相当烦人的原因 解决这个问题。
FUNC_ERR_ADD 每次都与初始问题(0x135a98)中的 CPU 存储器未被填满相同、并且我们的代码仍然只有~0x20000长、因此正常编程不应触及该有问题的区域、如果正确理解、这2的 ECC 位就会非常独立 存储器位置不相邻、因此 ECC 写入中的"次要错误"不应损坏值... 在执行完整芯片闪存时、我已经用0xFF 填充了代码、以防出现这种情况。 当您擦除芯片并启用二进制填充并使用"IAR 闪存加载程序"来刷写整个芯片时、问题立即得到解决、之后您可以返回到"优化"下载。
相关信息:
-问题2:在生产中、您需要对整个闪存进行编程(因为它是首先使用 CPU)、因此需要生成填充的映像进行编程或配置编程工具、以便填充到闪存的末尾?
问题3:固件更新(尚未查看该部分、我知道有库可用于处理包括 ECC 在内的编程)、您需要手动(或执行该库)对0xff (或其他数据)进行编程吗? 最后一个被擦除扇区的末尾、以防代码未将其填充? 其他选项是在固件更新中也使用填充的二进制文件...
问题4:如果未使用的闪存区域中的某个位置仍然存在隐藏的 ECC 错误,它是否会始终被“立即”触发,或者可能需要一周或几个月(或从不)才会弹出? 在 main()之前,我没有遇到启动例程,看起来错误总是被激活~当操作系统启动和任务开始运行时,这一阶段仍处于良好的阶段,因为您很快就会注意到 nERROR 已关闭,并立即知道存在问题。