一种高可靠性单片机冗余系统设计
- 格式:doc
- 大小:47.00 KB
- 文档页数:7
单片机系统可靠性设计技术摘要:要使单片机系统能够可靠的运行,单片机系统的可靠性设计就必不可少了。
本文提出单片机系统运行可靠性设计的思想,并分别从软件和硬件两个方面,深入研究了单片机系统可靠性设计的实现方法。
关键词:单片机系统;可靠性设计;硬件设计;软件设计中图分类号:TP202.1 文献标识码:A文章编号:1007-9599 (2011) 10-0000-01MCU System Reliability Design TechniquesTang Xu(School of Electrical Engineering,Northwest University for Nationalities,Lanzhou730030,China)Abstract:For reliable operation of t the MCU system,the reliability design of the MCU system is essential.It proposed the MCU system’s reliability design ideas,and from hardware and software’s design,study the solutions of the MCU system’s reliability design.Keywords:MCU system;Reliability design;Hardware and software design;Software design经过多年的探索,科研人员在单片机系统可靠性设计方面的研究已经成果丰富,有一些可靠的可靠性设计技术已经广泛应用到了单片机系统中了。
然而,目前的单片机系统的可靠性设计方法还满足不了用户日益增长的需要,在一些新的应用领域显得特别明显,单片机系统的可靠性还需要进一步提高。
本文针对单片机系统在石油测井行业中工作的恶劣的环境,更进一步的对单片机系统的运行可靠性设计展开深入论述和讨论。
嵌入式系统处理器、存储器存在受电磁干扰影响正常启动,系统可用性低问题。
本文从软件方面着手设计一套冗余方案,在不添加硬件成本的提前下提高系统可用性。
方案涉及看门狗保护启动阶段技术、U-Boot防串口干扰技术、U-Boot校验内核完整性和匹配技术、冗余双内核倒换技术、文件系统分区管理技术。
最后从多方面测试本方案的有效性,具有不错的应用前景。
1.引言嵌入式产品由于处理器、存储抗干扰能力不强,在高、低温下工作不稳定也可导致处理器跑飞。
业界嵌入式系统抗干扰和可靠性设计包括看门狗、指令冗余、数据校验、数模信号过滤(赵坤鹏,不依赖人重启。
看门狗定时器(Watchdog Timer )是一个电子定时器,用于监测计算机故障并从中恢复,在正常运行期间,计算机重置看门狗定时器以防止它超时,俗称“喂狗”,如果由于硬件故障、程序错误,计算机无法重置看门狗,定时器产生超时信号,信号通常使计算机重启(罗丹,王会燃,基于9263的嵌入式测控系统看门狗技术研究:软件导刊,2015;王彬,李文新,李得天,刘礼,通过看门狗软件设计提高抗干扰能力的方法:计算机技术与发展,2012)。
本设计中也采用看门狗监测系统故障:U-Boot 启动后立即打开看门狗,设置2s 看门狗超时,要求U-Boot 在这2s 内完成将内核从存储设备载入内存;若处于U-Boot 命令模式则设置60s 看门狗超时,一种嵌入式系统高可用冗余方案桂林聚联科技有限公司 蔡爱华 吴梦龙 阳 韬图1 存储器分区吴龙胜,马徐瀚,等.一种基于矩阵的并行CRC 校验算法:电子设计工程,2017;伍伟杰,嵌入式系统软件可靠性和抗干扰技术:电子产品可靠性与环境试验,2006)。
本文提供一种系统组织方案保障系统可靠性、可恢复性,可绕过有缺陷的内核,应用程序丢失可升级。
本系统由看门狗和5个存储分区组成,5分区分别存储U-Boot 、第一内核、第二内核、只读文件系统第一分区、可读写文件系统第二分区,如图1所示。
提高单片机系统可靠性的研究随着现代科技的迅速发展,越来越多的电子设备被广泛应用。
其中,单片机作为嵌入式系统的核心控制部分,扮演着非常重要的角色。
然而,在实际使用过程中,单片机系统不可避免的会遇到一些故障和问题,影响设备的正常运行。
因此,提高单片机系统可靠性是必不可少的课题。
一、设计方案的合理性为了提高单片机系统的可靠性,首先应该从设计方案入手。
设计方案的合理性会直接影响系统运行的稳定性,因此在设计过程中应该根据使用环境和特殊要求,充分考虑硬件、软件以及供电等方面的问题,尽可能减小故障出现的概率。
二、优化系统架构单片机系统中各组件的运行是互相关联的,因此系统架构对系统的可靠性也有很大的影响。
优化系统架构可以使其更加简洁、稳定,从而减少故障的出现。
典型的优化措施包括:分离原件,隔离干扰,提高噪声抗干扰能力等。
三、加强供电保护供电是单片机系统正常运行所必需的,而供电故障是导致系统故障的主要原因之一。
为了加强单片机系统的供电保护,可以从供电线路的设计和校验等方面入手,采用多种保护设计,如过电流保护、电流限制等,从而保证系统运行的可靠性和稳定性。
四、充分测试和检测在单片机系统设计完成之后,为了确保其可靠性和稳定性,充分测试和检测是必不可少的环节。
测试和检测的目的在于验证系统的稳定性、可靠性和兼容性等方面,发现并修复潜在的问题。
因此,在测试和检测过程中,应该针对不同的因素进行细致的检测和测试,保证系统的可靠性、稳定性和兼容性。
综上所述,提高单片机系统的可靠性是非常重要的课题。
通过合理的设计方案、优化系统架构、加强供电保护和充分测试和检测等措施,可以有效地提升单片机系统的可靠性和稳定性,为实际应用提供更加稳定可靠的保障。
高可靠性计算系统的设计与实现随着计算机在各行各业中的广泛应用,对计算系统可靠性的要求越来越高。
无论是金融交易系统、航空航天系统还是核能设施控制系统,高可靠性都是设计和实现过程中必须考虑的重要因素之一。
本文将从设计方面和实现方面分别介绍高可靠性计算系统的相关内容。
一、设计方面1. 高可靠性设计原则在设计高可靠性计算系统时,需要遵循一些基本原则。
首先,系统设计应具备可靠性分析,即对系统进行全面的可靠性评估,准确地估算各个组件的可靠性指标。
其次,设计应考虑到容错和冗余。
通过采用冗余组件,如冗余硬件、冗余电源等,可以提高系统的可靠性。
此外,合理的容错措施,如数据备份和恢复机制,也是实现高可靠性的关键。
最后,设计中需要充分考虑系统的可维护性。
设计良好的系统应具备易于维护,快速修复故障的特点。
2. 容错和冗余技术容错和冗余技术是实现高可靠性计算系统的重要手段之一。
容错技术主要包括硬件容错和软件容错。
硬件容错通过采用冗余组件和监测机制,利用硬件资源互相备份和监控,使系统在发生故障时能够自动转换到备用组件。
软件容错主要通过采用软件冗余和错误检测修复技术,提高系统的可靠性和稳定性。
冗余技术是指通过增加冗余组件来提高系统的可靠性。
主要有硬件冗余和数据冗余两种形式。
硬件冗余包括冗余硬件、冗余电源等,通过备份硬件资源,确保系统在硬件故障时能够继续工作。
数据冗余主要包括数据备份和数据镜像等技术,通过存储数据的多个副本,保证数据在发生故障时不会丢失。
3. 容错和冗余的选择在设计过程中,需要根据系统的性质和需求选择适合的容错和冗余技术。
首先,需要评估系统的关键部分,确定容错和冗余的重点。
其次,需要考虑系统的可用性和性能之间的平衡。
对于性能要求较高的系统,可能需要采用更多的冗余组件来满足可靠性需求。
最后,还需要考虑成本因素,毕竟增加冗余组件和容错技术会带来额外的成本。
二、实现方面1. 软件实现实现高可靠性计算系统的软件层面主要包括系统架构的设计和研发过程中的质量保证。
《工业控制计算机》2012年第25卷第6期在工业控制、航空航天、武器系统等领域中,为了提高系统的可靠性,双机冗余容错技术得到了普遍的应用和发展。
本文根据冗余系统设计的原则,以实现冗余的关键技术(主备切换、心跳检测、数据同步、故障检测等)为出发点,提出了一种基于Cortex-M3的冗余系统设计方案,分别从硬件和软件两个方面进行了设计。
1Cortex-M3介绍STM32F103微控制器采用ARM 公司最新的Cortex-M3处理器。
该处理器是一个低功耗的处理器,具有门数少,中断延迟小,调试容易等特点。
它是为功耗和价格敏感的应用领域专门设计的、具有较高性能的处理器。
它采用了ARMv7-M 体系结构,是一个可综合的、高度可配置的处理器。
它包含了一个高效的哈佛结构三级流水线,可提供1.25DMIPS /MHz 的性能。
为降低成本,Cortex-M3处理器采用了与系统部件紧耦合的实现方法,来缩小芯片的面积,其内核面积比现有的三级流水线内核缩小了30%。
Cortex-M3处理器实现了Thumb-2指令集架构,具有很高的代码密度,可降低存储器要求,并能达到非常接近32位ARM 指令集的性能。
2系统的硬件设计传统的1:1冗余设计中都有一个额外的仲裁电路,这不仅会给系统带来一些不稳定的因素,而且会大大增加系统的成本,当仲裁电路出现故障的时候整个系统可能就会陷入瘫痪。
本系统不含仲裁电路,总体设计方案如图1所示。
主控制器和备用控制器是两个硬件设计完全相同的模块,使用STM32F103微控制器。
使用两个串口分别用于传输心跳信息和数据同步。
串口USART1周期性的传输主/备控制器的心跳信号用于故障检测(USART1_RX 用于发送,USART1_TX 用于接收)。
使用串口USART2和Modbus 协议实现双机之间的信息传输与同步。
Modbus 协议是应用于电子控制器上的一种通用语言,属于应用层传输报文协议,通过此协议,控制器之间、控制器经由网络、串口或其它连接设备之间可以通信。
一种高可靠性、高密度的冗余电源设计及实现张泽宇;孟得东;马继坤;葛启帧【摘要】介绍了一种高可靠性、高密度的冗余电源系统的设计.采用VICOR公司的高密度、高可靠性砖型电源模块完成冗余电源系统的设计,可将船舶上AC220 V、DC220 V、DC24 V等不同类型输入电源转换成设备所需的24 V电源,同时可监测电源的实时状态,具有高密度、高可靠性、智能化的特点.【期刊名称】《船电技术》【年(卷),期】2015(035)008【总页数】4页(P22-25)【关键词】冗余电源;VICOR;STM32【作者】张泽宇;孟得东;马继坤;葛启帧【作者单位】武汉船用电力推进装置研究所,武汉430064;武汉船用电力推进装置研究所,武汉430064;中国水产科学研究院黄海水产研究所,山东青岛266071;武汉船用电力推进装置研究所,武汉430064【正文语种】中文【中图分类】TP274随着船舶电气化的发展,对电源系统的要求越来越高,本文设计了一种高可靠性冗余电源,该电源系统主要完成对输入电源的电源滤波、电气隔离及电压转换,为负载设备提供工作所需的电源。
该系统具有AC220 V、DC220 V及DC24 V电源输入接口,当输入电源失电时,能够自动启动备用电池供电至少2 h。
电源管理及转换模块系统可实现电源输入不断电切换,保证设备供电的连续性,可监测电源装置输入输出端故障,并附带两路CAN通讯接口,可与其他监控设备通讯。
该电源装置具有智能化、安全可靠的优点。
电源系统由蓄电池、电源模块、控制模块构成。
系统框图如图1所示。
电源系统通过电源模块完成主用电(AC220 V,DC175~320 V)和备用电(DC24 V)的电源转换,电源系统可实现电源输入不断电切换,保证设备供电的连续性。
为保证控制模块的不断电工作,控制模块从电源模块输出端取电。
控制模块可对设备状态进行实时监控,监控电源系统中的故障信息,并将相关信息通过CAN总线传输给船舶的监控系统,同时船舶的监控系统也可以通过CAN总线向控制模块发送关机指令,切断系统的工作。
单片机多级通信系统的可靠性和容错性研究在单片机多级通信系统中,可靠性和容错性是设计和开发过程中必须考虑的重要因素。
本文将对单片机多级通信系统的可靠性和容错性进行研究,探讨如何提高系统的稳定性、可靠性和容错性。
一、可靠性的研究1. 合理的硬件设计:在设计单片机多级通信系统时,应采用高质量的电子元件和先进的硬件设计技术。
合理规划电路板布局,避免电磁干扰和同轴交叉。
2. 多级通信协议的选择:选择适合系统的多级通信协议是确保通信的可靠性的关键。
常用的通信协议如SPI、I2C、UART等,根据系统的需求选择合适的协议。
3. 错误检测和纠正:引入差错校验码来检测和纠正通信中的错误,如CRC等常用的校验方法。
在数据传输过程中,对发送的数据进行校验,确保数据的准确性。
4. 数据重传机制:在通信过程中,当出现数据传输错误时,应设置数据重传机制,及时重新发送丢失或错误的数据包,确保数据的完整性。
5. 时钟同步:在多级通信系统中,各个节点的时钟同步非常重要,可以采用时间戳、握手协议等方式实现时钟同步,保证数据的同步性和正确性。
二、容错性的研究1. 异常处理:在程序设计阶段,应考虑各种可能的异常情况,设计相应的异常处理机制。
当系统出现异常时,能够及时响应并采取相应措施,保证系统的正常运行。
2. 数据备份和冗余:使用数据备份和冗余技术,将关键数据存储在多个地方,当一个地方的数据出现问题时,可以及时从备份中恢复数据,确保系统的连续性。
3. 系统自检和自修复:在系统启动时,进行自检机制,检测硬件和软件的状态。
当检测到问题时,系统能够自动修复或提醒用户进行相应操作,减少故障发生的概率。
4. 容错算法的设计:通过设计容错算法,即使在部分节点失效的情况下,系统仍能正常运行。
例如,冗余节点、故障切换等方式来提高系统的容错性。
5. 灾难恢复机制:在遇到灾难性故障时,系统能够及时恢复并继续运行。
采用备份、镜像、异地存储等方式来保证系统的连续性和安全性。
一种基于Flash型FPGA的高可靠系统设计摘要:本文以星载测控系统为背景,提出了一种基于Actel Flash FPGA 的高可靠设计方案。
采用不易发生单粒子翻转的flash FPGA 芯片,结合FPGA 内部的改进型三模冗余、分区设计和降级重构,实现了高实时、高可靠的系统。
2 引言在复杂的空间环境中存在各种高能粒子和宇宙射线,星载系统的电子器件容易发生单粒子翻转等错误,造成整个系统的崩溃。
对于星载系统而言,可靠性是非常重要的一项性能指标。
在系统研制时,必须保证系统在局部出现故障时屏蔽和容忍错误,把错误造成的损失降到昀低。
比较常用的可靠性措施包括选用抗扰等级高的元器件和适当的屏蔽设计等,但是这些措施都无法绝对预防永久性故障的发生,为了满足卫星可靠性的要求必须进行冗余设计。
本文中的设计就采用Flash 型FPGA 取代了SRAM 型FPGA,前者在结构上的特点决定了它不容易发生单粒子翻转等错误,从而在固件上提高了可靠性。
同时采用了改进型的TMR 冗余设计,在保障可靠性的同时也兼顾了实时性。
3 基本思想和系统实现3.1 Flash 型FPGA 概述目前广泛用于电子产品的FPGA(Field-Programmable Gate Array,现场可编程门阵列)主要有反熔丝型、SRAM 型和Flash 型三种。
反熔丝型FPGA 利用熔丝点的通断来存储编程信息,只能烧写一次,可靠性很高,但是同时开发成本也很高,一般只在成熟正品中使用。
SRAM 型FPGA 使用非常广泛,它的可编程单元是六管结构,编程信息是保存在附加的PROM 里的,每次上电时从PROM 中加载到FPGA 中,断电后编程内容消失。
在航天应用中,SRAM 型FPGA 昀大的缺点是容易发生单粒子。
一种高可靠性单片机冗余系统设计 http://tech.ddvip.com 2008年10月31日 社区交流 Excel服务器-用Excel做管理系统 关键字: 巡检仪 烟雾报警器 电子血压计 环境质量监控 验电器
本文扼要分析了带专用检测转换电路的单片机双机冗余系统存在的可靠性问题,提出了利用单片机串行口替换专用检测转换电路,通过串行通信相互检测主备机工作状态,由软件完成备机切换成主机的设计思想,并给出了此类系统的软件模板。
1 冗余系统的硬件结构 冗余技术是计算机系统可靠性设计中常采用的一种技术,是提高计算机系统可靠性的最有效方法之一。本文重点介绍一种高效、实用的单片机冗余系统设计技术。
在进行冗余系统设计之前,要综合考虑系统的可靠性要求和合理的价格两方面,确定采用元器件冗余还是采用全系统冗余。对于一类要求连续不间断工作的对可靠性有特殊要求的单片机小型应用系统,由于系统的成本不是主要的设计考虑因素,因此,采用包括单片机、扩展电路、电源和外设双备份的全系统冗余,不但可简化设计方案,还可大大地提高应用系统的可靠性。这种冗余系统具有如下图所示的典型硬件结构。
图 在上图所示的系统中,U1和U2单元的软硬件结构完全相同。如有必要,在设计各单元时,通过采用自诊断技术,软件陷阱或Watch dog等系统自行恢复措施可使单元可靠性达到最大限度的提高。系统正常运行时,U1和U2中的一个单元处于正常工作状态(把该单元称为主机),完成应用功能,而另一个单元(备机)处于等待备用状态。当检测转换电路检测到主机不能正常工作时,自动启动备机进入正常运行状态,完成应用功能。此时,可对故障单元进行脱线维护,在排除其故障后,可使其联机进入等待备用状态。显然,这种冗余系统已大大提高了应用系统的可靠性,并基本保证了应用系统的不间断运行。但仔细分析,就会发现存在以下不足之处:
. 系统存在可靠性瓶颈,当检测转换电路自身出现故障时,不能监视主备机状态,也无法完成主备机自动切换功能;
. 对于某些冗余系统,当备机需要实时保留主机的数据备份时,检测转换电路无法完成主备机之间的数据通信功能;
. 由于需要设计检测转换电路,系统设计和实现复杂,引入了附加的不可靠因素。 2 改进设计方案 针对上图所示的双机冗余系统结构和缺点,笔者实现了一个简单高效、具有更高可靠性和主备机数据通信功能的改进设计方案。其基本设计思想是:不改变上述冗余系统的基本结构,但完全去掉专用的检测转换电路,利用主备机双方的串行口和软件相结合的方法,实现检测转换电路的功能和主备机之间的数据通信功能。在此改进的设计方案中,主备单元的硬件和软件结构完全相同,各单元的主备工作状态由上电顺序确定,先上电的一方自动进入主机工作状态,后上电者则进入备机状态。主机在其工作过程中除实现应用功能外,定期向备机发送反映其工作正常的状态数据,当需要备份的数据发生变化时,主机及时向备机发送已更新的数据。此外,主机也定期接收来自备机的状态数据,当发生接收超时时,主机认为备机已发生故障,并通过本单元的显示装置向用户给出通知信号,以便及时对备机进行脱线维护。备机在其工作过程中不完成应用功能,但定期接收来自主机的状态数据,当发生接收超时时,备机认为主机已发生故障,自动切换进入主机工作状态,并通过本单元显示装置通知用户,以便对原主机单元进行脱线维护。此外,备机还自动接收来自主机的备份数据并进行存储备份。
3 软件模板 下面的软件模板给出了笔者已实现的单片机双机冗余系统的软件框架,和应用系统实现密切相关的部分用自然语言简单描述,其余部分为C51源代码,因此,这一软件模板很容易移植到相似结构的冗余系统中。
该软件模板以89C52为单片机对象进行程序设计,使用12MHz的时钟频率。常量OK,REQ,ACK和NACK分别表示主备机工作状态正常,备份数据发送请求,肯定应答和否定应答信息的字符常量,MAIN,STANDBY分别是表示工作单元为主机或备机的常量标志。全局变量timeout用于设定以毫秒为单位的超时间隔,而Update,CpuStatus和Failure分别是表示备份数据是否更新,主备机状态和主备机是否发生故障的标志位变量。
定时器0编程为工作方式1,产生每隔1ms的定时中断,每次中断将全局变量timeout的值减1,减到0时即关闭定时器0。所有需要软件超时机制或延时功能的程序模块都可在设定timeout的值后开启定时器0,并通过判断该变量的值是否为零而实现定时功能。定时器1编程为工作方式2,用作串行口波特率发生器,波特率编程为15.625K。
定时器2工作于自动重装的定时方式,产生每隔50ms的定时中断。每次中断,主备单元的中断服务程序都向对方单元发送表示自身工作状态正常的OK字符,同时也接收对方单元发送的OK字符,若连续三次中断都未能成功接收,则本单元认为对方单元出了故障,并将表示对方单元工作状态的全局变量Failure置为常量Yes,否则,置为No;若为备机,还将表示主备身份的标志变量CpuStatus的值置为 Main,从而为备机程序切换和给出原主机故障提示设置判断标志。若备机在中断服务程序中接收到字符REQ,则置表示备份数据是否更新的标志变量 Update为Yes,并立即退出中断服务程序,以便主程序及时接收备份数据帧。
主函数在完成应用系统的公共初始化和单片机硬件初始化后,主备单元的定时器2在后台产生定时中断并通过串行通信进行相互检测,由于规定两个单元的上电时间间隔大于500ms,因此,利用中断服务程序的检测结果必能自动确定初始的主备身份。主函数延时500ms后,即根据当前的主备身份自动进入主机的前台监控例程或备机的前台监控例程。主机的前台监控例程除完成应用功能外,当应用功能改变了需要备份的数据时,则调用send—frame函数关闭定时器2的中断并发送备份数据帧。 当备机的前台监控例程判断出需要接收备份数据时,调用receive—frame函数关闭定时器2的中断并接收备份数据帧。当备机的前台监控例程监视到主机故障时,备机的前台监控循环自动切换进入主机的前台监控循环。主函数中的监控切换代码较难理解,应结合并发执行的定时器2的中断服务程序一起分析。
函数send—char和receive—char通过串行口直接发送和接受单个字符。函数send—frame和receive—frame分别发送和接受备份数据帧,它们具有将备份数据装帧和拆帧、循环冗余CRC效验和超时处理功能,在帧的发送和接受过程中均关闭定时器2,以免产生通信干扰,通信成功时返回1,否则返回0。delay为以毫秒数为调用参数的延时函数。函数crc—gen和crc—chk分别生成和效验CRC。
限于篇幅,本文仅给出完成检测切换功能的主函数和定时器2的中断服务函数,以及相关数据的代码,其它函数仅给出函数原型。代码如下:
#include #include enum { OK=0xFF,REQ=0xAA,ACK=0xF0,NACK=0x0F,MAIN=0,STANDBY=1,NO=0,YES=1 } unsigned int data timeout; unsigned char bdata base=0; sbit Update=base^0,CpuStatus=base^1,sbit Failure=base^2; void delay(unsigned int time),send—char(unsigned char ch); unsigned short crc—gen(unsigned char *databuf,short len); unsigned short crc—chk(unsigned char *databuf,short len); unsigned char * receive—char(unsigned char * ch); unsigned char send—frame(void),receive—frame(void); main() { 和应用系统相关的公共初始化程序段; Update=NO;Failure=YES;TCON=T2CON=PSW=PCON=0x00;IP=0x20;IE=0xA2; SCON=0x50;TMOD=0x21;TL0=64536&0x00ff;TH0=64536>>8;TH1=TL1=0xfe;TL2=RCAP2L=15536&0x00ff;TH2=RCAP2H=15536>>8; TR1=TR2=1;/* 启动定时器1产生串行口波特率,启动定时器2在后台进行通信检测 */ delay(500);/* 等待与对方建立通信连接,通信由定时器2的中断例程完成 */ if (Failure==YES) /* 在定时器2的中断例程判断出初始主备状态后 */ { CpuStatus=MAIN;和应用系统实现相关的主机初始化程序段; while(1) /* 主机单元的前台例行监控循环 */ { 和应用系统实现相关的主机应用功能例程; if(应用例程修改了需要备份的数据) Update=YES; if((Update==YES)&&(Failure==NO)&&send—frame()) Update=NO; if(Failure==YES){ 给出备机故障通知信号;Update=YES;} }} else { CpuStatus=STANDBY;和应用系统实现相关的备机初始化程序段; while(1) /* 备机单元的前台例行监控循环 */ { if(CpuStatus==STANDBY) while(CpuStatus==STANDBY) /* 在备机状态中循环 */ { 和应用系统实现相关的备机例程; if ((Failure==NO)&&(Update==YES)&&receive—frame()) Update=NO;