闪存出错:软件错误还是电源电压故障(上)?
答案:两个都是!闪存通常用于存储嵌入式系统的固件。有时候,在某些系统的闪存中存储的固件意外出错,导致系统无法在上电后正常启动。闪存出错通常与软件错误有关。然而,工程师们也普遍认同电源循环测试或者裕度测试增加了闪存出错的可能性。当板上使用复杂的ASIC或SoC越多,闪存出错的问题就会更严重。本文探讨了除了软件错误外,其他引起闪存出错的情况和原因并提出解决方法,最大限度地减少损坏。
本文引用地址:http://www.amcfsurvey.com/article/142408.htm为什么闪存内容会出错?
图1是一个典型的电路板的CPU电路。当电源接通时,复位发生器首先激活CPU的复位信号。然后等待,直到CPU、闪存和DDR存储器都达到其额定的工作电压,再等待一个额外的时间周期(约150ms),然后关闭CPU复位信号。当复位信号关闭时,CPU开始执行闪存中的初始化程序,将存储在闪存中的固件内容载入DDR存储器,并执行DDR存储器中的程序。
固件载入闪存的步骤如下:
● 固件通过通信接口载入DDR存储器;
● 跳转到闪存更新程序,使用新的固件对闪存重新编程;
● 处理器重新上电,新的固件生效。
如果代码执行意外跳转到闪存更新程序,闪存中的内容可能会被损坏。当电路板重新上电,错误版本的代码被加载到DDR,而电路板并不能如预期般工作。
代码执行意外跳转到这个闪存更新程序,可能是由于软件错误或者电源电压故障(例如在电源关断时)。使用正常的软件调试方法,可以检测到软件错误。然而,故障电源电压是很难检测的,因为电源电压故障随时都可能发生。
为什么电源电压故障会导致程序跳转到闪存更新程序?
所有IC都有最低和最高工作电压规范。如果供电电压超过了最高电压,该器件就会被损坏,如果供电电压低于最低的电压值,则该器件不能正常工作。例如,在图1中CPU内核的额定电压是1.2V±5%。如果电压下降到低于这个值,CPU内部的指令执行流水线就不能可靠地传输指令和数据,并且(根据CPU的进程和工作温度)指令可能无法正确执行。例如,“Move”指令可能被解释为“Pop”的指令,然后代码执行随机跳转到存储器中的某个位置(由堆栈中的内容的决定)。根据该存储器位置的内容和执行中的错误,处理器可能挂起或跳转到闪存更新程序,破坏闪存并覆盖闪存中的内容。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论