高可靠的计算机模块引导软件①

2018-02-07 02:41周鹏举施华君杨三岭
计算机系统应用 2018年1期
关键词:校验应用程序指令

周鹏举,倪 明,施华君,杨三岭

(中国电子科技集团公司第三十二研究所,上海 201800)

自第一颗人造卫星进入太空以来,航天技术取得了迅猛的发展,现已广泛应用于国民生活的方方面面.我国经过40多年的艰苦努力,在航天方面取得了一系列重大成就.随着计算机模块运算能力的提升和任务的增多,计算机模块应用程序呈现出多样化和复杂化的发展趋势.快速迭代的软件需求,要求设计一种计算机模块引导软件(以下简称引导软件),使其能够对应用程序进行重构和引导等,并且为适应复杂的空间环境,需要采用一定措施保证其高可靠性.

本文针对上述问题,设计与实现了一种基于SPARC架构的高可靠引导软件.该引导软件的主要功能如下:

1)自检功能,确保引导软件本身正确.

2)硬件检测功能,确保硬件状态正确.

3)三冗余架构、反弹墙、EDAC保护等多种高可靠性措施,确保软件的正确运行.

4)重构功能,便于不同应用程序的在线固化,缩短研发周期.

5)多种引导方式,便于对应用程序的调试.

1 硬件环境概述

1.1 计算机模块与调试环境

本实验所用的计算机模块原理框图如图1所示,CPU使用基于SPARC架构的AT697F,主要包含RAM、PROM、EEPROM三种存储芯片,RAM是计算机模块的内存区域,引导软件烧写于PROM1(实验过程中由EEPROM代替)中,自动引导的应用程序(以下简称应用程序)烧写于PROM2(实验过程中由EEPROM代替)中,可重构的应用程序(以下简称重构程序)固化于EEPROM中.

图1 计算机模块原理框图

计算机模块通过RS232与外界通信.计算机模块与计算机的通信示意图如图2所示,计算机使用调试环境VDS通过仿真器LEON将引导软件下载到计算机模块中,计算机中的地面服务程序(界面见图10)通过RS232串口与计算机模块进行通信.

图2 计算机与计算机模块通信图

1.2 CPU简介

该实验采用的CPU是Atmel公司的AT697F.AT697F基于SPARC V8架构设计,采用RISC精简指令集,具有8个寄存器堆窗口、5级流水线,使用容错设计技术,具有软件可控的省电工作模式,是一种高性能低功耗的32位嵌入式处理器.

AT697F主频最高可达100MHz,定点运算性能86MIPS,浮点运算性能23MFLOPS.正常工作温度范围广,抗辐射能力强.该CPU的各项指标能够满足卫星在轨运行期间的各项性能要求.

1.3 计算机模块存储空间

AT697F具有32根地址总线,可寻址4 GB的地址空间.该计算机模块采用统一编址方式,地址空间分配如表1所示.

表1 计算机模块地址空间

2 引导软件设计方案

2.1 引导软件的模块划分

本引导软件的设计方案如图3所示,主要分为6个模块.

图3 引导软件设计方案

系统初始化模块用于系统初始化和引导程序的搬移和跳转.系统初始化主要包括CPU、外围器件,陷阱/中断、堆栈等的初始化.引导程序的搬移和跳转用于引导程序自身的转移.

系统初始化完成后,引导软件等待4 s,若4 s内未收到地面接管指令则进入飞行模式模块,否则进入测试模式模块.飞行模式模块是系统的自动管理模块,它根据引导标志自动完成应用程序或重构程序的引导;测试模式模块根据地面指令执行相应操作,如重构程序上注、固化等,并最终引导一个应用程序的启动.

数据回送模块用于引导程序运行过程中状态的回送,如重构程序校验和的回送等.

错误检测与恢复主要包括RAM正确性检测、程序比特位正确性检测、系统运行正确性检测和重构程序三冗余架构设计等,若检测到错误,则尝试进行恢复.

本文主要对系统初始化、飞行模式、测试模式和错误检测与恢复4个模块进行论述.

2.2 引导软件的目录结构

该引导软件主要由trap.s、setup.s、xxmain.c等3个文件组成,trap.s主要用于设置陷阱表和中断临界区,setup.s主要包含初始化和错误检测与恢复两个模块,xxmain.c完成引导软件的引导测试功能,即完成飞行模式、测试模式和程序启动三个模块.

3 引导软件的实现

3.1 系统初始化

系统初始化主要包括硬件初始化和引导程序的搬移和跳转.

3.1.1 硬件初始化

AT697F共有8个全局通用寄存器和8个寄存器窗口,每个寄存器窗口对应一组通用寄存器.初始化时对上述通用寄存器全部清0,对控制寄存器进行配置,主要配置当前寄存器窗口、无效窗口、cache、内存等.

中断是现代处理器的重要组成部分,本引导软件在系统初始化时完成对中断的配置.中断服务函数在xxmain.c中完成,临界区的进入/退出和中断向量表在trap.s中,中断配置在setup.s中完成.

AT697F的中断控制在多个寄存器中完成.主要是设置中断屏蔽级别PSR.pil为0,设置异常基址标志寄存器TBR为中断向量表的入口地址,其它与中断相关的寄存器如中断级别/屏蔽寄存器等都设为0.当程序跳转至主函数前置PSR.ET为1,打开中断.

因AT697F共有8个寄存器窗口,故需为每个窗口设置一个堆栈,该引导软件的堆栈栈底位于SRAM的 0x400f0000 处,代码为:

PROVIDE (__stack = 0x400f0000);

每个窗口对应一段栈空间,栈指针%sp向下增长.

3.1.2 引导程序的搬移和跳转

引导程序固化于PROM中,运行时将自身搬移到RAM中,自检正确后跳转至引导软件的main主函数.

3.2 错误检测与恢复

因太空复杂的环境对程序的正确运行构成极大威胁,本引导软件为保证程序的正确运行采取如下高可靠性措施,在文件setup.s中主要完成RAM正确性检测,EDAC保护,反弹墙保护,看门狗保护等;在文件xxmain.c中主要完成三冗余架构设计.其中RAM正确性检测属于硬件正确性检测,EDAC保护属于比特位正确性检测与恢复,反弹墙保护、看门狗保护属于系统运行正确性检测,三冗余架构属于错误检测与错误恢复,将在3.4.2节论述.

1)RAM错误检测

RAM的起始地址是0x40000000,错误检测的方法是在RAM的地址空间中,依次向每个字中写入0x0并读出,检测读出的数据是否出现错误,若出现错误则将错误计数加1.当上述检测完成后,分别将0x0替换为0x55555555、0xaaaaaaaa和0xffffffff重复上述检测.最后将错误计数值存入地址0x40000000处.当引导软件进入main函数后将错误计数值返回给地面服务程序.检测SRAM的代码如图4所示,进入_checkram 前%g1~%g4为0,%g2进行错误计数,%5为RAM的大小,%g6为RAM的起始地址.

2)引导软件自检

引导软件无错误是其正确执行其它功能的前提,当RAM自检正确后,引导软件将被转移到起始地址为SADDR的RAM中,计算其校验和,若校验和正确则认为引导软件没有错误.

3)反弹墙保护

反弹墙的目的在于保证程序非法运行时,能够跳转到指定的异常处理函数.本软件添加反弹墙的方法是在未使用的区域填入“nop”和跳转到0地址的指令,这些区域包括ROM、EEPROM、RAM中未使用的所有区域.若程序运行中跳入非法地址,则软件复位.

4)EDAC保护

EDAC(error detection and correction)采用海明码,能够纠正一位错,检测两位及多位错误,对于受保护的RAM区域,任何一条指令的读取或数据的读写都将经过EDAC检测,对于一位可纠正错,错误将在CPU内部纠正,对于两位不可纠正错,将产生instruction_access_exception或data_access_exception陷阱.

本引导软件主要对RAM进行EDAC保护.软件初始化时,开启全RAM区域EDAC保护,软件运行过程中,为了防止比特位的错误累积,定期对RAM中的所有数据进行读写,若出现多位错误则进入中断服务函数,中断服务函数将错误发回给地面,引导软件自动复位.

5)看门狗

看门狗是防止程序跑飞的有效手段,在该引导软件中,引导软件必须定期喂狗,否则引导软件将复位.

图4 SRAM检测

3.3 飞行模式

系统自动进入飞行模式后,对引导标志进行检测,若导标志不是引导EEPROM中的重构程序,则引导程序将PROM中的应用程序复制到起始地址为SADDR的RAM中,然后启动应用程序的运行;若引导标识是引导EEPROM中的重构程序,则引导程序则按照3.4.2节中重构程序引导的方式启动重构程序的运行.飞行模式的流程图如图5所示.

图5 飞行模式流程图

3.4 测试模式

3.4.1 地面指令

地面指令通过地面服务程序以帧的形式下发到计算机模块,该计算机模块中的帧分为指令帧、数据帧和应答帧.指令帧用于计算机模块的控制与测试,数据帧用于重构程序的上注,应答帧用于计算机模块状态的回送.数据的发送往往伴随着封装成帧和帧的重组.在计算机模块上对帧的处理主要是帧重组和帧解析.

1)帧重组

帧重组在串口UART的中断服务函数中进行.当收到一个字节的数据时产生UART中断,经中断切换进入中断服务函数.因数据的发送具有连续性,进入串口中断服务函数后连续判断UART状态寄存器的dr位是否为1,若此位为1,则表示在UART的接收保持寄存器中已经有可读的新数据,串口服务程序读取UART数据寄存器中的一字节数据,并根据帧协议将接收到的数据组装成帧.

2)帧解析

帧的解析在函数cmdAnalysis中进行.该函数对于一个帧的解析流程如图6所示.若收到的帧是数据帧,则使用io_copy函数将数据(不包含帧头、帧尾,帧长度等与帧有关的数据)转移到首地址为FRM_BUF_ADDR的RAM中,数据复制完成后,计算校验和,并将其回送至地面服务程序;若收到的帧是指令帧,则根据指令码选择相应的操作,如地面接管、软件上注、重构程序固化、RAM引导等.

图6 帧解析流程

3.4.2 重构程序的三冗余架构与引导

该引导软件的一个重要功能是重构程序的在线固化功能.本引导软件将重构程序分三份固化于EEPROM中,并分别计算校验和,将校验和发送回地面服务程序.

根据3.4.1节对数据帧的论述,当重构程序存放于RAM中,且地面收到正确的校验和后,地面服务程序可以发送重构程序固化指令,开始重构程序的固化.重构程序的固化使用FPGA托管方式进行.重构程序共固化三份,首地址分别是RADDR1、RADDR2、RADDR3,固化完成后分别计算校验和,并将校验和返回给地面服务程序,若应答帧返回的三个校验和与重构程序的校验和相同,则重构程序固化成功,此时地面服务程序可以向计算机模块发送重构程序引导指令.

计算机模块收到重构程序引导指令后,分别将这三份程序按字节取出,进行三取二操作,将所得的结果移动到RAM中起始地址SADDR处.当程序搬运完毕,计算RAM中该程序的校验和,若校验和正确,则启动重构程序的运行,否则启动原应用程序.重构程序启动的核心代码如图7所示.

4 实验结果

本实验中计算机模块固定在板卡基座上,实物如图8所示,图8左边是计算机模块的正视图,右边是计算机模块的俯视图.在试验中使用EEPROM代替PROM,地面服务程序的界面如图10所示.

4.1 引导软件的自动引导

在tornado中建立VxWorks应用程序,并添加printf打印函数,设置引导标识,重启计算机模块,则可以在串口调试助手中看到如图9的结果.

图7 重构程序引导

图8 计算机模块实物图

图9 引导程序自动启动应用程序

图9上图为自动引导PROM中的应用程序,下图为自动引导EEPROM中的重构程序.从图中可以看出VxWorks已经成功运行,并成功打印出相应信息,证明应用程序已经成功运行.

4.2 重构程序的固化与引导

计算机模块重启后发送地面接管指令,接管成功后,引导软件进入测试模式,图10显示了地面服务程序发送的一系列地面指令.从中可以看到程序启动后自检正确,SRAM无错误.当发送地面接管指令后成功接管引导软件,引导程序成功进入测试模式,这时选取重构程序,发送软件上注指令,执行重构程序固化和引导,从图中可以看出重构程序在计算机、RAM和EEPROM中的校验和完全一样,都为0x37b0,表明引导程序已经成功将重构程序固化完成.

图10 引导程序进入测试模式

当地面发送重构程序引导指令后,引导程序引导重构程序的执行.所得的结果如图11所示.

图11 重构程序引导

4.3 错误检测与恢复

4.3.1 反弹墙测试

在引导软件的main函数中添加:

asm(“b 0x40001000”)

运行引导软件,得到的结果如图12所示.

从图12中可以看出程序在不停的重启,说明反弹墙能够正确的运行.

4.3.2 三冗余造错

通过VDS将RADDR1,RADDR2+0xf,RADDR3+0xff处的值改为0xFF,设置引导标识为重构程序引导,启动引导软件,可以得到如图11所示的结果,证明三冗余架构具有一定的容错能力,能够保证应用软件的正常运行.

图12 反弹墙测试

4.3.3 SADDR处校验和错误

在重构程序放置在SADDR后、校验和检测前,使用VDS更改SADDR处的值,运行软件,此时会检测到校验和错误,转而引导位于PROM中的应用程序,串口调试助手此时返回的结果如图9上图所示.

5 结束语

本文介绍了基于SPARC架构的的计算机模块引导软件,详细论述了该引导软件的架构设计和主要功能,并论述了为保证其高可靠性采取的技术,最后将该引导软件在计算机模块上测试,实验证明,该引导软件的各项功能正确,能够将其应用到实际的项目中.该软件也有不完善之处,需要改进,比如为保证高可靠性,数据的传送速度较慢,可以通过测试,在保证高可靠的前提下提高数据传输速度.

1 徐福祥,林宝华.卫星工程概论.2版.北京:中国宇航出版社,2004.

2 AT697F_doc7703.pdf. http://www.atmel.com/Images/doc 7703.pdf.

3 陈国林.星上带容错功能的计算机引导系统的研究和实现[硕士学位论文].北京:中国科学院研究生院(计算技术研究所),2005.

4 孙乐益.嵌入式系统的冗余设计研究.数字技术与应用,2011,(10):123–124.

5 赖鑫.高可靠8051设计与实现及可靠性评估[硕士学位论文].长沙:国防科学技术大学,2008.

6 柳振华.三模冗余容错计算机的设计与实现[硕士学位论文].西安:西安电子科技大学,2010.

7 时晨,于伦政.基于SPARC结构的RISC系统设计技术.微电子学与计算机,2002,19(11):52–54.[doi:10.3969/j.issn.1000-7180.2002.11.017]

8 周雪赞,张宏.基于Vxworks操作系统的BSP开发.工业控制计算机,2004,17(2):33–34.

9 徐惠民.基于VxWorks的嵌入式系统及实验.北京:北京邮电大学出版社,2006.

猜你喜欢
校验应用程序指令
使用Excel朗读功能校验工作表中的数据
基于 Verilog HDL 的多周期 CPU 设计与实现
《单一形状固定循环指令G90车外圆仿真》教案设计
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
电子式互感器校验方式研究
基于FPGA的CRC32校验查找表算法的设计
中断与跳转操作对指令串的影响
浅谈微电子故障校验
MAC指令推动制冷剂行业发展