|
 
- UID
- 711
- 帖子
- 810
- 积分
- 2051
- 金钱
- 1646
- 阅读权限
- 70
|
1#
发表于 2008-11-12 14:47
| 只看该作者
用AT91 RM9200构建高可*嵌入式系统 摘要 提出一种基于AT91RM9200处理器的高可*双机温备解决方案。利用EPlC6、MAX6374设计两个冗余的外部Watchdog监控处理器系统的工作状态,利用AT91RM9200自带的Watchdog作为内部监测机制监控处理器本身的故障;设计并给出了以AT91RM9200为核心的监控机制的具体实现,包括心跳信号的发送和中断服务程序的设计。关键词 AT91RM9200 Watchdog双机客错系统 温备 高可*系统 本文设计了一种以AT91RM9200处理器为核心的高可*嵌入式系统。系统具有两台机组,当一台机组发生故障后,另一台机组接管工作并继续运行。系统提供外部和内部Watchdog(看门狗)监控机制构成一级冗余、两级监控的可*性设计方案。其中外部Watchdog分别采用MAX6374和以EPlC6 FPGA构建的监控电路,而内部Watchdog则利用AT91RM9200自带的Watchdog模块实现。本文分别从硬件和软件两个角度阐述系统的实现。 1 系统总体结构设计 1.1 AT91RM9200处理器 AT91RM9200是Atrnel公司生产的一款工业级ARM9处理器,内嵌ARM920T ARM Thumb处理器核,主频为180 MHz时性能可达200 MIPS,并内置16 KB SRAM和128 KB ROM。外部总线接口(EBI)支持SDRAM等存储器,带有7个外部巾断源,1个快速中断源和4个32位PIO控制器,最多支持122个可编程I/O端口。同时该芯片还内嵌Ethemet MAClO/100M接口,并提供USB 2.0全速主机端口与设备接口,以及其他常用的外部接口。 1.2 系统结构设计 为了提高可*性,本系统采用基于温备的系统级可*性设计方案。温备是在热备和冷备的基础上发展起来的一种双机容错技术,它是指两台机组同时加电,但只有主机处于工作状态,备机处于“温态”(空转等待接管主机工作的状态)。当主机发生故障时,由备机接替主机继续工作。故障机修复完毕后成为新的备机。与热备相比,温备方案具有实现简单、性能稳定等优点;相对于冷备方案,温备方案中的备机能够在主机故障后快速重启系统,从而最小化系统短时故障造成的损失。 系统具有两个处理器模块,每个处理器模块都以AT9lRM9200作为计算核心,称为“机组”。每台机组可以单独成为一个独立的子系统完成各项任务。系统还具有一块仲裁板,用于仲裁数据信号以及控制双机的工作方式。系统结构框图如图l所示。 screen.width-500)this.style.width=screen.width-500;"> 利用AT91RM9200自带的多种外设接口,每台机组中除了具备处理器模块之外,还带有以太网接口、USB接口(用于连接USB接口无线网卡)和RS232串行接口。利用网络通信的特有工作方式,每台机组上的有线网络接口连接到一个集线器,USB接几无线网卡工作于managed模式,因此网络接口信号不需要集中的仲裁输入/输出,系统只需仲裁板提供对串口输入/输出信号的仲裁。这种方式也为双机之间传递同步信息提供一种有效途径:运行于双机中的应用程序可以利用有线网络或无线网络传递同步信息,当主机发生故障后,备机中的用户程序可以从最近的同步点开始工作,从而最小化主机故障造成的损失。 仲裁板上的控制逻辑通过两台机组的控制信号接口获取各机组当前工作状态,从而判断当前系统的工作模式,并据此控制机组与外部设备的连接。控制逻辑还负责向两台机组提供当前系统的工作状况,以便为运行于机组中的应用程序提供决策参考。 1.3 系统可*性方案设计 为了提高整个系统的可*性,须根据温备的特点设计各种监控机制。本系统针对每一台机组均设有Watchdog电路用于监控机组运行。一旦某台机组发牛故障,经过一定时间后,故障机相应的Watchdog会检测到故障的出现,并通过向故障机组发送nReset信号复位故障机组,同时向另一台机组发送IRQ信号以通知接管工作。控制逻辑保持主机与外部设备的连接,一旦主机发生故障,控制逻辑将更改工作状态,接通新主机与外部设备的连接。 在系统中,采用内部和外部两级监控策略。内部监控方案利用AT91RM9200处理器内部Watchdog模块实现;外部监控方案则利用仲裁板中的EPlC6 FPGA和专用Watchdog芯片MAX6374实现。其中,MAX6374芯片是实现外部监控功能的主体。当MAX6374损坏时,则采用位于EP1C6内部利用硬件描述语言实现的Watchdog接管外部监控工作,从而构成冗余的外部监控机制。内部监控机制的优先级低于仲裁板上外部监控机制的优先级。如果仲裁板上的两个Watchdog均发生失效,因而不能重启CPU板时,AT9lRM9200的内部Watchdog将会发生作用,重启CPU。这是通过控制内外两种Watchdog计数时间的长短来实现的。将MAX6374的定时时间设置为3s,EPlC6的定时时间设置为4s,而AT9lRM9200内部Watchdog定时时间设置为5 s。因此AT91RM9200内部软件Watchdog和仲裁板上的硬件Watchdog构成了系统中的两级监控、一级冗余的监控机制。系统的可*性设计方案示意图如图2所示。 screen.width-500)this.style.width=screen.width-500;"> 2 基于AT91RM9200的多级监控机制的实现 2.1 利用MAX6374设计外部监控器 在仲裁板上利用MAX6374芯片实现了专用的Watchdog电路。MAX6374足Maxim公司的一款低功耗Watchdog芯片,耗电仪5μA,封装为8引脚SOT23。其定时周期可通过对引脚SET2、SETl和SETO进行编程,从而获得不同的定时时间。MAX6374的定时周期如表1所列,电路原理图如图3所示。 screen.width-500)this.style.width=screen.width-500;"> screen.width-500)this.style.width=screen.width-500;"> MAX6374的输入端WDI与AT91RM9200的PIO端口直接连接,而输出端WD0则与AT91RM9200的nReset引脚相连。
(1)利用AT91RM9200的外部中断源 由于AT91RM9200自带7个普通外部中断源和1个快速中断源,因此可以直接将AT91RM9200的任意外部中断引脚与系统的外部Watchdog的输出中断信号相连。 例如,如果要使用AT91RM9200的IRQ0引脚作为中断源,则需在AT91RM9200的驱动程序中采用如下的方法进行设置: screen.width-500)this.style.width=screen.width-500;"> request_irq函数是Linux操作系统中的中断申请函数。该函数向操作系统申请中断号为AT91C_ID_IRQO的中断,并通知操作系统该中断的中断处理函数为at91_interrupt_IRQ0。随后,定义at91_interrupt_IRQ0函数: screen.width-500)this.style.width=screen.width-500;"> 这样,一旦AT91RM9200的IRQO端口发生由高到低的电平跳变,则会引发at9l_interrupt_IRQO函数的执行。 (2)利用AT9lRM9200的PIO端口作为中断源 除了利用AT91RM9200自带的外部中断源之外,也可以利用AT9lRM9200提供的丰富的PIO端口作为中断输入。本系统中,使用AT9lRM9200的GPIOC7引脚作为中断源,此时需要在AT91RM9200的驱动程序中采用如下方法进行设置: request_irq(AT91C_ID_PIOC,at91_interrupt_PIOC,O,at91Rm9200 interrupt PIOC,NULL); 该函数向操作系统申请了中断号为AT91C_ID_IPIOC的中断,并且通知操作系统该中断的中断处理函数为at91_interrupt_PIOC。为了使能PIOC控制器的中断功能,还需要设置相应的中断控制寄存器:PIOC_IER|=0x7; 可以在中断处理函数中添加启动用户程序的代码,这样,一旦AT9lRM9200接收到Watchdog发出的中断信号之后,将会调用中断处理程序从而启动用户的应用程序。结语 本文利用AT91RM9200处理器构建了具有温备功能的双机容错系统。该系统采用一级冗余、两级监控的高可*设计方案,具有实现简单、成本低等优点,能够满足一般关键领域对嵌入式系统的需求。经实践证明,该系统能够应对发生于板级和处理器级的故障,延长了系统的平均故障间隔时间,应用效果较好 本文可能所用到的IC型号: ML4810CP DM74ALS1032AN MC74F132DR2 OP05J HFA320NJ40D 88C5500-LFE |
|