基于SmartFusion2 的星载CAN 总线设计与实现
2021-07-30陈世淼倪淑燕廖育荣刘晓辉
陈世淼,倪淑燕,廖育荣,刘晓辉
(1.航天工程大学研究生院,北京 101407;2.航天工程大学电子与光学工程系,北京 101407)
随着电子科学技术的进步,卫星正在逐渐往小型化、集成化和模块化方向发展,具有体积小、重量轻、性能高等特点的微小卫星应运而生[1-2]。随着航天任务复杂度的增加以及人们对微小卫星性能要求的提高,微小卫星软硬件设计的复杂性也在逐渐增加[3],星载综合电子系统作为微小卫星系统的核心,对微小卫星的性能有着重大的影响。星载计算机是星载综合电子系统平台信息处理和交互的枢纽,能够完成卫星在轨运行段的控制计算以及全程任务管理。
针对以上问题和现状,提出了一种基于SmartFusion2芯片的星载CAN 总线设计方案。SmartFusion2 是一种将ARM 和FPGA 结合的处理器,具有高安全性、高可靠性和低功耗的优点[4-6],通过其FPGA 的强大功能可以完成复杂系统的设计和实现,可以极大地提高微小卫星的功能密度和适应性[7-8]。微小卫星内部总线的设计原则是可靠、稳定、高实时性。CAN 总线具有强抗干扰性、高实时性、高传输速率和低成本的优点,从二十一世纪初便被广泛应用在航天领域,技术相对比较成熟。所以该文基于SmartFusion2 芯片,采用CAN 总线作为星载综合电子系统的通信总线,针对星务姿控一体化进行了两级总线双冗余设计,提高了总线通信的安全性和稳定性,简化了星务软件中的数据处理设计,减少了卫星的功耗。
1 系统设计
微小卫星综合电子系统一般由星务管理分系统、姿控分系统、电源分系统、测控数传分系统、GNSS 分系统和载荷分系统组成,其中星务管理分系统和姿控分系统是微小卫星综合电子系统中最为重要的两个分系统[9-10]。由于卫星设计的分工和一体化设计具有很高的复杂性,传统方法将这两个分系统作独立设计,其中共同点是都含有星载计算机和对应的软件。但是这种设计不仅浪费硬件资源,增大数据传输量,而且增加卫星质量,加大功耗[11]。针对星务姿控一体化设计的星载综合电子系统进行了CAN 总线通信设计,通信架构如图1 所示。
图1 通信架构
一级总线用于连接与星务分系统相关的载荷、GNSS、测控数传一体机和电源分系统,传输的数据主要为其他分系统的遥测遥控数据;二级总线用于连接飞轮、星敏、太敏、陀螺和磁强计等姿控部组件,传输的数据为各个姿控部组件的遥测遥控数据,两者的数据类型、采集数据的周期以及数据的处理均有较大差别,所以采用两级总线设计。两级总线的设计减少了单个总线的数据处理量,有效提高了卫星总线的在轨寿命[12]。
为了提高微小卫星综合电子系统的稳定性和安全性,在使用两级总线的同时进行了双冗余总线设计。目前双总线的仲裁机制主要分为总线切换和双收双发两种。总线切换机制将CAN 总线分为工作总线和备用总线,当工作总线故障时自动启动备用总线完成通信[13];而双收双发机制则是利用两条冗余CAN 总线同时传送相同的数据[14]。采用第二种方法会增加星载综合电子系统的数据传输量,所以该设计采用的是总线切换机制。
该设计选择的M2S050TS-1FGG484 处理器是采用ACTEL 的第四代65 工艺的片上系统产品:基于flash 架构,能够满足工业、军事、航空、通信和医疗领域的高安全性、高可靠性和低功耗的片上SoC 系统。处理器由FPGA 和ARM 内核——Cortex-M3 组成,处理速度块,可扩展性强。并且SmartFusion2 片上系统芯片被广泛应用于军工和航空领域,欧洲空中客车公司A380 大型客机上采用了大量Smart Fusion2(每架超过1 000 只)。该产品不在美国公禁运之列,所以可采购到军级产品,适合用于卫星。并且该处理器在国防科大微纳卫星天拓三号上进行了应用,已在轨飞行2.5 年,在轨运行稳定可靠。
目前,CAN 总线节点的硬件构成主要包括两种:一种是通过MCU 控制器连接独立的CAN 控制器,另一种是MCU 控制器本身带有CAN 控制器。M2S050TS-1FGG484 处理器的ARM 核带有独立的CAN 控制器,文中又通过FPGA 实现了3 个SJA1000的扩展[15-16]。SJA1000 的IP 核设计与实现通过Libero软件完成。
2 通信原理协议
根据OSI网络模型,CAN 现场总线定义了物理层和数据链路层。在实际设计中,这两层完全由硬件来实现,设计人员无需为此开发相关软件或固件。而在应用中,CAN 总线是以报文为单位进行数据传送的,故只需规定一个高层协议来定义CAN报文中的11/29位(具有11位标识符的帧称为标准帧,具有29位标识符的帧称为扩展帧)标识符以及8B 数据的使用即可,这些信息均包含在CAN的报文帧内。目前,应用较多的是CAN2.0A规范,CAN报文采用的是标准帧。但是随着星务管理的复杂化,信息传输量越来越大,仅含有11位标识符的标准帧将难以满足需求,所以该设计数据帧采用的是CAN2.0B 规范中的扩展帧格式。扩展帧的仲裁域含有29个二进制位,包括设备识别协议和数据传输协议两种类型。仲裁域的定义方式如图2所示。对该设计CAN通信中主要用到的设备识别协议、数据传输协议和网络传输协议介绍如下。
图2 仲裁域格式
2.1 设备识别协议
设备识别过程中用到的是设备识别广播帧、设备识别申请帧和设备识别允许帧,如图3 所示。设备的oID 是设备唯一识别码,包括生产方编号、设备类型号、出厂序号和保留部分,主要用于服务器对下位机的识别。每个设备有且仅有一个设备唯一识别码,且不同设备的设备唯一识别码不得相同。nID 是设备的网络通信识别码,在设备的识别过程中由服务器分配给下位机,用于之后信息传输的设备识别。nID 长度为一个字节,并且数值越小优先级越高。
图3 设备识别帧格式
CAN 总线的设备识别过程有两种,一种是由服务器发起的设备识别过程,另一种是由被识别节点所申请的设备识别过程。第一种识别过程应用在设备识别服务器(上位机)上电或复位后,首先,由服务器向总线上发送设备识别广播帧,未被识别的设备接收到设备识别广播帧后将发送设备识别申请帧,服务器接收到设备识别申请帧后,通用设备识别允许帧分配相应的nID,完成设备识别。第二种识别过程应用在被识别设备上电或复位后,首先,由待识别设备每秒定时发送设备识别申请帧,服务器接收到设备识别申请帧后,通过设备识别允许帧分配nID,完成设备识别。
2.2 数据传输协议
数据传输过程中主要用到数据传输首帧、数据传输中间帧、数据传输尾帧和数据接收确认帧,其帧格式如图4 所示。协议控制码为00B 时,表示数据帧发送时需要回复确认帧,01B 表示数据帧发送时,不需要回复,10B 表示数据接收确认帧标识。接收地址为FFH 时,为广播传输数据。当数据进行多帧数据传输时,必须按照帧序号依次发送,设置首帧的帧序号为00H,中间帧的帧序号依次递增,尾帧帧序号为FFH。数据区按照顺序填写根据网络传输协议制定的数据,数据不足8 字节时填充AAH。如果需要回复确认帧,则事件接收方在接收到每一帧数据后都需要回复一帧数据确认帧。
图4 数据传输帧格式
2.3 网络传输协议
网络传输协议提供统一通用数据传输包格式,首部格式固定,包括传输协议、包长度、源地址和目标地址等。CAN 总线进行数据传输时每8 个字节为一组,与仲裁域共同构成一帧,进行数据传输,不足8 字节时用AAH 进行填充。网络传输首部字节分配如图5 所示。
图5 网络首部字节分配
根据传输数据首部中传输协议的不同,可以实现信息传递服务、时间传输服务、在轨快速测试服务、文件传输服务、设备驱动服务、遥测传输协议、遥控传输协议等功能。
3 应用层软件
CAN 总线函数通过主控制器Cortex-M3 设置的C 语言编写,基于μC/OSⅡ操作系统,在Keil uVision4集成开发环境中完成。
3.1 基本函数
CAN 通信的基本函数主要包括初始化函数、组帧函数、发送函数、中断函数、接收函数。初始化函数主要用于设置CAN 通信的波特率、工作模式和滤波器等,主要应用于软件的初始化阶段。组帧函数用于将要发送的数据组成数据帧,数据帧包括29 位的仲裁域和8 个字节的数据域。发送函数用于将组帧函数产生的数据帧发送到CAN 总线上的目标下位机。中断函数在检测到总线上的数据后进入中断模式,然后调用CAN 总线的数据接收函数,最后完成数据接收后清除中断。接收函数用于接收CAN总线上下位机发送的数据,并且根据数据的仲裁域和首部将数据储存在相应的数据缓冲区中。由于该设计中的CAN 总线由处理器自带的CAN 控制器和SJA1000 扩展的CAN 控制器组成,所以要进行两种CAN 控制器的函数设计。
3.2 nID分配
星载计算机开机后,首先进行系统初始化,然后调用发送函数发送设备识别广播帧。下位机在收到设备识别广播帧后会发送设备识别申请帧,从而触发中断函数,最终调用接收函数对帧类型进行判断和处理。若接收帧为设备识别广播帧,则发送信号量来触发主函数中的nID 发送任务。nID 发送任务根据设备识别广播帧中的oID 来发送相应的设备识别允许帧,从而完成nID 的分配。此外下位机断电重启后也会进行nID 的分配。
3.3 应答数据处理
nID 识别完成后,软件内部的计时器模块以1 s为周期发送信号量,触发轮询指令发送任务,星载计算机通过CAN 总线向各部组件发送轮询指令。在星载计算机接收到部组件的应答数据后,进入CAN 总线中断函数,根据数据的nID 将数据存储在相应的数据缓冲区中。在接收到数据的尾帧后,发送信号量触发数据处理任务,星载计算机根据部组件的协议从应答数据中提取有效数据,用于后续处理,软件主流程如图6 所示。该设计设置了故障标志位,根据数据接收过程中出现的故障来设置不同的标志,实现了故障判别功能。故障类型包括首部校验和未通过、数据接收未完成和数据帧不连续。
图6 软件主流程
4 通信测试
该设计将星载计算机和实时仿真机连接,搭建半实物仿真系统。实时仿真机能够模拟部组件的真实通信状况,适用于验证该设计的合理性。在测试的过程中,实时仿真机模拟4 个飞轮、两个太敏、一个太敏和一个磁强计的在轨运行状态,通过CANTest 软件、串口调试助手和Keil进行调试和验证。
当星载计算机和实时仿真机通电后,实时仿真机发送nID 申请帧,星载计算机收到nID 申请帧之后发送nID 确认帧;星载计算机以1 s 为周期发送部组件轮询指令,实时仿真机接收到轮询指令后回复应答数据;星载计算机接收到应答数据后进行数据帧的nID 识别,将不同的部组件数据储存在相应的数据缓冲区,进行数据的处理,数据处理成功通过地测口打印数据处理成功标识。从CANTest 软件可以看出,CAN 总线上的数据与软件设计预期一致,nID 的识别过程如图7 所示。轮询帧和应答帧数目较多,不在文中进行展示,星载计算机在接收到部组件应答帧数据后通过地测口打印数据处理成功标识,由图8 可以看出星载计算机成功接收并处理了部组件数据。通过Keil 软件监测部组件数据存储区可以看出,星载计算机接收到应答数据后成功进行了解析,此时故障标志位(InvalidFlag)为0x00,表示数据处理成功。控制实时仿真机发送错误的应答数据帧后,此时故障标志位变为0x01,表示数据接收未完成,实时反馈了错误类型,测试结果如图9 和图10 所示。
图7 nID识别过程
图8 串口助手接收数据
图9 数据接收正常
图10 数据接收故障
测试结果表明,文中设计的CAN 总线通信系统可以准确地进行nID 的识别、轮询指令的传输和部组件数据的接收和处理,具有定期轮询、故障判断功能,实现了星载计算机与部组件通信的目的,满足了设计需求。
5 结论
在综合考虑星载综合电子系统相关因素的基础上,基于SmartFusion2 芯片进行了CAN 控制器的硬件和架构设计,完成了CAN 通信协议的制订,并进行了通信软件的开发,实现了星务姿控一体化的星载CAN 通信设计。该设计通过SmartFusion2 芯片的FPGA 模块实现了CAN 总线的扩展,在ARM 内核上运行星务软件,提升了卫星运算处理能力,提高了卫星功能密度;两级双冗余总线架构的设计在提高卫星总线寿命的同时提升了系统的稳定性和安全性。测试结果验证了该设计中总线的硬件、软件和协议设计的合理性和有效性,满足星务姿控一体化卫星的通信任务需求,具有较强的工程应用价值。