在硬件系统出厂前要进行产品测试;在嵌入式系统工作之前,一般也要进行自检,其中ROM和RAM检测必不可少,可是有不少人对于测试目的、原因和方法存在错误理解。
    为什么要测试ROM和RAM,怎么测试呢?普遍的看法是:由于担心ROM和RAM芯片损坏,在出厂和使用前应该校验这两种芯片的好坏。测试RAM的方法是写读各个内存单元,检查是否能够正确写入;测试ROM的方法是累加各存储单元数值并与校验和比较。这种认识不能说错,但有些肤浅,照此编出的测试程序不完备。一般来说,ROM和RAM芯片本身不大会被损坏,用到次品的概率也比较小,真正出问题的,大都是其他硬件部分,因此,测试ROM和RAM往往是醉翁之意不在酒。
    
    ROM测试
    测试ROM的真正目的是保证程序完整性。
    嵌入式软件和启动代码存放在ROM里,不能保证长期稳定可靠,因为硬件注定是不可靠的。以flash ROM为例,它会由于以下两种主要原因导致程序挥发:
    1。受到辐射。本身工作在辐射环境里/运输过程中受到辐射(如过海关时被X光机检查)。
    2。长时间存放导致存储失效,某些0、1位自行翻转。
    无论如何,在硬件上存放的程序都是不可靠的。如果完全不能运行,那到也不会造成太大的损失。怕就怕程序可以运行,但某些关键数据/关键代码段被破坏,引发致命错误。为此,必须在程序正常工作前,在软件层面上保证所运行的程序100%没有被破坏,保证现在要运行的程序就是当初写入的。
    保证程序完整性的方法很多,例如对全部程序进行CRC校验(-16和-32)/累加和校验(移位累加),只要能在数学上确保出错概率极低,工程上就可以认为程序完整。
    程序完整性测试通过,捎带着也就证明了ROM没有被损坏。即测试ROM是否损坏只是测试的副产品,不是主要目的。
    
    RAM测试
    测试RAM的真正目的是保证硬件系统的可靠性。
    RAM真的是太不容易坏了,我至今还没有看见过一起因为RAM损坏导致的系统不正常现象。不过大部分问题却可以通过RAM测试反映出来。仔细想想,当硬件被生产出来/被插到背板上究竟会发生什么错误呢!是不是感到自己做的板子出问题的可能性更大!请考虑如下几点:
    1。生产工艺不过关,过孔打歪了,与临近信号线距离不满足线规甚至打在了线上。
    2。由于搭锡引起的信号线粘连。
    3。虚焊/漏焊引起的接触不良。
    4。不按规程操作,把手印儿印在了高频线上。
    5。板子脏了也不吹,覆盖了一层灰尘(内含金属微粒)。
    ......
    这些现象比较有趣,试举几例:
    1。地址线A0和A1粘连。读出XXX00、XXX01、XXX10三个字节的数据完全一样。
    2。数据线D0和D1粘连。D0和D1只要有一个为0,那么两条线都为0。
    3。接触不良。时好时坏。
    4。器件表面处理不干净,有助焊剂残留。低速访问正常,大负荷高速访问频繁死机。
    总之,我们做的板子在生产中和使用中都会有出错机会,所以出厂前必须测试,使用前必须自检。(当然如果你做的不是实际产品而是实验室样品的话,可以简化步骤。)
    如何测试RAM呢?写一个数然后读出来判断显然测不出所有问题,单个测试数据不易覆盖全部测试内容,更不用说定位错误原因了(RAM坏、地址/数据线粘连、接触不良)。好的测试应尽可能测出粘连、RAM坏、单板高频特性。
    我总结的方法是这样的:(如测试一个FFH字节的RAM)
    首先,测试地址线,
    1。'0'滑动,随机选择一个数如55、AA之类,依次写到FEH、FDH、FBH、F7H、EFH、DFH、BFH、7FH地址单元里去,把地址写成二进制数,可以看到比特0在地址总线上从低到高滑动,谓之'0'滑动。目的是测试这些地址线在依次变0时是否稳定正常。当每一根线由1变0,会产生下冲,如果下冲控制不好,在高频时会引起错误。单板上地址线不一定一样长,下冲也就不会完全一样,因此,每一根线都单独测一下下冲性能。
    2。'1'滑动,随机选择一个数如55、AA之类,依次写到1H、2H、4H、8H、10H、20H、40H、80H地址单元里去,把地址写成二进制数,可以看到比特1在地址总线上从低到高滑动,谓之'1'滑动。,目的是测试这些地址线在依次变1时是否稳定正常。当每一根线由0变1,会产生上冲,如果上冲控制不好,在高频时会引起错误。单板上地址线不一定一样长,上冲也就不会完全一样,因此,每一根线都单独测一下上冲性能。上冲和下冲是不同的指标,要分别测一下。
    3。"全0变全1",随机选择一个数如55、AA之类,写到FFH单元,再写到00H单元,然后写到FFH单元。把地址写成二进制数,可以看到地址线从全'0'变到全'1'。由信号处理理论知,在电压阶跃跳变时包含无限宽频谱,其中高频部分对外产生辐射,这些辐射信号是干扰源,对临近线路产生较大影响。地址线一般集束布线,同时跳变会引起最大干扰。地址线从全'0'变到全'1',干扰、上冲、扇出电流影响最大。
    4。"全1变全0",紧接上一步,随机选择一个数如55、AA之类,写到00H单元。把地址写成二进制数,可以看到地址线从全'1'变到全'0',产生最大下冲干扰。
    5。"粘连测试"。依次向不同地址单元写入不同数据并读出判断,如:1、2、3、4......此步骤捎带测试了RAM好坏。注意,千万别用相同数据测试,否则测不出粘连。
    6。可选"全0全1连续高速变化"。目的是模拟最恶劣情况(大扇出电流、强干扰、上/下冲)。
    然后,测试数据线,(原理与测试地址线相同,1、2两步顺带测试了数据线粘连)
    1。'0'滑动,向某一固定地址依次写入FEH、FDH、FBH、F7H、EFH、DFH、BFH、7FH并读出判断。
    2。'1'滑动,向某一固定地址依次写入1H、2H、4H、8H、10H、20H、40H、80H并读出判断。
    3。"全0变全1",所有单元置1(先清零再置1并读出判断)。
    4。"全1变全0",所有单元清零(清零并读出判断)。
    5。可选"全0全1连续高速变化"。向某一单元高速交替写入若干全'0'和全'1',最后以全'0'结束。
    至此,RAM测试完毕,同时全部存储单元清零。
    对于出厂检测程序,有较大发挥余地,如可以加入错误定位代码,自动指出错误原因和错误位置。
    每一块单板的高频特性都会因为生产工艺误差(制板、材料、焊接、组装等)和使用情况而各不相同。同一块板子的高频特性在不同情况下表现也不相同。
    综上所述,除了测试RAM好坏,大部分代码测的是单板硬件可靠性。
    如果不关心高频特性,用原来的测试方法就差不多了(如果测试数据没选好,可能测不出数据线粘连),但应该认识到,测试RAM的主要不是RAM本身的好坏,而是连接RAM的单板硬件和线路。
    
    以上是我实际工作经验的一些总结,写出来与大家交流,如有不对之处恳请指正!
    
源程序(伪代码)
//TEST ROM
TestROM()
{//用移位累加和校验
  sum=0;
  for(i=0;i<MAXRAMSize;i++){
    sum=sum+ram;
    sum=sum>>1;
  }
  if(sum==CHECKSUM) printf("ROM test OK!/n";
  else printf("ROM test ERROR!/n";
}
//TEST RAM
TestRAM()
{
  //地址线测试
  '0'滑动;
  '1'滑动;
  "全0变全1";
  "全1变全0";
  "粘连测试";
  可选"全0全1连续高速变化";
  
  //数据线测试
  '0'滑动;
  '1'滑动;
  "全0变全1";
  "全1变全0";
  可选"全0全1连续高速变化"
}

ROM和RAM测试总结相关推荐

  1. 扫盲:关于Android手机内存ROM、RAM还有SD卡的解释

    买Android手机,除了CPU外,接下来最重要的可能就是ROM.RAM.SD卡的大小了.那就赶紧来了解一下手机内存ROM.RAM还有SD卡的重要性吧,不然在买手机的时候可能会吃亏. 因为一些手机厂家 ...

  2. ROM、RAM、IROM、IRAM、DRAM、SRAM、Flash介绍

    1 ROM .RAM.IROM.IRAM ROM:read only memory 只读存储器 ROM是指程序运行的过程中不能直接通过数据总线.地址总线进行数据的写操作,必须借助于相关的控制器接口来进 ...

  3. 微型计算机的内存主要包括rom,信息安全技术题库:路由器硬件组件主要包括( )、闪存、ROM、RAM。 - 作业在线问答...

    相关题目与解析 路由器硬件组件主要包括CPU.闪存.ROM.RAM.NVRAM等.() 内存储器包括().A.ROM和RAMB.运算器和控制器C.运算器和ROMD.控制器和RAM 光盘主要包括().A ...

  4. 解释ROM、RAM、SRAM、DRAM与FLASH在使用上的区别及其原因

    ROM(Read Only Memory):只读存储器,掉电时可以保存数据. 只读存储器,在单片机运行时,只能从中读取数据,不能向里面写数据.特点是掉电不丢失数据,在单片机中主要用来存储代码和常量等内 ...

  5. ARM中ROM,RAM,FLASH区别

    RAM(Random Access Memory)的全名为随机存取记忆体,它相当于PC机上的移动存储,用来存储和保存数据的.它在任何时候都可以读写,RAM通常是作为操作系统或其他正在运行程序的临时存储 ...

  6. stm32中堆、栈、flash、ROM、RAM、bss段、data段、text段、Code、Ro-data、 ZI-data、RW-data简介

    1. 堆.栈.flash.ROM.RAM.bss段.data段.text段.Code.Ro-data ZI-data.RW-data的区别? 1.1 堆.栈简介 堆栈是指在stm32启动文件中定义的那 ...

  7. 嵌入式--深入理解单片机(一)单片机程序是如何运行起来的以及单片机的ROM和RAM

    目录 一.两种处理器的结构体系 1.哈佛结构体系(Harvard architecture) 2.冯·诺依曼结构体系 3.两种结构的总结 哈佛结构的优势 冯·诺依曼结构的优势 当前很多芯片都是混合结构 ...

  8. 什么是ROM、RAM、DRAM、SRAM和FLASH的区别

    ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写.ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是 ...

  9. 计算机的rom是内存的意思,电脑ram和rom是什么意思 电脑内存条是rom还是ram

    原标题:"电脑RAM和ROM是什么?教你辨别电脑RAM和ROM"关于电脑问题教程分享. - 来源:191路由网 - 编辑:小元. 购买电脑的时候大家都会注意内存空间,我们会看到电脑 ...

最新文章

  1. mysql8.0 zip安装教程
  2. 爆火的博士论文致谢,“炸”出了一批同行者,刚刚本人回应:祝愿大家努力终有所成!...
  3. moss2007 权限体系分析(深入到数据库结构的分析)
  4. r语言安装ipsolve_数值分析的R语言实现(插值部分)
  5. 一个简单的Angular search UI实现
  6. 这哥们到底是应聘的还是来收购公司的?| 今日趣图
  7. mysql数据连接查询_mysql数据库 连接查询
  8. 华为鸿蒙系统是否上线,华为官方:鸿蒙系统2.0上线,手机能否搭载鸿蒙操作系统?...
  9. linux java文件 core_linux下部署.net core/java
  10. isinstance_Java类class isInstance()方法及示例
  11. svr预测出来是一条直线_如何预测股价目标位,涨跌目标预测法之“解消点”帮你寻找...
  12. Chapter 4. 聚合函数、字符串函数、类型转换函数、时间日期函数
  13. 设计模式之UML画图
  14. SpringBoot验证码
  15. 【JSP课程设计(含源码)】宾馆客房管理系统(2021-7-2最新版)
  16. 离散分布的分布函数_条件分布与条件期望
  17. h5py ImportError: DLL load failed while importing defs: 找不到指定的程序。
  18. sip是什么?Mac电脑如何关闭sip?关闭系统完整性保护SIP的方法教程
  19. MPU6050姿态解算1-DMP方式
  20. Python, Anaconda 的卸载

热门文章

  1. 12. webpack4压缩css
  2. 扎克伯格是学计算机的吗,扎克伯格是犹太人吗?他毕业于哪个院校?
  3. 5款好看实用的网站404页面源码模板
  4. 项目准备上线前该不该提离职
  5. window.open(url)打开链接被浏览器拦截解决方案
  6. MATLAB数据关联性(相关性)分析
  7. 农村土地确权之数据入库 —— 苍穹软件数据入库说明
  8. bert 中文 代码 谷歌_BERT系列文章汇总导读
  9. PS动作怎么做出水墨散开GIF动态图片效果
  10. 电源输入保护电路:共模电感