测试ROM的真正目的是保证程序完整性。
嵌入式软件和启动代码存放在ROM里,不能保证长期稳定可靠,因为硬件注定是不可靠的。以flash ROM为例,它会由于以下两种主要原因导致程序挥发:
1。受到辐射。本身工作在辐射环境里/运输过程中受到辐射(如过海关时被X光机检查)。
2。长时间存放导致存储失效,某些0、1位自行翻转。
无论如何,在硬件上存放的程序都是不可靠的。如果完全不能运行,那到也不会造成太大的损失。怕就怕程序可以运行,但某些关键数据/关键代码段被破坏,引发致命错误。为此,必须在程序正常工作前,在软件层面上保证所运行的程序****没有被破坏,保证现在要运行的程序就是当初写入的。
保证程序完整性的方法很多,例如对全部程序进行CRC校验(-16和-32)/累加和校验(移位累加),只要能在数学上确保出错概率极低,工程上就可以认为程序完整。
程序完整性测试通过,捎带着也就证明了ROM没有被损坏。即测试ROM是否损坏只是测试的副产品,不是主要目的。