电磁兼容小小家

 找回密码
 注册
查看: 3863|回复: 2

软件和ESD保护

[复制链接]
发表于 2006-11-18 17:06:01 | 显示全部楼层 |阅读模式

老伙计,请登录,欢迎回家

您需要 登录 才可以下载或查看,没有帐号?注册

x
  软件和ESD保护
   
在减小ESD问题方面,软件和固件设计的合理性对其影响不可低估。设计软件时应当做到——如果程序受到瞬态干扰的影响而异常,则程序的运行不能“死锁”,而必须能够适当地恢复运行。
就抗干扰软件的设计来说,有两个最基本的步骤。首先,软件必须能够检测到已出现的故障;其次,系统必须能够适度地恢复到一个确定的、稳定的状态。为了达到这个目的,软件必须有规律地检查异常条件出现;然后,在故障或错误导致任何损坏之前,以尽可能快的速度检测到它们。
通常,软件的错误检测技术可分成以下三类:(1)程序流程错误;(2)输入/输出错误;(3)数据存储错误。

程序流程错误

容错软件编程最重要的问题就是保证程序本身的健全和完整。程序流程错误产生的原因很多,可能是微处理器内部寄存器中的内容改变所致(例如程序计数器),也可能是程序指令存储位的变化,因此程序可能“死锁”而进入无限循环状态,不能跳出;程序可能不断地在不存在的存储区中尝试寻址指令,也可能试图将数据当作指令执行。
在下面两种条件之一成立或都成立的情况下,对程序进行有规律性的检查,这就是程序流程错误检测。这两种条件包括:(1)程序运行时间是否过长;(2)程序是否在存储器的有效范围内运行。对这些条件进行检查并不困难,可能只需要在程序中再多添加几行代码。其中一些软件检测的技术包括硬件定时器、软件校验点、错误陷阱、空操作代码与未使用中断陷阱等。
防止出现无限循环最有效的保护方法是使用外部硬件定时器。将外部硬件计数器连接到系统的时钟,计数器可以设置一个特定数字。当计数累加达到这个设置值时,计数器复位系统微处理器。也可以将软件设计成能够周期性地向定时器发送复位脉冲,以免计数器到达预先设置的计数,除非系统进入无限循环而死锁。通常,复位脉冲代码可以添加到一个现有的被主程序频繁调用的子程序中去,只需要多增加几条指令即可。
如图12-18所示,也可以将可重触发单稳态多诸振荡器当做定时器来使用。第一个多谐振荡器(Rx1和Cx1)上设置的定时应当远大于微处理器复位脉冲之间的时间。正常运行条件下,多谐振荡器在定时时间到之前被复位脉冲再次触发。这个电路的输入必须是边沿触发而不能是电平触发的,否则不论复位脉冲是低电平还是高电平,多谐振荡器可能“死锁”。
如果没有及时接收到复位脉冲,第一个多谐振荡器的定时时间到,并触发第二个多谐振荡器。第二个多谐振荡器(Rx2和Cx2)的定是必须满足条件:它的输出脉冲持续时间足以保证微处理器的复位。
还有另外一种方法(效果稍差一些)——软件校验点。这里是指一个独立的程序,它周期性地中断正在运行的程序,并检查某些程序运行已经到过的校验点。假若校验点是错误的,则将程序控制权转交错误处理程序。
如果程序限于存储器的某一个范围,例如ROM中的程序,就可以将陷阱写进软件,防止程序试图访问有效存储器范围之外的指令。未使用的程序存储器区域应当填满“空操作”(或其他类似的操作)指令,并在结尾时跳转到错误处理程序。这样的话,如果无意跳转到未使用的或不存在的存储区,错误处理程序就被调用。
未使用的微处理器中断通常是程序员流程错误的来源。若有一个瞬态噪声出现在一个未使用的中断上,程序将强制跳转到中断向量位置。如果这个位置在程序的中间,就会产生不可预料的结果。解决这种问题的方法就是在所有未使用的中断向量位置设置一个到错误处理程序的跳转。
一旦检测到程序流程错误,就很有必要使系统返回到一个确定的、稳定的状态,尽可能减小损坏。将程序控制权转交错误处理程序可以达到这个目的,而最简单的程序就是系统复位。但是在一些场合,这种强制方法很难实现。
错误恢复由损坏评估与按需修复程序组成。如何完成错误恢复则取决于特定的有问题的系统,而无法做通性的讨论。

输入/输出错误检测

输入输出的瞬态错误能使系统产生错误的信息,这些信息可能被发送也可能被接收。使用输出回送(读回)并将这个数据与被发送的数据比较,可以检测到输出错误。
使用软件滤波技术处理输入数据并检查数据的合理性就能够控制输入错误。一个非常简单的软件滤波技术是连续多次读取输入数据。两次读取数据之间有延迟,这样就可以将有效输入与噪声脉冲区别开来。若是ESD保护,连续两次读取数据之间有数百纳秒的延迟就已足够。图12-19显示的是一个软件滤波子程序流程框图。在接受输入数据之前,这个子程序连续读N次输入数据,直到这些数据全部匹配为止。这个子程序也能够输出一个完整的脉冲。若忽略短的噪声瞬态,对于输入数据来说,程序相当于一个低通滤波器。
在接受数据之前,通过检查数据类型与数据范围的合理性,附加提供输入数据的保护。这样常常可以检测到输入错误并在数据进入系统或通过系统传输之前加以标识。

数据存储错误

    感应瞬态噪声引起的数据存储变化很少有立竿见影的效果。但是,如果不检测数据存储错误,这些错误过些时候可能会对系统造成影响。为了检测这种类型的错误,取自存储器的所有数据在使用之前必须进行验证。现在已有很多技术用来检查数据的有效性,例如奇偶位、校验和、循环冗余校验,以及错误检测代码等。这些技术里边的大多数只能检测错误是否存在,并不能对错误进行改正。例如,给每个数据字增加一个奇偶位,可以检测到所有的奇数位错误。系统可以使用这些信息来标记数据,并审查数据的有效性。
    然而,纠错代码能够检测和改正某些类型的错误。给每一个存储字再增加一个数据比特就可以实现。例如,每16比特字长再增加6比特,就可以检测到单比特或双比特错误,而单比特错误可以改正。设计时,必须确定系统所需要的数据存储保护程度,这也是系统规格特性的一部分。
发表于 2007-5-16 14:38:42 | 显示全部楼层
在软件设计初期如何对ESD风险做评估? [s:3]
发表于 2007-5-18 16:19:17 | 显示全部楼层
软件很久都没有接触了,有点生疏了都

还是很有用的

看来要在复习一下了都

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|电磁兼容网 电磁兼容小小家 EMC工程师家园 电磁兼容(EMC)小小家学习园地

GMT+8, 2024-5-13 15:34 , Processed in 0.093359 second(s), 20 queries .

快速回复 返回顶部 返回列表