当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]0 引 言高可靠性是现代军用电子设备和某些控制系统的首要需求。冗余技术是计算机系统可靠性设计中常采用的一种技术, 是提高计算机系统可靠性的最有效方法之一。合理的冗余

0 引 言

高可靠性是现代军用电子设备和某些控制系统的首要需求。冗余技术是计算机系统可靠性设计中常采用的一种技术, 是提高计算机系统可靠性的最有效方法之一。合理的冗余设计将大大提高系统的可靠性, 但同时也增加了系统的复杂度和设计的难度, 应用冗余配置的系统还增加了用户投资。因此, 如何对冗余设计进行合理有效的设计, 是值得深入研究的课题。

1:1 热冗余也就是所谓的双重化, 是其中一种有效的冗余方式, 但它并不是两个部件简单的并联运行,而是需要硬件、软件、通信等协同工作来实现。将互为冗余的两个部件构成一个有机的整体, 通常包括以下多个技术要点: 信息同步技术、故障检测技术、故障仲裁技术和切换技术、热插拔技术和故障隔离技术等。

本文将WDM 的定时器功能应用在冗余技术中,为系统的故障检测和切换技术提供了一种解决方案, 并以双冗余CAN 总线接口板为例测试本设计的可行性。

1 冗余技术

冗余技术有两种方式: 工作冗余和后备冗余。工作冗余是对关键设备以双重或三重的原则来重复配置, 这些设备同时处于工作运行状态, 工作过程中若某一台设备出现故障, 它会自动脱离系统, 但并不影响系统的正常工作。后备冗余方式是使一台设备投入运行, 另一台冗余设备处于热备用状态, 但不投入运行, 在线运行设备一旦出现故障, 后备设备立即投入运行。常用的冗余系统按其结构可分为并联系统、备用系统和表决系统三种。最简单的冗余设计是并联装置, 其他方法还有串并联或并串联混合装置和多数表决装置等。当某部分可靠性要求很高, 但目前的技术水平和方法很难满足时, 冗余技术可能成为惟一较好的设计方法。但是冗余设计往往使系统的体积、重量、费用和复杂度均相应增加。因此, 除了重要的关键设备, 对于一般产品不宜采用冗余技术。

冗余配置虽然增加系统的投资, 但它提高了整个用户系统的平均无故障时间( MTBF) , 缩短了平均故障修复时间( MT TR) 。因此, 在重要场合的控制系统中, 冗余技术的采用可有效提高系统的可靠性。

一个冗余系统要工作通常是硬件与软件的配合完成的。在硬件上需要有几个相同的, 可独立工作的设备。在软件上来说, 就是在实现系统功能的同时, 要有错误检测功能和动态切换功能, 并且要在尽可能短的时间内完成切换动作。下面以双CAN 总线接口卡为例,主要从软件方面详述本后备冗余设计的实现细节。

2 硬件设计

CAN 控制器采用Philips 的SJA1000, 工作于BasicCAN 模式或PeliCAN 模式下, PeliCAN 模式支持CAN 2. 0B 协议, 采用8 位地址/ 数据复用总线接口。

如图1 所示, PCI 总线双CAN 接口卡由2 片SJA1000 提供两路独立的CAN 接口, 每片芯片的8 位地址/ 数据总线和读写控制信号、锁存信号直接与PCI9052 相连。SJA1000 输出信号经过光耦到CAN 收发器PCA82C250, PCA82C250 供电电源为隔离电源,由隔离电源转换模块提供。CAN 总线的复位信号由FPGA 提供, CAN 控制器SJA1000 的中断信号输出到FPGA。

 


图1 CAN 冗余模块系统结构图

3 软件设计

3. 1 WDM 模式驱动程序

在Window s XP 操作系统中, 运行于用户模式的应用程序访问硬件资源是通过Win32 API 调用内核模式的驱动程序实现的。这种内核模式的驱动程序就是WDM(Window s Driver Model) 驱动程序, 它是微软在Window s XP 操作系统中提出的新的驱动程序模式, 支持即插即用、电源管理和I/ O 管理等功能。图2 是Window s XP 的系统结构。

如图2 所示设备驱动程序是操作系统的一个组成部分, 它由I/ O 管理器( I/ O Manager ) 管理和调动。

I/ O管理器每收到一个来自用户应用程序的请求就创建一个I/ O 请求包( IRP) 的数据结构, 并将其作为参数传递给驱动程序。驱动程序通过识别IRP 中的物理设备对象( PDO) 来区别是发送给哪一个设备。IRP 结构中存放请求的类型、用户缓冲区的首地址、用户请求数据的长度等信息。驱动程序处理完这个请求后, 在该结构中填入处理结果的有关信息, 调用IoCompleteRequest 将其返回给I/ O 管理器, 用户应用程序的请求随即返回。访问硬件时, 驱动程序通过调用硬件抽象层的函数实现。

 


图2 Windows XP 系统结构

WDM 的开发可采用DDK, DriverWorks 等开发工具。以下重点描述在此WDM 驱动实例中采用定时查询实现CAN 总线冗余功能。

3. 2 驱动冗余设计

本设计中, CAN 通路采用2 路冗余, 使得当一个CAN 总线接口出现故障时, 可以很方便地切换到另一个CAN 总线接口。

故障检测在定时器中实现。在DriverWorks 中有两种定时器对象, 即附属于设备对象的1 Hz 定时器和KTimedCallback 类定义的定时器, WDM 定时方法是通过它们实现的。KT imedCal lback 是KTimer 的派生类, KTimer 封装了系统定时器, 构成分发对象定时器类, 可用于同步目的。KT imedCal lback 类包含了系统延时过程调用( DPC) 对象, 当定时器超时后系统就调用DPC。KTimedCallback 的成员函数主要是Set 和SetPeriodic, Set 用于设置一次有效定时器参数, SetPeriodie 设置周期性定时器参数, Set 和SetPeriodic 在设置定时参数时同时启动定时器并建立与回调函数的关联,定时器超时后调用回调函数。

具体的切换工作放在DPC 中完成。DPC 为推迟过程调用, 一些操作不适合在ISR 中处理需放入限制较少的DPC 中, 如通知事件置标记等等。DPC 是一个通用机制, 但通常都用在中断处理中。在最普通的情况下, ISR 决定当前请求的完成并请求一个DPC。之后,内核在DISPATCH_LEVEL 级上调用这个DPC 例程。

因此DPC 中的代码要比ISR 中的代码有更少的限制。

特别是, DPC 例程可以调用像IoCompleteRequest 或Io StartNextPacket 这样的例程, 在一个I/ O 操作的结尾处调用这些例程在逻辑上是必要的。图3 描述了具体DPC 调用处理过程。[!--empirenews.page--]

 


图3 DPC 处理过程

冗余切换查询时间可以在设备属性中添加切换时间周期项, 通过修改设备属性的方式在线修改, 修改后设备管理器自动更新驱动。

在双CAN 冗余系统中, 较之硬件结构而言, 软件设计相对复杂得多, 其关键之处在于CAN 系统故障检测及CAN 系统自动切换。由于采用两套完全独立的传输介质、总线驱动器和总线控制器, 因此它们能分别独立检测到自己通道的故障, 比如CANH 与CANL 短路, CANH 或CANL 断开、CANH 与地短路、CANL 与电源短路、总线驱动器损坏等。实际调试中发现, 如果CANH 、CANL 断开或只有一个发送器在总线上, 均会造成发送/ 接收错误计数器不断增加到128, 使节点处于忽略错误态; 而CANH 与CANL 短路、CANH 与地短路或CAN L 与电源短路均会造成发送/ 接收错误计数器不断增加到256, 使节点处于总线脱离态。所以,通过节点状态改变中断子程序中调用CAN 冗余模块,可以达到实现上述故障自动检测及CAN 系统自动切换的目的。

3. 3 冗余测试

测试时采用一个有两个通道CAN 分析仪分别连接本CAN 板的A, B 通道上, 在从A 通道连续发送数据至分析仪的过程中, 手动断开此链接, 则备用通道B开始工作, 切换成功。对冗余切换时间的测试可以通过比较发送端和接收端间数据量的差值来判断。具体方法是在发送端以10 ms 为周期不停发送数据包, 正常情况下发送端的数据包数量与接收端的数据包数量是相等的。在切换动作时, 会有一些数据包被丢弃, 这时通过计算发送端与接收端数据包的差值乘以10 ms, 即为此次切换的切换时间。在本例中, 通过多次这样的测试, 得出平均切换时间在30 ms 左右, 完全能满足对计算机系统高可靠性的要求。

4 结 论

提出一种设备冗余的系统设计方法, 为系统的故障检测和切换技术提供了一种解决方案。利用此方法设计了双冗余CAN 总线板卡以及在Window s XP 系统下的WDM 驱动。该模块工作稳定, 数据传输可靠, 冗余切换切实可行。并可依据实际使用要求在线修改定时查询时间。这种冗余实现方法在提高设备可靠性方面具有一定的实用价值。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在嵌入式系统开发、调试和测试过程中,J-Link作为一种高效的调试工具,为开发者提供了极大的便利。然而,要想充分发挥J-Link的功能,首先需要正确安装其驱动程序。本文将详细介绍J-Link驱动的安装过程,并深入解析其中...

关键字: jlink 嵌入式系统 嵌入式开发

与谷歌的合作使 Nordic 能够在 nRF Connect SDK 中嵌入开发人员软件,以构建与安卓移动设备兼容的谷歌Find My Device和未知跟踪器警报服务

关键字: 谷歌 SoC 嵌入式开发

嵌入式开发作为当今电子工程和信息技术领域的核心分支,涵盖了广泛的软硬件技术和系统集成方法,用于构建高性能、低成本、低功耗、体积小巧且功能专一的嵌入式系统。这些系统无处不在,从微型传感器节点到复杂的工业控制设备,从日常使用...

关键字: 嵌入式开发 Python

嵌入式开发是当今信息技术领域不可或缺的一部分,它融合了硬件设计、软件开发和系统集成等多个学科,专门用于创建那些被嵌入到特定设备或系统中的专用计算机系统。嵌入式开发的主要过程包括利用分立元件或集成器件进行电路设计、结构设计...

关键字: 嵌入式开发 硬件设计 软件开发

嵌入式开发作为一种专业且技术密集型的领域,涵盖了从硬件底层驱动、中间件到应用层软件开发等多个层面的工作,其所需的工具种类繁多,各有针对性,旨在提升开发效率、保证代码质量以及简化调试过程。

关键字: 嵌入式开发 keil

嵌入式开发作为信息技术领域的重要分支,其涉及的语言种类繁多,各具特色。这些语言的选择取决于目标平台的特性、性能需求、开发者的熟练程度以及项目的具体要求。本文将详细介绍几种常见的嵌入式开发语言,包括C语言、C++、汇编语言...

关键字: 嵌入式开发 C语言

嵌入式开发是一项综合了硬件设计、软件编程以及系统整合的技术活动,其目的是为了创造出能够在特定环境中高效、稳定运行的嵌入式系统。这一流程涵盖了多个紧密关联且不可或缺的阶段,从最初的客户需求分析到最终的产品测试和交付,每个环...

关键字: 嵌入式开发 硬件设计

嵌入式开发作为一个融合了计算机软硬件和系统工程的综合性领域,其成功与否往往取决于三个核心要素的有效整合与协调。这三个要素分别是:硬件平台的选择与设计、软件开发及其优化、以及系统级的设计与集成。深入理解并熟练掌握这三个方面...

关键字: 嵌入式开发 ARM

嵌入式开发作为信息技术的关键支柱,在全球数字化转型浪潮中扮演着无可替代的角色。从传统的嵌入式微控制器到如今先进的片上系统(SoC),再到与云计算、人工智能深度融合的智能终端,嵌入式系统的演进与发展始终紧跟时代脉搏。本文将...

关键字: 嵌入式开发 智能应用

嵌入式开发是一种专门针对特定硬件平台设计和实现软件系统的工程实践,它涵盖了从需求分析、系统设计、编程实现、调试测试直到产品部署及维护的全过程。本文将深入探讨嵌入式开发的主要阶段,分解其流程并阐述每个步骤的关键要点,以便于...

关键字: 嵌入式开发 嵌入式软件
关闭
关闭