单片机硬件自检的问题

发布者:心怀梦想最新更新时间:2016-10-22 来源: eefocus关键字:单片机  硬件自检 手机看文章 扫描二维码
随时随地手机看文章
公司用的是atmega128型号的单片机,有扩展外部RAM芯片,通过单片机内部程序可实现对外部RAM的线路检测,比如RAM的D0~D7其中的任一脚虚焊,单片机可以发出警告.现在的问题是单片机是怎么来判断引脚虚焊的?是不是RAM芯片的D0~D7输出数据给单片机的数据总线,单片机根据其中的某一脚为断路或高阻态,借此判断线路虚焊?我是刚在做硬件维修,这个问题一直没弄明白.

  还有如果RAM的地址线有一条悬空,则数据输出是不是肯定为高阻态?
  大家知道的话,请帮我解释一下.谢谢!

在硬件系统出厂前要进行产品测试;在嵌入式系统工作之前,一般也要进行自检,其中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 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连续高速变化"
}

关键字:单片机  硬件自检 引用地址:单片机硬件自检的问题

上一篇:AVR的部分MODBUS程序
下一篇:ATmega 16 单片机的USART的相关寄存器(十)

推荐阅读最新更新时间:2024-03-16 15:16

Holtek:力推ARM单片机 以定制化为特色
尽管大环境的不确定性,令盛群半导体(Holtek)近两季度的业绩同比下滑20%,但Holtek并没有停止推出新产品的步伐。 目前市场下滑,台企做好了放无薪假的准备,而Holtek从未放过无薪假,并且也从未有过亏损。蔡荣宗表示,Holtek的产品线足够丰富,客户群足够丰富,所以尽管会受到季节性影响,但并没有集中于某个区域或产业,且公司不断推出符合市场需求的产品。“这种组合可以让我们持续盈利。” 推出M3内核产品抢占32位市场 为了补充单片机产品线,2011年公司推出了基于ARM Cortex M3的单片机系列。Holtek上海有限公司深圳分公司总经理蔡荣宗表示,2010年,32位单片机产值已经超过8位了,所以作为在单片机行业耕
[单片机]
基于AVR单片机的灭火机器人设计与实现
摘要:根据灭火机器人的竞赛规则,给出了灭火机器人的硬件结构设计方案和软件设计流程。所用的机器人处理器为AVR单片机,主要利用红外传感器、光敏传感器对环境进行检测,使机器人在场地中按照预定的方案寻找火源并扑灭。 关键词:灭火机器人;传感器;ATmega32 1 引言 机器人竞赛是近年来迅速开展起来的一种对抗活动,它涉及人工智能、机械、电子、传感器、精密机械等诸多领域。通过竞赛可以培养学生的创新意识、动手能力、团队写作能力等。其中灭火比赛是开展范围最广、影响最大的机器人竞赛项目之一。 比赛规则为模仿生活中消防员灭火,机器人从H点出发,在四个房间内寻找任意摆放的蜡烛,并且设法将其灭掉。比赛场地的墙壁高33cm,材质为木板,颜色为
[工业控制]
基于AVR<font color='red'>单片机</font>的灭火机器人设计与实现
51单片机串口收发字符串源程序
想要通过串口控制led,但是串口每次中断只能发送一个字符,这样在控制的时候不太容易清楚各个命令是控制哪一部分,所以参考网上的资料,写了个简单的字符串收发函数。本程序的功能是:电脑串口助手发送数据给单片机,单片机接收后返回给电脑,在发送的时候,需要空两格再输入想要传送的内容,不然的话传输的数据会丢失,因为这个情况不影响串口控制LED,所以就没管了。 单片机源程序如下: #include reg52.h typedef unsigned char uchar; typedef unsigned int uint; sbit led=P2^0; void Usart_Init() { TMOD=0X20; PCON=0X80; S
[单片机]
51<font color='red'>单片机</font>串口收发字符串源程序
基于51单片机的DS18b20汇编源程序
;********************************** FLAG1 BIT F0 ;DS18B20存在标志位 DQ BIT P1.7 TEMPER_L EQU 29H TEMPER_H EQU 28H A_BIT EQU 35H B_BIT EQU 36H ;************程序起始******************** ORG 0000H AJMP MAIN ORG 0100H ;**************主程序开始************ MAIN: LCALL INIT_18B20 ;LCALL RE_CONFIG LC
[单片机]
SN 8 位单片机 SN8P2743 应用实践(6)
用 2743 内部放大器与比较器做高精度电压表 关于 2743 的放大器,比较器,我之前一直在做测试,也为此发了多个帖子,基本上,连贯起来,就是往前走的路子. 最后,我利用其内部的放大器加上一只内部比较器,用双积分方式,前面添加一只 74HC4052 做模拟开关,开始做一只可以实用的电压测量仪表. 找一只 ICL7129 做的电压表,用于做比较和对照,精密监视输入信号的大小.其最低位的每字分辨力高达 10uV ,在比较廉价领域里是相对很高分辨力的了!(对比如下图) 2743 驱动一只 12232 的点阵显示屏幕,可以轻易获得需要的显示位数.整个输入范围内,从 0 mV 到接近 200mV , 实际数据如下: 从表格看,
[单片机]
SN 8 位<font color='red'>单片机</font> SN8P2743 应用实践(6)
基于51单片机的篮球计分器设计
这是我以前做的51单片机篮球计分器设计, 花了一个星期时间, 附件里面包括源代码;PCB原理图, 和proteus的仿真文件以及课程设计的相关文档, 都是自己原创的,大家多多指教 制作出来的篮球计分器实物图如下: 电路原理图如下: 篮球计分器仿真原理图如下 Altium Designer画的篮球计分器原理图和PCB图如下: 单片机篮球计分器程序源码: #include reg51.h //51单片机头文件 typedef unsigned char uchar; typedef unsigned int uint; sbit K1=P3^2;//比赛倒计时开始/暂停 sbit K2=P3^3;//24s倒计时重新
[单片机]
基于51<font color='red'>单片机</font>的篮球计分器设计
单片机练习 - I2C总线协议
这次利用单片机通过软件模拟I2C总线协议, 并对基于I2C协议的AT24C02 EEPROM进行读写操作, 具体说明与功能见代码注释. AT24C02与单片机的连接电路图如下: 单片机利用P2.0模拟SDA, P2.1模拟SCL.
[单片机]
<font color='red'>单片机</font>练习 - I2C总线协议
基于8051单片机和SC1128芯片实现病房呼叫系统的设计
传统的病房呼叫系统普遍采用有线式,不仅布线安装繁琐、维护不便、利用率低,而且实时性差。虽然无线式呼叫系统没有布线问题,但它的可靠性差,而且无线电波会干扰其它医疗仪器设备,目前大多数医院不采用无线呼叫系统。 随着电力载波技术的发展,应用低压电力线作为传输媒质,采用扩频、数字编码、单片机控制等技术实现病房呼叫已成为可能。本文运用电力载波技术设计了一种病房呼叫系统。 1 病房呼叫系统的基本要求 临床求助呼叫是传送临床信息的重要手段,病房呼叫系统是病人请求值班医生或护士进行诊断或护理的紧急呼叫工具,可将病人的请求快速传送给值班医生或护士, 并在值班室的监控中心电脑上留下准确完整的记录,是提高医院和病室护理水平的必备设备之一。呼叫系
[单片机]
基于8051<font color='red'>单片机</font>和SC1128芯片实现病房呼叫系统的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved