电子断开 electronic disconnection
电子断开是由用于功能性断开的线路中的电子器件引起的非周期性中断。此类断开不是通过在至少一个极上提供满足某种电气要求的空气间隙来获得的。
电子断开不是两个器件有物理空隙的断开,而是由用于功能性断开的线路中的电子器件引起的非周期性中断,通过中断控制某个功能的实现。
电子断开要保证对于所有的非敏感控制器和敏感控制器,通过断开控制的功能都是可靠的。对于非敏感控制器,通过断开控制的功能要求是可靠的;而对于敏感控制器,需要列出敏感器件启动量的极限值,当敏感控制器超过此极限值时,微断开或电子断开是可靠的。这就要求对于敏感控制器,电子断开要保证超过敏感器件启动量的极限值,只有这样,才能保证控制功能的可靠性。
电子断开可通过自动动作和人工动作实现。自动动作是指电子设备对自身状态和周围环境参数进行检测,从而判断并发起断开指令,以实现电子断开。例如,电子设备可周期性地检测自身的运行状况,当状态异常时,停止运行。人工动作主要是通过人的活动引起的电子断开。例如,人工发现目前处于异常状态或危险状态,从而按下紧急制动按钮,实现电子断开。
控制器大多具有一种电路切断类型,但也有某些控制器可以具有多于一种的电路切断类型。
电子断开并不要求在所有的电子控制器中都适用,在某些应用中可能不适用。
电子控制器 electronic control
至少装有一个电子器件的控制器称为电子控制器。
电子器件 electronic device
产生电子动态不平衡的器件称为电子器件。
电子组件 electronic assembly
至少由一个电子器件构成的一组元件称为电子组件,可以在不损坏整个组件的条件下更换其中的某个元件。
集成电路 integrated circuit
集成电路是包含在一块半导体材料内,并且在这块材料表面或靠近材料表面进行互连的一种电子器件。
混合电路 hybrid circuit
混合电路是利用厚膜、薄膜或表面安装器件(SMD)技术在陶瓷基片上生产的电路,除了I/O点,没有其他可触及的电气连接,并且所有内部连接构成引线框式或其他整体式结构的一部分。
本节列出了电子控制器、电子器件、电子组件、集成电路和混合电路的定义。
1.电子控制器
电子控制器(ECU)是一种重要的电子产品,在电子生产中有着广泛的应用。电子控制器是一个微缩了的计算机管理中心,以信号(数据)采集、计算处理、分析判断、决定对策为输入,以发出控制指令、指挥执行器工作为输出。它的全部功能是通过各种硬件和软件的总和完成的,其核心是以单片机为主体的微型计算机系统。电子控制器至少装有一个电子器件,是由电子器件、电子组件、集成电路或混合电路构成的。
2.电子器件
电子器件是组成电子控制器的最小单元。电子器件是在真空、气体或固体中利用和控制电子运动规律制成的器件。电子器件的基本功能和结构是以半导体器件、真空管或气体放电管技术为基础的,分为电真空器件、充气管器件和固态电子器件。在模拟电路中,电子器件有整流、放大、调制、振荡、变频、锁相、控制、相关等作用;在数字电路中,电子器件有采样、限幅、逻辑、贮存、计数、延迟等作用。充气管器件主要用来整流、稳压和显示。集成电路属于固态电子器件。
3.电子组件
多个电子器件可构成电子组件。电子组件是由至少一个电子器件构成的一组元件。电子组件中的电子元件通常是个别封装的,并具有两个或以上的引线或金属接点,因此可以在不损坏整个组件的条件下更换其中的某个元件。电子元件间常相互连接以构成一个具有特定功能的电子电路,如放大器、无线电接收机、振荡器等,从而形成具有特定功能的电子组件。连接电子元件常见的方式之一是焊接到印制电路板上。
4.集成电路
集成电路是一种微型电子器件或部件。集成电路采用一定的工艺,把一个电路中所需的晶体管、电阻、电容和电感等元件及布线互连在一起,制作在一块半导体材料上,并封装在一个封闭的外壳内,其封装外壳有圆壳式、扁平式或双列直插式等多种形式。集成电路中的所有元件在结构上已组成一个整体,使电子元件向着微小型化、低功耗、智能化和高可靠性方面迈进了一大步。它在电路中用字母“IC”表示。当今半导体工业大多数应用的是基于硅的集成电路。
5.混合电路
混合电路也称为混合集成电路,是由半导体集成工艺与薄(厚)膜工艺结合制成的集成电路。混合电路是在基片上用成膜方法制作厚膜或薄膜元件及其互连线,在同一基片上将分立的半导体芯片、单片集成电路或微型元件混合组装并外加封装而成的。在标准中,混合电路指的是利用厚膜、薄膜或表面安装器件技术在陶瓷基片上生产的电路。由于混合电路除I/O点外没有其他可触及的电气连接,并且所有内部连接都成为整体式结构的一部分,因此具有组装密度大、可靠性高、电性能好等特点。
保护阻抗 protective impedance
保护阻抗是接在带电部件与易触及的导电部件之间的阻抗,其阻抗值将保证在设备正常使用或出现可能的故障时,限制流过它的电流值在一个安全的范围内。
保护阻抗设置的目的是在器具出现故障时,能够起降压作用,将电流限制在一个安全的范围内。保护阻抗可以是一个(或一组)电阻元件、电感元件或其他类似的电路单元。它在电路中出于功能的需要而连接在带电部件和易触及导电性部件之间,在正常使用中或器具出现故障时,能确保易触及导电性部件不成为带电部件。
双通道 dual channel
双通道是一种包含两个相互独立的、执行规定操作的功能装置的结构。
带有比较的双通道(不同的)dual channel(diverse)with comparison
带有比较的双通道(不同的)是含有两个不同的且相互独立的功能装置的双通道结构,每个通道都能提供一种规定的响应。在响应中,为识别故障/错误而对输出信号进行比较。
带有比较的双通道(相同的)dual channel(homogeneous)with comparison
带有比较的双通道(相同的)是含有两个相同的且相互独立的功能装置的双通道结构,每个通道都能提供一种规定的响应。在响应中,为识别故障/错误而对内部信号或输出信号进行比较。
单通道 single channel
单通道是带有用于执行指定操作的单一功能装置的一种结构。
带有功能检测的单通道 single channel with functional test
在操作前,把检测数据引导到功能单元的一种单通道结构称为带有功能检测的单通道。
带有周期性自检的单通道 single channel with periodic self test
在操作期间,控制器的组件被周期性地进行检测的一种单通道结构称为带有周期性自检的单通道。
带有周期性自检和监视的单通道 single channel with periodic self test and monitoring
带有周期性自检和监视的单通道中能提供所宣称的响应的独立装置,可以对安全相关的诸如定时、序列和软件操作等进行监控。
本节给出了使用软件的控制器的各种结构,包括双通道、带有比较的双通道(不同的)、带有比较的双通道(相同的)、单通道、带有功能检测的单通道、带有周期性自检的单通道、带有周期性自检和监视的单通道,并给出了这些控制器结构的定义。
1.双通道
双通道包含两个相互独立的功能装置。在结构设计上,双通道应由两个相互独立的单通道构成,能够独立完成指定的功能,并且每个通道各自具有独立的控制器。在功能设计上,双通道应符合以下两种情况之一:一个通道负责设备的控制,另一个通道负责监测设备状态参数;两个通道都是相互独立的控制功能通道。在系统容错性上,双通道系统中单个通道的失效不应导致系统失效。双通道对共模故障/错误可采取特别措施。实现时,并不要求它的每个通道都是算法的或逻辑的。
2.带有比较的双通道(不同的)
带有比较的双通道(不同的)也是一种双通道结构,其中一个通道用于功能控制,另一个通道用于系统监测。当功能控制通道出现故障时,系统监测通道应能够检测到该故障,并警示用户;当系统监测通道发生故障时,功能控制通道仍应正常运行,并且能检测到系统监测通道的故障。
3.带有比较的双通道(相同的)
带有比较的双通道(相同的)是一种双通道结构。它的两个通道都是功能相同、结构相同的控制通道,当其中一个通道出现故障时,另一个通道仍应能够维持系统正常工作。若两个通道都能正常工作,那么系统将对两个通道的内部信号或控制输出进行比较和分析,从而可以识别故障/错误,保证控制输出的正确性和有效性。
4.单通道
单通道应能完成既定的控制或处理功能。单通道系统中存在且仅存在承载了输入、处理、输出单元控制流和数据流的单个路径通道,不存在独立的冗余控制通道或监测通道。在单通道中,任何组件的失效或故障都将会导致整个通道失效或故障。
5.带有功能检测的单通道
带有功能检测的单通道具备单通道的特性,同时具备功能测试软件区段,用于测试控制器组件是否能够正常工作。在系统启动时,功能测试软件区段应能自动加载测试数据,并对控制器组件进行功能测试。
6.带有周期性自检的单通道
带有周期性自检的单通道具备单通道的特性,同时,在控制器系统工作期间,自检软件区段应能按照指定的周期间隔执行,检测被测控制器组件是否正常工作。
7.带有周期性自检和监视的单通道
带有周期性自检和监视的单通道具备带有周期性自检的单通道的特性,同时包含可对安全相关的信息进行监控的独立装置。
动态分析 dynamic analysis
动态分析是把输入到控制器的信号模拟化,并检查电路节点处的逻辑信号是否具有正确的值和定时的一种分析方法。
故障率统计 failure rate calculation
对于某一给定类型的故障,单位时间内的理论统计值为故障率统计。
硬件分析 hardware analysis
硬件分析是在规定的偏差和额定值范围内考核控制器的布线与元件是否具有正确功能的一个评价过程。
硬件模拟 hardware simulation
硬件模拟是通过利用计算机模型考核线路功能和元件偏差的一种分析方法。
检查 inspection
检查是为了鉴别可能出现的错误,是由除设计者或编程者以外的个人或小组详细地考核硬件或软件的规范、设计或代码的一个评价过程。
操作试验 operational test
操作试验是控制器在预期操作条件(如循环速率、温度、电压)的极端情况下操作,以发现在设计或结构上的错误的一个评价过程。
静态分析-硬件 static analysis-hardware
静态分析-硬件是系统地评估硬件模型的一个评价过程。
静态分析-软件 static analysis-software
静态分析-软件是无须执行程序而系统地评估软件程序的评价过程。
系统测试 systematic test
系统测试是通过引入所选择的测试数据来评估一个系统或软件程序是否能正确执行的一种分析方法。
黑盒测试 black box test
黑盒测试是将功能规范上的测试数据引入功能单元,以评价其是否正确操作的一个系统测试。
白盒测试 white box test
白盒测试是把以软件规范为基础的测试数据引入程序,以评价程序的子部分是否正确的一个系统测试。
预审 walk-through
预审是为了鉴别可能出现的错误,是由设计者或编程者引导项目评价组成员全面评价由该设计者或编程者开发的硬件设计、软件设计和/或软件代码的一个评价过程。
软件故障/错误发现时间 software fault/error detection time
从故障/错误发生到软件引起的规定的控制器响应启动的时间称为软件故障/错误发现时间。
本节给出了使用软件的控制器避免错误的各种方法。这些方法主要是使用软件的控制器在研发过程中避免控制器硬件/软件设计或实现错误而采取的各种测试和验证。这些测试和验证是检测使用软件的控制器中缺陷的有效的和必不可少的手段与措施,也是使用软件的控制器研发周期中不可或缺的一部分。
1.动态分析与静态分析
动态分析与静态分析是检测和识别使用软件的控制器中的软件或硬件错误的有效方法。静态分析又分为使用软件的控制器的软件静态分析(静态分析-软件)和硬件静态分析(静态分析-硬件)。
从分析的对象来说,软件静态分析的对象是软件编码结束后、软/硬件集成之前的软件代码,硬件静态分析的对象是硬件设计结束后形成的电子部件及电路布局布线硬件模型;而动态分析的对象大多是软件和硬件集成的控制器。
动态分析和静态分析的主要区别就是动与静的区别,即是否需要把被分析的对象运行起来,若需要把被分析的对象运行起来,就是动态分析;若不需要把被分析的对象运行起来,就是静态分析。
硬件静态分析主要是使用计算机辅助工具对硬件的布局布线、时序和接口等的分析与功能的检查。
软件静态分析主要使用计算机工具软件对被测软件源代码进行控制流分析、数据流分析、接口分析、表达式分析和局部数据结构分析等。例如,常使用软件静态分析工具LDRA Testbed对软件源代码进行静态分析等。
动态分析主要是对软件和硬件集成后的控制器的分析与测试,主要包括功能测试、接口测试、容错性测试和性能测试等。动态测试主要是把被测控制器运行起来,通过人员操作或信号模拟的手段向被测控制器输入信号,检测控制器的输出信号或响应是否满足设计要求。
2.故障率统计
设备故障一般是指设备失去或降低其规定功能的事件或现象,表现为设备的某些零件失去原有的精度或性能,使设备不能正常运行、技术性能降低,致使设备中断生产或效率降低而影响生产。简单地说,就是一台装置(或其零部件)丧失了它应达到的功能。
前面提到,故障率统计是指某一给定类型的故障在单位时间内的统计值,如每小时故障数或每一操作周期的故障数。
设备故障率也可通过计算事故(故障)停机时间与设备应开动时间的百分比得到,是考核设备技术状态、故障强度、维修质量和效率的一个指标。
3.硬件分析与硬件模拟
前面提到,硬件分析是在规定的偏差和额定值范围内考核控制器的布线与元件是否具有正确功能的一个评价过程。硬件分析主要适用于静态分析方法,也可借助计算机软件辅助完成。
前面提到,硬件模拟是利用计算机模型考核线路功能和元件偏差的一种分析方法,可用计算机建模的方法将硬件运行起来,分析可能存在的错误或偏差。例如,MATLAB Simulink就是一种常用的和有效的模型分析仿真工具。
4.检查和预审
检查和预审都是为了排查或鉴别软件控制器中可能存在的错误而详细地审查与评价控制器硬件或软件规格说明、硬件设计、软件设计或软件代码的过程。
不同的是,检查和预审的实施主体不同,在预审中,控制器的设计者或编码者处于主动位置,由他们引导项目评价组成员实施评价和审核,是实施主体;在检查中,活动实施的主体是项目评价组成员,由项目评价组成员主导评价和审核过程,设计者或编程者在评价期间处于被动位置。
5.操作试验与系统测试
操作试验是使控制器运行在可预期的极端操作条件(如循环速率、温度、电压)下,用来发现控制器在设计或结构上错误的评价过程。在此意义上,操作试验主要是指控制器的运行极限测试或强度测试。如果要求某一款控制器可在一定的电压值或电流值区间正常工作,那么操作试验就需要测试该控制器在电压值(或电流值)区间的最大值和最小值处能否正常工作。
系统测试的对象是软件控制器系统或系统软件,测试的目的是验证系统或软件是否满足系统需求或软件需求中描述的系统功能、性能等指标,同时查找系统或软件中存在的错误和缺陷,以便修复这些缺陷,从而提高系统或软件的质量。系统测试需要设计一些测试用例(测试数据)。测试用例主要说明系统在某种工作状态下,在某些输入或激励下应该(预期)有某些输出或响应。测试人员执行这些测试用例,会得到系统的实际输出和响应,若系统的实际输出和响应与预期一致,则该项测试是通过的;若不一致,则可能是系统中存在某些问题,需要具体分析和排查。
6.黑盒测试与白盒测试
黑盒测试和白盒测试都属于软件的动态测试,就是把软件运行起来,检查软件在某些输入激励下的输出是否正确。黑盒测试又称黑箱测试,即把被测软件看作一个黑盒子,主要关注软件在输入激励下的输出与预期输出是否一致,不关心软件的内部运行逻辑和结构;而白盒测试则不同,它不仅关注软件的实际输出与预期输出是否一致,还关注软件的内部运行与软件设计是否一致,以及软件的内部运行逻辑和结构。黑盒测试与白盒测试如图1.1所示。
图1.1 黑盒测试与白盒测试
黑盒测试方法一般包括功能分解、边界值分析、判定表、因果图、随机测试、猜错法和正交试验法等。白盒测试方法一般包括控制流测试(语句覆盖测试、分支覆盖测试、条件覆盖测试、条件组合覆盖测试、路径覆盖测试)、数据流测试、程序变异、程序插桩、域测试和符号求值等。
在软件动态测试过程中,应采用适当的测试方法实现测试要求。配置项测试和系统测试一般采用黑盒测试方法;部件测试一般主要采用黑盒测试方法,辅助以白盒测试方法;单元测试一般采用白盒测试方法,辅助以黑盒测试方法。
7.软件故障/错误发现时间
对于使用软件的控制器,故障/错误发现时间是一个与安全相关的重要指标,直接关系控制器安全相关功能能否实现。例如,在家用电热泵超温超压控制中,要求当超温或超压情况出现时,控制器应在规定的时间(如5s)内停止加热,防止因温度或压力过高而出现管道爆裂,导致危险。
全总线冗余 full bus redundancy
全总线冗余是由冗余的总线结构提供全冗余数据和/或地址的一种故障/错误控制技术。
多位总线奇偶校验 multi-bit bus parity
多位总线奇偶校验是总线扩展两位或多位,并用这些扩展位发现错误的一种故障/错误控制技术。
一位总线奇偶校验 single bit bus parity
一位总线奇偶校验是总线扩展一位,并用这一扩展位发现错误的一种故障/错误控制技术。
代码安全 code safety
代码安全是通过利用数据冗余和/或传输冗余提供防止输入和输出信息中偶然的和/或系统的错误的保护故障/错误控制技术。
数据冗余 data redundancy
数据冗余是产生冗余数据贮存的一种代码安全形式。
传输冗余 transfer redundancy
传输冗余是数据至少被连续传输两次后被比较的一种代码安全形式。
比较器 comparator
比较器是在双通道结构中用作故障/错误控制的一种器件。此器件比较来自两个通道的数据,并且在发现两个通道的数据有差异时,初始化一种声明的响应。
d.c.故障模式 d.c.fault model
d.c.故障模式是包含信号线间短路的一种黏着性故障形式。
等价类测试 equivalence class test
等价类测试是预定用于确定是否对指令进行了正确译码和执行的一种系统测试。该测试数据源自CPU指令规范。
错误识别装置 error recognizing means
错误识别装置是为识别系统内部错误而设计的独立装置。
汉明距离 hamming distance
汉明距离是一种统计度量,表示代码检测和纠正错误的能力。两个码字的汉明距离等于两个码字中不同位的数量。
输入比较 input comparison
输入比较是用于比较专门在规定的偏差范围内的输入的一种故障/错误控制技术。
内部错误侦测或纠正 internal error detecting or correcting
内部错误侦测或纠正是整合了用于侦测或纠正错误的特殊电路的一种故障/错误控制技术。
频率监测 frequency monitoring
频率监测是把时钟频率与一个独立的固定频率相比较的一种故障/错误控制技术。
程序顺序的逻辑监测 logical monitoring of the programme sequence
程序顺序的逻辑监测是监测程序顺序的逻辑执行的一种故障/错误控制技术。
时隙和逻辑监测 time-slot and logical monitoring
时隙和逻辑监测是程序顺序的逻辑监测和程序顺序的时隙监测的联合。
程序顺序的时隙监测 time-slot monitoring of the programme sequence
程序顺序的时隙监测是周期地触发基于独立时钟基准的计时装置而用于监测程序功能和顺序的一种故障/错误控制技术。
多路平行输出 multiple parallel output
多路平行输出是为操作错误侦测或独立比较因子提供独立输出的一种故障/错误控制技术。
输出验证 output verification
输出验证是把输出与独立的输入进行比较的一种故障/错误控制技术。
似真性检查 plausibility check
似真性检查是对程序执行、输入或输出进行检查以确认是否有不能容许的程序顺序、计时或数据的一种故障/错误控制技术。
协议测试 protocol test
协议测试是在计算机各组成部件之间进行数据传递以侦测内部通信协议错误的一种故障/错误控制技术。
倒置比较 reciprocal comparison
倒置比较是用于带有比较的双通道(相同的)结构中,在两个处理单元之间进行倒置数据交换时做比较的一种故障/错误控制技术。
冗余数据生成 redundant data generation
冗余数据生成是指提供两种或两种以上独立方法执行相同的任务,如多个代码生成器。
冗余监测 redundant monitoring
冗余监测是指利用两个或多个诸如看门狗和比较器之类的独立装置执行同一任务。
预定的传输 scheduled transmission
预定的传输是一种通信过程,在此过程中,特定的发送器只被允许在一个预先设定的时间点或时间段发送信息,除此之外,接收器将按通信出错处理。
软件差异性 software diversity
软件差异性是软件的全部或部分以不同的软件代码的形式被二次装入的一种故障/错误控制技术。
黏着性故障模式 stuck-at fault model
呈现开路或信号电平不变的故障模式称为黏着性故障模式。
受试监测 tested monitoring
受试监测是指通过诸如看门狗和比较器之类的独立装置,在控制器启动时或运行期间对其进行周期性的测试。
测试模式 testing pattern
测试模式是用于周期性地测试控制器的输入装置、输出装置和控制接口的一种故障/错误控制技术。将测试模式引入单元并将结果与期望值进行比较。使用相互独立的测试模式引入和结果评价。测试模式的建立应不影响控制器的正确操作。
本节给出了使用软件的控制器在软/硬件设计、开发和测试过程中用到的故障/错误控制技术与方法,主要从控制器的结构设计、通信传输、通信数据校验等方面讲解了一系列错误控制方法和措施。
1.全总线冗余
总线冗余是避免数据或地址总线在通信中的错误、提高总线通信可靠性的有效设计。总线冗余分为全总线冗余、多位总线奇偶校验、一位总线奇偶校验。
全总线冗余是由冗余的总线结构提供全部的冗余数据或冗余地址的错误控制技术。以CAN总线通信为例,虽然CAN协议自身有比较强的检错和纠错能力,但是在工业控制现场的复杂环境中,机械和电磁的噪声等都会影响CAN总线的可靠通信,进而使得系统的整体可靠性大大降低,解决这个问题的有效办法是采取冗余设计。冗余设计一般包括部分冗余和全面冗余。部分冗余设计通常仅实现物理介质和物理层的冗余,CAN总线通信的实时性和可靠性仍不能得到有效保证。全面冗余设计对传输介质、数据链路层及物理层,甚至应用层都进行了全面的冗余,可以大幅度提升系统的可靠性。全面冗余与部分冗余方法相比,不使用故障判断和冗余部分切换电路,从而降低了硬件电路的设计难度,并且使系统的故障率大大降低。
2.多位总线奇偶检查和一位总线奇偶校验
奇偶校验是一种校验代码传输正确性的方法,根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验,采用奇数的称为奇校验,采用偶数的称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中1的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验1的个数是否为奇数,从而确定传输代码的正确性。
奇偶校验的校验方法如下。
奇校验就是让原有数据序列中(包括要加上的1位)1的个数为奇数。例如,对于序列“1000110(0)”(括号中的0是添加的1位校验位),原来1的个数是奇数(3),必须添加0,使添加位之后1的个数还是奇数。偶校验就是让原有数据序列中(包括要加上的1位)1的个数为偶数。例如,对于序列“1000110(1)”(括号中的1是添加的1位校验位),原来1的个数是奇数(3),必须添加1,使添加位之后1的个数是偶数(4)。
奇偶校验又分为单个位奇偶校验(又称单向奇偶校验)和双向奇偶校验(又称双向冗余校验、方块校验或垂直水平校验)。单个位奇偶校验是发送器在数据帧每个字符的信号位后添加一个奇偶校验位,接收器对该奇偶校验位进行检查的方式。典型的例子是面向ASCII码的数据信号帧的传输,由于ASCII码是7位码,因此,用第8位码作为奇偶校验位。对于双向奇偶校验,可通过表1.1所示的例子来说明。
表1.1 双向奇偶校验示例
注:“X”表示奇偶校验采用的奇校验或偶校验的校验码。
在表1.1中,对每一行和每一列都使用了奇偶校验,对每个数的关注,由单个位奇偶校验的1×7次增加到了7×7次。因此,双向奇偶校验比单个位奇偶校验的校验能力强。
奇偶校验码是最简单的错误检测码。如果传输过程中包括校验位在内的奇数个数据位发生改变,那么奇偶校验位将出错,表示传输过程有错误发生,因此,奇偶校验位是一种错误检测码,但是由于没有办法确定是哪一位出错,所以不能进行错误校正。当发生错误时,必须扔掉全部的数据,从头开始传输数据。在噪声很多的媒介上成功传输数据可能要花费很长的时间,甚至根本无法实现。但是奇偶校验位也有它的优点,它是使用一位校验位能够达到的最好的错误检测码,并且它只需一些异或门就能够生成,因此奇偶校验被广泛应用。
一位总线奇偶校验将总线扩展一位,利用该扩展位采用奇偶校验的方法发现错误。
多位总线奇偶检验将总线扩展两位或多位,利用这些扩展位采用奇偶校验的方法发现错误。
3.代码安全、数据冗余和传输冗余
代码安全是通过利用数据冗余或传输冗余技术来防止输入或输出信息中偶然的或系统性的误差(或错误)的故障/错误控制技术。
数据冗余是同一数据贮存在不同数据文件中的方法,可通过重复贮存数据来防止数据丢失,或者对数据进行冗余性编码来防止数据丢失、错误,并提供对错误数据进行反变换得到原始数据的功能。
传输冗余是数据至少被传输两次,并对两次或多次传输的结果进行数据比较的数据错误检测控制方法。数据冗余传输可以在同一个传输通道中将同一数据先后传输两次或多次,也可在两个或多个传输通道中将同一数据同时传输两次或多次,并将两次或多次传输获得的数据进行比较,进而实现错误检测控制。传输冗余可以辨别出偶发错误。
4.比较器
比较器是双通道结构中使用的一种故障/错误控制器件。双通道结构一般会对同一对象(数据或信号等)进行处理,通过两个通道输出两路数据,比较器可对这两路数据进行比较,并按预先设计的规则对比较的结果进行处理和响应。例如,比较器常见的对比较结果进行处理的方式如下:若两路数据相同,则认为系统工作正常(或数据输入和处理正确),执行两个通道的输出;若两路数据不相同,则认为系统工作异常(或数据输入和处理错误),此时它会向主控系统报系统异常或故障,进而进入故障处理流程(如重新进行两通道的输入、处理和输出比较,或者停止与安全相关的控制输出,进入故障状态并提醒用户进行故障处理)。
5.d.c.故障模式
d.c.故障模式是包含信号线间短路的一种黏着性故障模式。在被测设备中,可能的短路的数量较多,通常重点考虑信号线间的短路。确定一个逻辑信号电平,用于防止信号线试图驱动相反电平的情况发生。
6.等价类测试
等价类测试又称为等价类划分测试,是一种测试用例设计方法。等价类划分是指在分析需求规格说明的基础上,把被测系统的输入域划分成若干部分,在每部分中选取代表性数据形成测试用例。每部分的代表性数据在测试中的作用等价于此部分中的其他值,即如果用该代表性数据发现了错误,那么用该部分的其他值也会发现错误;如果用该代表性数据没有发现错误,那么用该部分的其他值也不会发现错误,因此把该部分称为等价类。
一个被测系统的输入是无限的,测试者不可能遍历系统的所有输入,不可能进行全部测试。例如,某系统的合法输入值是[0,10]区间的实数,因为[0,10]区间有无穷多个实数,所以测试者不可能进行全部测试。但是被测系统往往存在这种现象:对某一集合中的所有可能输入、系统的响应是同一种形式,对另外一个集合中的所有可能输入、系统的响应又是另一种形式。等价类划分就基于这种思想,将导致系统响应一样的多个输入划分为一类,在这一类中找一个代表设计测试用例对系统进行测试。
等价类划分一般要经历如下步骤。
(1)划分有效等价类:对规格说明是有意义的、合理的输入数据构成的集合。
(2)划分无效等价类:对规格说明是无意义的、不合理的输入数据构成的集合。
(3)确定边界上的数据:将有效数据和无效数据边界上的数据形成一个等价类。
(4)极端值和它们的组合:将极端值和它们的组合形成一个等价类。
(5)为每个等价类定义一个唯一的编号。
(6)为每个等价类设计一组测试用例,确保覆盖相应的等价类。
等价类划分测试选择有限子集代表所有可能的输入全集。它需要将被测软件的输入和输出分成许多区域,对于一个区域中的任何值,软件的行为是等价的。等价类划分假设任何单一区域内的所有值具有相同的测试目的,因此,每个区域测试一个值。
对于使用软件的控制器,等价类划分测试是使用等价类划分的方法测试控制器能否对指令正确译码和执行的一种系统测试,其测试依据是控制器的CPU指令规格说明和控制器需求规格说明。
7.错误识别装置
前面提到,错误识别装置是为识别系统内部错误而设计的独立装置,如监测装置、比较器和代码发生器。例如,对于某型热泵热水器,其软件控制中可通过温度和压力传感器检测并避免超温超压危险工况的发生;还设计有独立的压力接触开关,在超压且软件控制器失效的情况下,通过压力接触开关断开电源,避免压力继续上升。这个独立的压力接触开关就属于错误识别装置。
8.汉明距离
汉明距离是以理查德·卫斯里·汉明的名字命名的,汉明在误差检测与校正码的基础性论文中首次引入这个概念。在通信中,汉明距离用来累计定长二进制字中发生翻转的错误数据位数,因此也被称为信号距离。汉明距离在图像处理领域也有广泛的应用,是比较二进制图像非常有效的手段。
在信息理论中,汉明距离表示两个等长字符串在对应位置上不同字符的数目,用d(x,y)表示字符串x和y之间的汉明距离。从另外一个方面看,汉明距离度量了通过替换字符的方式将字符串x变成y所需的最少替换次数。
对于二进制串a和b,汉明距离等于a xor b(xor即异或运算)中1的数目,又称其为汉明权重。此时,计算汉明距离就转化为计算给定整数的二进制表示中1的个数,可通过反复查找并消除最低的非零bit位来实现。基于此,使用C语言实现的计算汉明距离的算法如下:
9.输入比较
输入比较是防止因输入数据或信号非法(或越界)而引起系统错误的有效故障/错误控制手段。大部分系统对其输入数据都有一定的范围限制,处理超范围的数据可能超出了系统的处理能力,也可能是无意义的。因此,好的系统设计(或软件设计)会对输入系统的数据的取值限制一个范围或区间,并将输入数据与这个范围进行比较,只处理范围内的数据,对超出范围的数据不进行处理(或同时给出错误报警处理)。
10.内部错误侦测或纠正
内部错误侦测或纠正装置是控制器中用于检测或纠正错误的特殊电路装置。它整合用于检测错误或纠正错误的特殊电路。例如,家用电磁炉中的热熔断保护电路的工作原理是当系统中的电流过流一段时间(如1min)且软件控制器控制失效时,可通过热熔断断开电源,避免险情进一步发展。
11.程序顺序监测
程序顺序监测即程序执行顺序监测,监测控制器中程序的执行顺序是否满足设计要求,且当程序执行顺序错误时进行纠错处理。控制器中的程序作为嵌入式软件程序,其运行一般都有固定的逻辑顺序和运行周期要求,在正常情况下,程序按设计的逻辑顺序和运行周期循环运行,实现系统的输入数据获取、数据处理、决策判断和输出控制功能。而当程序的执行逻辑顺序或周期运行频率出现错误时,就会导致软件错误的发生,进而导致软件功能失效。在极端的情况下,当安全相关功能失效时,将会导致安全事故的发生。程序顺序监测是监测和纠正程序的执行逻辑或周期运行频率错误的有效手段。
程序顺序监测可通过程序顺序的逻辑监测和频率监测实现。程序顺序的逻辑监测是监测程序执行逻辑顺序的错误控制措施,嵌入式软件大多都是顺序执行的,对于顺序执行的程序,可通过程序运行步骤累计与判定来判定和识别程序是否按系统设置执行。程序顺序的逻辑监测设计如图1.2所示。
频率监测是把控制器(或MCU、CPU)的时钟频率与一个独立的固定频率相比较来监测控制器频率错误的故障监测手段,如与线路供电频率相比较。
前面提到,程序顺序的时隙监测是周期地触发基于独立时钟基准的计时装置而用于监测程序功能和顺序的一种故障/错误控制技术。看门狗定时器是一个程序顺序的时隙监测的例子。看门狗(WDT)从本质上来说就是一个定时器电路,一般有一个输入和一个输出,其中的输入叫作喂狗,输出一般连接到复位端。在整个系统运行以后启动看门狗的计数器,此时看门狗就开始自动计时,在MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给看门狗电路清零,如果超过规定的时间不喂狗,则看门狗计数器会溢出,从而引起看门狗中断,会发出一个复位信号并送达MCU,使MCU复位。看门狗就是利用了一个定时电路来监控主程序的运行的。在主程序的运行中,要在定时时间到达之前对定时器的计数进行清零。看门狗的作用就是防止程序无限制地运行,造成死循环。例如,它可以用于接收数据时接收超时的处理,也可用于发送数据时发送超时的处理。
12.多路平行输出
多路平行输出是为监测错误操作或提供给独立的比较器进行输出比较而设计的多个相互独立的输出。多路平行输出多存在于具有双通道或多通道结构的控制器中,每个通道都会对系统的输入分别进行处理和判断并给出独立的输出,对多个输出进行比较和判断,当出现偶发故障时,可以监测到故障/错误,即使在出现偶发故障的情况下,仍能给出正确合理的输出。例如,“二乘二取二”和“三取二”高可靠性结构设计就是以多路平行输出为基础的。
图1.2 程序顺序的逻辑监测设计
13.输出验证
输出验证对输出与独立的输入进行比较。独立的输入可以是一个输出预计值,将输出与输出预计值进行比较,当两者不一致或差距较大时,可以监测到系统错误。此时,输出验证将有缺陷的输出与错误关联起来。输出验证也可以不将有缺陷的输出与错误进行关联,此时,独立的输入可以设置为其他状况。
14.似真性检查
似真性检查是软件控制器的差错、容错、改错处理设计,对程序执行、输入或输出进行检查,查看是否有错误的程序顺序、计时或数据错误。例如,对于程序的输入检查,可识别合法输入和非法输入,使程序只处理合法输入;对于程序的输出检查,可屏蔽错误的或不合理的输出,保证程序输出的正确性;在程序中设置看门狗可避免程序进入死循环;在程序执行顺序错乱或遇到除零时,使程序进入故障处理状态,避免系统因带病运行而使被控家电进入不安全运行状态。
16.协议测试
协议测试是侦测内部通信协议错误的一种故障/错误控制技术。它在计算机各组成部件之间以内部通信协议的格式进行数据传递,检查通信的输入/输出端口、通信链路、通信格式等是否有错误。
对于使用软件的控制器,协议测试主要是针对控制器的板卡之间的通信协议的测试,家电控制器通信大多使用串口通信协议,如RS232、RS422、RS485等。在协议测试中,首先要对通信协议进行解析,分析每个字段代表的意义和被测软件对该字段的处理响应机制,从功能、边界、容错等角度设计测试用例,对软件进行测试;其次要考虑协议字段之间的关联关系,考虑字段之间的两两组合或三组合设计测试用例进行测试。
17.倒置比较
倒置是指相似数据的交换。倒置比较用在带有比较的双通道(相同的)结构中,对两个处理单元之间要交换的相似数据进行比较。两个通道中的相似数据大多是对同一数据源或信息采用同样的处理方式处理之后产生的,在正常情况下,两个通道产生的这些数据存在很小的偏差(甚至相同),进行比较能及时发现某个通道的异常,进而避免严重问题的发生。
18.冗余数据生成
冗余数据生成是指提供两个或多个独立的装置(如多个独立的代码生成器)来执行相同的任务。提供给这些装置的数据是完全一致的。
软件控制器的双通道或多通道是冗余数据产生的重要应用。首先通过双通道或多通道结构对同一个任务进行多路处理,然后对处理结果进行比较和判断,最后进行表决和输出,以保证控制的正确性和安全性。
19.冗余监测
冗余监测是指提供两个或多个独立的监测装置来执行同一监测任务。例如,采用两个或多个独立的看门狗装置对程序的异常执行进行监测,使用多个独立的温度传感器对电热类家电进行温度监测等。
20.预定的传输
预定的传输是一种事先定义好的通信信息传输机制,在此传输机制下,发送器只被允许在预先设定的时间点以预先设置的顺序发送信息,除此之外,接收器将按通信出错处理。例如,各种通信协议一般都有通信的时序要求,包括RS232、RS422、RS485串口通信和CAN总线通信等,通信的发送方和接收方只有按定义的时序要求发送或接收数据,才能实现有效通信。
21.软件差异性
软件差异性也可称为软件多样性,是指软件的全部或部分以不同的代码形式被装入贮存器中。所谓不同的代码形式,就是指实现相同的功能,但可以是由不同的程序员编写的、采用不同的编程语言实现的、由不同的编译器编译生成的代码。软件的不同形式的代码被装入两次,两次装入可保存在不同的硬件通道内(适用于具有双通道结构的控制器),也可保存在一个通道的不同贮存区域内。
22.黏着性故障模式
黏着性故障模式主要反映电路中某个信号线的不可控性,是指电路中某个信号线(输入或输出)的逻辑电平固定不变。在系统运行过程中,该信号永远固定在某一值上。在数字电路系统中,如果该信号固定在逻辑高电平上,则称为固定1故障(stuck-at-1),简写为sa1;如果该信号固定在逻辑低电平上,则称为固定0故障(stuck-at-0),简写为sa0。
黏着性故障在实际应用中用得非常普遍,因为电路中元件的损坏、连线的开路和相当一部分的短路故障都可用黏着性故障模式比较准确地描述出来,而且由于它的描述比较简单,因此处理故障也比较方便。以TTL(Transistor-Transistor-Logic,晶体管-晶体管逻辑电路)门电路为例,输出管的对地短路故障属于sa0故障,而输出管的开路故障属于sa1故障。任何使输出固定为1的物理故障都属于sa1故障。
需要指出的是,sa1和sa0都是针对电路的逻辑功能而言的,不能简单地理解为具体的物理故障。因此,sa1故障决不单纯指节点与电源的短路故障,sa0故障不单纯指节点与地之间的短路故障,而是指节点不可控,始终使节点上的逻辑电平停留在逻辑高电平或逻辑低电平上的各种物理故障的集合。
根据电路中黏着性故障的数目,可以把黏着性故障分为两大类:如果一个电路中只存在一个黏着性故障,则称为单黏着性故障;如果一个电路中有两个或两个以上的黏着性故障,则称为多黏着性故障。
23.受试监测
前面提到,受试监测是指通过诸如看门狗和比较器之类的独立装置,在控制器启动时或运行期间对其进行周期性的测试。看门狗可通过周期检测来判断程序是否正确执行,避免程序进入死循环或执行周期异常。
对于嵌入式控制软件,系统的上电自检和周期性自检就是受试监测的集中体现。好的嵌入式控制系统设计一般都具备上电自检和周期性自检功能,通过上电自检来保证系统在健康条件下进入工作状态,通过系统工作过程中的周期性自检来确认系统一直处于正常状态。
24.测试模式
测试模式用于测试控制器的输入装置、输出装置和用户界面等控制器接口,用以检测这些部件或接口的实际输出与预期输出是否一致,进而判断控制器是否存在工作异常。
对于嵌入式控制系统软件,好的系统设计要求系统可进行工作模式切换,典型的工作模式包括关机模式、正常工作模式、故障模式、测试模式等。系统运行时,可在这些模式之间切换,一般,系统上电自检正常后进入正常工作模式;在正常工作模式下检测到特定故障时进入故障模式;在进行人工排查故障或测试系统功能是否正常时,可由操作人员控制系统进入测试模式,在测试模式下,可对系统运行过程中产生的实际数据进行分析,以判断系统能否正常工作。
阿伯拉翰测试 Abraham test
阿伯拉翰测试是可变贮存器模式测试的一种特殊形式,在这种形式中,所有贮存器单元之间的固定和耦合错误都被标明。
GALPAT贮存测试 GALPAT memory test
GALPAT贮存测试是对已统一写入的贮存单元的某一区段中的某一单元进行反向写入,并检查受试的剩余贮存单元的一种故障/错误控制技术。每次在对该区段中的剩余单元之一进行读操作后,也检查并读被反向写入的单元。对受试的所有贮存单元,都要重复这个过程。按上述步骤在相同的贮存范围内执行第二次测试,但不向待测单元反向写入。
穿透式GALPAT测试 transparent GALPAT test
穿透式GALPAT测试是形成代表待测贮存器范围内容的第一特征字,并且贮存这个字的GALPAT贮存测试。对待测单元反向写入并按穿透式GALPAT测试步骤进行测试。这里不需要检查每个剩余的单元,而是形成第二特征字,并与第一特征字进行比较;把以前反向的数值反向写入待测单元,并按穿透式GALPAT测试步骤进行第二次测试。
修改的检查和 modified checksum
修改的检查和是产生并贮存代表贮存器中全部字内容的一个单字的一种故障/错误控制技术。在自检期间,从相同的算法中形成一个检查和,并与被贮存的检查和进行比较。
多重检查和 multiple checksum
多重检查和是产生并贮存代表待测贮存区域内容的一个独立字的一种故障/错误控制技术。在自检期间,用相同的算法对待测贮存区域形成一个检查和,并与为该区域的贮存的检查和进行比较。
单字的循环冗余检查 CRC-single word
单字的循环冗余检查是产生代表贮存器内容的一个单字的一种故障/错误控制技术。在自检期间,使用相同的算法产生另外一个特征字并与贮存的字相比较。
双字的循环冗余检查 CRC-double word
双字的循环冗余检查是产生代表贮存器内容的至少两个字的一种故障/错误控制技术。在自检期间,使用相同的算法产生相同数量的特征字并与贮存的字相比较。
带有比较的冗余贮存器 redundant memory with comparison
带有比较的冗余贮存器是把贮存器中有关安全的内容按不同格式在分离的区域贮存两次,以便可以比较二者的错误控制的一种结构。
静态贮存器测试 static memory test
静态贮存器测试是预定只检测静态错误的一种故障/错误控制技术。
方格贮存器测试 checkerboard memory test
方格贮存器测试是将“0”和“1”的方格模式写入被试贮存器区域,并成对地检测单元的一种静态贮存器测试。每对的第一个单元的地址是可变的,而第二个单元的地址是从第一个地址倒移一位得到的。在第一次检测中,可变地址首先被加1到贮存器地址空间的末端,然后减1到原来的值。按相反的方格模式重复本测试。
进程贮存器测试 marching memory test
进程贮存器测试是像正常操作一样,把数据写入被试贮存器区域的一种静态贮存器测试。该测试首先按上升次序测试每个单元,并对内容进行倒位;然后按下降次序重复测试和倒位。在第一次对所有被试贮存单元进行倒位后重复本过程。
走块式贮存器测试 walkpat memory test
走块式贮存器测试是像正常操作一样,把标准数据模式写入被试贮存器区域的一种故障/错误控制技术。该测试首先对第一个单元进行倒位,并检查剩余的贮存器区域;然后把第一个单元再次倒位并检查贮存器。对所有的被试贮存器单元重复本过程。对被试贮存器的所有单元进行倒位,且按上述过程进行第二次测试。
带有多位冗余的字保护 word protection with multiredundancy
带有多位冗余的字保护是被试贮存器区域中的每一个字产生冗余位数并贮存的一种故障/错误控制技术。当读每一个字时,进行奇偶校验。
带有一位冗余的字保护 word protection with single bit redundancy
带有一位冗余的字保护是把一位加到被试贮存器区域的每一个字上并贮存的一种故障/错误控制技术,产生的奇偶性或者为奇数或者为偶数。当读每一个字时,均进行奇偶校验。
此部分说明了对于使用软件的控制器中的贮存器,检测和识别贮存器中错误与故障的各种算法,包括阿伯拉翰测试、GALPAT贮存测试和穿透式GALPAT测试、修改的检查和、多重检查和、循环冗余检查(CRC检查)、带有比较的冗余贮存器、静态贮存器测试、走块式贮存器测试、字保护。
1.阿伯拉翰测试
阿伯拉翰测试是由美国学者Jacob A Abraham提出的一种可变贮存器(RAM)测试方法,可识别可变贮存器所有贮存单元的黏着性故障和耦合故障。
在阿伯拉翰测试中,执行整个贮存器测试需要的操作次数约为30 n 次,其中 n 是贮存器中贮存单元的数目。当贮存器的贮存单元较多时,完成对整个贮存器的测试需要花费很长的时间。若在软件控制器中一次性完成整个贮存器的测试,则可能会耽误控制器的正常控制功能而不能实现。这样的一次性完整测试是不合适的,可采取的措施是将整个贮存器划分成若干片段,在软件控制器的运行周期中划分时间段,对贮存器的不同片段进行测试,进而在控制器的多个运行周期内完成对整个贮存器的测试。各运行周期中划分的时间段的长度要以不影响控制器正常工作为准,这样,在控制器正常控制功能实现的同时,在多个时间间隙内完成了对可变贮存器的阿伯拉翰测试。
2.GALPAT贮存测试和穿透式GALPAT测试
GALPAT贮存测试是一种可变贮存器测试方法,目标是检测静态位错误和动态耦合。
在可变贮存器的GALPAT测试中,选择的贮存范围首先被统一初始化(如都初始化成0或1);然后将要测试的第一个贮存单元反转,检查该贮存单元及所有其他单元,以保证它们的内容正确。在每次读取现有的单元中的一个时,同样要检查被反转的单元。在选取的贮存范围内对每个单元都重复这个过程。在第二次开始运行时,使用相反的初始化,如果出现了一个差异,则会产生一个错误信息。
GALPAT贮存测试算法的实现过程:①对被测贮存区域的所有单元全部写0;②从最低地址单元开始读取单元内容,若校验通过(读取内容为0),则对该地址单元写1,同时对其余所有单元进行读取并校验,校验通过后地址加1,对下一单元进行相同的操作,重复至最高地址;③从最高地址读取单元内容,若校验通过(读取内容为1),则对该地址单元写0,同时对其余所有单元进行读取并校验,校验通过后,地址减1,对下一单元进行相同的操作,重复至最低地址。
GALPAT贮存测试是对整个可变贮存器的测试,其时间复杂度为 n 2 ( n 为贮存器贮存单元的数量),当贮存器较大时,需要花费很长的时间,导致软件控制器的开销较大,可能会影响控制器常规控制功能的实现。穿透式GALPAT测试方法就可以解决这个问题,其设计思想是把贮存器划分成若干区段,在不同的时间段内测试每个区段,这样可以在软件控制器的每个循环周期的空余时间完成对一个区段的测试。
穿透式GALPAT测试是GALPAT贮存测试的变体,并不初始化选取的贮存范围内的所有单元,而是保持现有的内容不做改变,并形成代表现有内容的签名进行保存。例如,首先选定将要测试的贮存范围,计算所有在范围内的现存单元的S1签名并将其贮存;然后将在范围内的所有单元进行反转且重新计算所有在范围内的现存单元的S2签名,将S1和S2进行比较。检测中的单元被再次反转,以重新建立原始内容,并且所有的现存单元的S3签名都被重新计算并与S1进行比较,如果出现了差异,则会产生一个错误信息。可选范围内的所有贮存单元以相同的方式进行测试。穿透式GALPAT测试可以识别所有静态位错误及贮存单元间界面的错误。
从本质上来说,可变贮存器测试算法有一个共同的特征,即首先将某一贮存单元写入某一数值,然后从该单元读取数值并与之前写入的数值进行比较,若两个值相同,则这一贮存单元通过测试;若不相同,则表示这一贮存单元有故障。对于可变贮存器测试的多种算法,它们的主要区别在于贮存器地址的存取顺序及写入检验的数值有差异。
3.修改的检查和、多重检查和
检查和是可用于检测数据中可能产生的错误的一种技术。被检测的数据可以是通信数据,检测通信传输的数据是否在传输过程中被篡改;也可以是贮存器中贮存的数据,贮存器可以是只读贮存器或随机存取贮存器,可检测贮存器中的数据经过一定时间的贮存后,是否与原始数据不一致,进而检验贮存器是否存在故障。
修改的检查和是指将多个字累加求和并将结果贮存在一个单字中(若数据溢出,则是指将溢出部分丢弃所得到的单字)。在贮存器中,可将多个数据字和其计算得到的检查和一起贮存到贮存器中,在贮存器自检过程中,可读取这多个数据字并使用相同的计算方法计算出检查和,并与贮存器中贮存的检查和相比较,若相等,则说明贮存器正常;否则说明贮存器有故障。使用修改的检查和可识别所有的奇错误(奇数个数据位错误)和部分偶错误(偶数个数据位错误)。
多重检查和与修改的检查和类似,将待测贮存区域的所有数据计算出一个检查和并贮存在一个独立的字节串中。在贮存器自检过程中,使用相同的算法计算出贮存区域中所有数据的检查和并与之前贮存的检查和相比较,进而判断贮存区域是否存在故障。同样的道理,使用多重检查和可识别所有的奇错误和部分偶错误。
修改的检查和与多重检查和的计算方法、比较方法是一致的,区别在于,将待测贮存区域的所有数据计算出一个检查和,对这个检查和进行完整的保存和比较的是多重检查和,而将这个检查和只截取最后16位进行保存和比较的是修改的检查和。
4.循环冗余检查(CRC检查)
CRC检查又称为CRC校验。它是一类重要的线性分组码,其编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。CRC校验是利用除法及余数的原理来做错误侦测的。在通信领域的实际应用中,发送装置计算出数据的CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC值并与收到的CRC值相比较,若两个CRC值不同,则说明数据通信出现错误。同样,在贮存器的故障检测中,可计算所存数据的CRC值并随数据一同贮存在贮存器中,在从贮存器读取数据时,还使用同样的计算方法计算数据的CRC值并与贮存的CRC值进行比较,以识别所存数据是否被篡改,同时可检验贮存器是否存在故障。
CRC校验存在多种计算方法,单字CRC校验也被称为16位CRC校验,双字CRC校验也被称为32位CRC校验,它们是计算CRC校验的两种重要算法。16位CRC校验可识别所有1位错误和大部分多位错误,32位CRC校验比16位CRC校验在识别1位错误和多位错误上的能力更强。
5.带有比较的冗余贮存器
带有比较的冗余贮存器是指将与安全相关的重要数据按不同的格式分别贮存在不同的两个贮存区域,以便将两个贮存区域的数据进行比较,进而识别数据中的错误,进行数据错误控制。在实际应用中,可读取两个贮存区域的数据并进行比较,若数据不同,则说明存在数据错误,不可采信和使用;若数据相同,则说明数据没有错误,可以采信和使用,进而保证安全相关功能的正确实现。
6.静态贮存器测试
静态贮存器测试是用于检测静态误差的故障/差错控制技术。静态贮存器测试的常用算法有方格算法和进程算法,分别称为方格贮存器测试和进程贮存器测试。
方格算法又称为棋盘算法。方格算法的测试过程是对每一个贮存单元赋值,使得每一个贮存单元与其紧相邻的各个贮存单元的值都不同;完成写入后,呈现出的结果是类似国际象棋棋盘的特殊格式。方格算法可以检测贮存器的黏着性故障和贮存器相邻贮存单元的桥接故障。
如图1.3所示,首先把整个贮存阵列分为a、b两部分,然后采用如下过程对a、b进行读写。
(1)对分块a(b)中的单元写0(1)。
(2)读所有单元。
(3)对分块a(b)中的单元写1(0)。
(4)读所有单元。
图1.3 棋盘
对于如图1.3所示的4×4的棋盘,方格算法的执行方式如下。
(1)从起始位置开始,按照地址递增的顺序,第一行写入“0101”序列,第二行写入“1010”序列,第三行写入“0101”序列,第四行写入“1010”序列,形成相邻单元的值都不相同的棋盘格。
(2)从起始位置开始,按照地址递增的顺序,读出第一行的值“0101”序列,读出第二行的值“1010”序列,读出第三行的值“0101”序列,读出第四行的值“1010”序列。读出的值应该与写入的值相同,如果有不同,则认为发生了故障。
(3)从起始位置开始,按照地址递增的顺序,第一行写入“1010”序列,第二行写入“0101”序列,第三行写入“1010”序列,第四行写入“0101”序列,形成相邻贮存单元的值都不相同的棋盘格,这一步完成后,与第(1)步完成后形成的棋盘格完全相反。
(4)从起始位置开始,按照地址递增的顺序,读出第一行的值“1010”序列,读出第二行的值“0101”序列,读出第三行的值“1010”序列,读出第四行的值“0101”序列。读出的值应该与写入的值相同,如果有不同,则认为发生了故障。
进程算法是对贮存器的每个贮存单元依次进行检验的一种方法,从第一个贮存单元开始,逐个对每个贮存单元进行取反和检验,直到最后一个贮存单元的检测结束,完成一遍扫描。整个过程就像所有贮存单元一起向前走步一样,因此又称为“齐步法”。
进程算法的计算流程如下。
(1)将贮存器的所有贮存单元全部写入0,首先从最低贮存单元地址A 0 开始进行读0、写1、读1操作,并检验读出结果;然后按地址由低到高的顺序依次选下一个贮存单元重复该操作(读0、写1、读1),直到贮存单元A n -1 重复完。
(2)对全部贮存单元进行正向扫描,读出全部贮存单元中的数据,并校验读出结果(应该全为1)。
(3)从最高贮存单元地址A n -1 开始进行读1、写0、读0操作,并检验读出结果。
(4)按地址由高到低的顺序依次选下一贮存单元重复该操作(读1、写0、读0),直到贮存单元A 0 重复完。
用进程算法检测贮存区域,可使每个贮存单元都被访问,既能保证每个贮存单元都能贮存“1”和“0”数据,又能保证每个贮存单元都受到周围其他贮存单元的读“1”、读“0”和写“1”、写“0”的影响,因此,这种方法用来检验多重地址选择与译码器的故障,并且可以检测写入时噪声对贮存芯片特性的影响。它能保证正确的地址译码和每个贮存单元贮存“1”和“0”信息的能力。简言之,进程算法可用于检测全部的黏着性故障、地址译码故障和转换故障。
7.走块式贮存器测试
走块式贮存器测试算法是一种贮存器故障/错误控制算法,可检查贮存器的所有地址解码错误和所有一位错误。
走块式贮存器测试算法的流程如下。
(1)先对所有贮存单元写0,并读取所有贮存单元;其次对第一个贮存单元写1,读取所有贮存单元并检验正确性,读完之后把第一个贮存单元写回0;然后对第二个贮存单元写1,读取所有贮存单元并检验正确性,读完之后把第二个贮存单元写回0,继续用1走遍整个贮存单元。
(2)对所有贮存单元全写1,以上述方式用0走遍整个贮存单元。
8.字保护
字保护包括带有多位冗余的字保护和带有一位冗余的字保护。
带有多位冗余的字保护是对贮存区域的每个字产生多位冗余数据(多个bit位)并随该字一起贮存在贮存器中的错误控制措施。在读每个字时,都要进行奇偶校验。汉明码就是带有多位冗余的字保护的一种编码方法,可识别所有的一位和二位错误,以及一些三位或多位错误。
带有一位冗余的字保护是对贮存区域的每个字产生一位冗余数据(一个bit位)并随该字一起贮存在贮存器中的错误控制措施。在读每个字时,都要进行奇偶校验。奇检查和偶校验就是带有一位冗余的字保护的编码方法,可以识别所有的奇数位错误。