基于1553B的DSP在轨编程设计与实现
2020-06-16顾泽凌杨明远赵建华李鸿志
张 衡, 顾泽凌, 杨明远, 赵建华, 李鸿志
(上海无线电设备研究所,上海201109)
0 引言
DSP具有运行速度快,接口形式多样,浮点运算能力强,开发仿真简单快速的特点,在空间领域已获得广泛应用[1]。但DSP对单粒子辐照等空间特殊环境比较敏感,容易产生单粒子故障,加上空间应用的不确定性,往往需要对DSP进行在轨编程[2]。随着空间载荷任务越来越多样,功能越来越复杂,对DSP在轨编程与重构的数据量和速度的要求越来越高。而传统在轨编程采用RS422通信方式,存在传输速率低、稳定性差的缺陷,一般只能用于某个变量的在轨编程与重构,无法满足当前的应用需求。1553B作为成熟的空间通信总线接口,数据传输速率可达1 Mbps[3],通常采用A/B两个通道互为备份,且具有勤务中断查询功能,稳定可靠,已经在空间领域获得广泛的应用[4]。通过1553B接口实现DSP在轨编程与重构功能,既可确保传输数据的稳定可靠,又可大大提高数据传输速率。
1 电路与软件设计
1.1 接口电路设计
星载通信系统远程终端(RT)信号处理机1553B通信接口的组成如图1所示。电路采用辐射加固1553B远程终端芯片B65170S6RH作为1553B接口控制器,选用1553B总线隔离变压芯片T31S01/B3226-S进行A/B总线变压器耦合[5]。由于B65170S6RH采用+5 V供电,需要经过电平转换芯片JSR164245SA进行+3.3 V电平转换,再由FPGA进行DSP的外部存储器接口(external memory interfaces,EMIF)通道译码切换,连通B65170S6RH与DSP的数据通道。
图1 接口电路示意图
1.2 在轨编程软件设计
(1)跳转指令与验证程序设计
DSP在轨编程的基本原理是改变跳转指令编码让程序跳转到新函数。当检测到在轨运行的DSP芯片出现单粒子故障并精确定位后,或用户提出扩展功能的要求后,需要对在轨程序进行修改或添加新的功能程序。这种修改不能在原来的程序上进行,而要建立新的功能程序,为新程序分配存放段地址,保证程序重启后,当其跳入新的指令编码时,运行的是新的功能程序。
以内部RAM存储空间为1 MB的DSP为例,其内部RAM 地址范围为0x00000000~0x000FFFFF,如表1所示。
表1 DSP部分存储空间分配表
为在轨编程分配专用内存空间,并为新程序分配存放段地址,空间及地址分配流程如图2所示。首先在分配内存空间的.cmd文件中选择某一区间作为在轨编程专用空间;然后指定好加载段地址,并指向ISRAM地址;最终在声明变量的.h头文件中将要修改的新函数分配到上述指定的段地址[6]。需要强调的是地面使用的DSP芯片型号规格及其程序必须与在轨运行的星载信号处理机中使用的一致。
图2 分配专用空间和指定新程序存放段地址流程图
验证程序是在原始的DSP程序中,设计一段测试程序,函数名为orbit_progme_test1。其功能是设置2个局部变量a和b,若a>b,则在轨编程测试标志test_orbit_flag输出为0x AA,并在上位机界面显示,否则输出为0x55。新功能程序orbit_progme_test2则与之相反。新的功能程序编辑完成后,在待替换程序入口处用新程序的函数名替换原程序的函数名,连接仿真器进行编译,编译无误后将新程序的.out文件加载到DSP芯片,在新程序入口处设置断点,选择机器码显示。待替换功能程序与新功能程序及其机器码如表2所示。
由表2可知,该程序起始地址为图2指定的段地址0x00030000,地址0x00030000~0x0003004C中存储的十六进制内存数据机器码就是需要上注到DSP的新功能程序代码。
表2 待替换功能程序与新功能程序及其机器码表
跳转指令码替换程序流程如图3所示。图中address1为待替换跳转指令所在的内存地址(即原程序函数orbit_progme_test1的入口地址),同时也是新的跳转指令所在的内存地址(即新程序函数orbit_progme_test2的入口地址),机器码jump_code1为待替换的跳转指令编码,机器码jump_code2为新的跳转指令编码。当程序重启并运行到地址address1时,就会跳转到指令编码jump_code2指向的功能函数orbit_progme_test2而不是jump_code1指向的orbit_progme_test1。
图3 跳转指令编码替换示意图
(2)在轨注数与内存下载设计
在完成了指令编码跳转功能与验证程序设计之后,还需要将新的功能程序、新的指令编码及其所在内存地址的十六进制机器码上注到DSP之中。传统的RS422通信根据帧头判断数据到来,并计算校验和以保证数据的正确性,这种方式已经无法满足当前在轨编程大数据量、快速可靠的要求。而1553B接口通信是通过勤务指令触发中断寄存器,不需要DSP解析数据帧头,无需校验和,且传输速率能达到1 Mbps,远远高于RS422接口,确保了传输的可靠性与时效性。
本设计中1553B采用的存储缓冲方式为循环128字,每次总线控制(BC)端触发在轨编程勤务中断寄存器时,DSP将其循环128字存储器复位,即每次从该循环128字存储器起始地址开始存储数据[7]。将新功能程序代码拆分为每包不超过44字节的数据包,依次上注到在轨运行的DSP芯片中,DSP接收并将上注的代码数据依次写入指定内存地址,程序流程如图4所示。
图4 将新功能程序代码写入DSP指定地址流程图
为了确保注入数据的正确性,需要内存下载(也称为内存下卸)完成数据对比。从DSP内存中读取之前注入的数据,每次至多读取48个字节且为4的整数倍,组成24个字的1553B内存下载数据包,不够24个字时则用0x AAAA补齐。内存下载工作流程如图5所示。
图5 DSP内存下载流程图
2 实验验证与结果分析
2.1 实验系统组成
采用带有1553B板卡计算机的测试设备模拟星载数管分系统BC端,实验接口电路所在的星载信号处理机为RT端。测试设备给星载信号处理机供电,并通过2根双绞屏蔽线分别与星载信号处理机的A/B双通道进行1553B通信。实验系统示意图如图6所示。
图6 实验系统示意图
通过测试设备上位机的人机交互界面,可以向星载信号处理机下发指令并接收其反馈的遥测信息。上位机软件采用Lab View语言编程,作为面向用户的图形语言,其具有开发灵活、界面友好的特点[8]。针对DSP在轨编程,上位机软件主要包括:在轨编程注数,即将新功能程序的十六进制机器码上注到DSP指定地址;内存下载,即从DSP指定地址下载一定数量的内存数据;待替换跳转指令所在地址注入,即将图3中的address1上注到DSP暂存;新的跳转指令注入,即将图3中的jump_code1上注到DSP暂存;新功能程序启用,即通过引导程序重新启动DSP。其中,每次注入数据的字节数是4的整数倍且不超过44字节,界面上的内存修改地址即为此次注入的在轨编程数据机器码即将写入DSP内存空间的首地址,数据包长度由上位机自动识别。内存下载则需要输入即将读取的DSP内存空间的首地址以及数据长度(不超过48字节)。上位机在轨编程注数与内存下载界面如图7所示。
图7 上位机数据上注及其下载界面
2.2 实验过程及结果分析
实验过程步骤如下:
a)将新功能程序orbit_progme_test2的80个字节内存数据十六进制机器码分为2包,每包40个字节,起始地址分别为0x00030000与0x00030028;
b)将内存数据上注到对应的内存地址,内存数据及其对应的内存地址如表2所示;
c)当步骤b)的第1包数据上注完成后,从地址0x00030000开始下载40个字节,与步骤b)注入的数据进行对比,确认数据传输无误;
d)重复步骤b)与步骤c)从地址0x00030028开始进行第2包数据注入与下载;
e)第2包数据上注完成并确认无误后,在上位机注入待替换跳转指令所在地址address1与新的跳转指令jump_code2,此时address1与jump_code2以随机变量形式存在DSP中;
f)发送在轨编程启用指令,DSP会将jump_code2写入地址address1中以替换原来的jump_code1,并引导程序重新启动DSP从地址0x00000000开始运行,当运行到address1时就会转入跳转指令jump_code2,指向程序orbit_progme_test2并执行程序orbit_progme_test2。
经过步骤a)到步骤f),上位机在轨编程标志由0x55变为0x AA,完成在轨编程。经测试,1553B接口数据率达到了1 Mbps,且运行周期稳定,满足设计要求。
3 结论
本文针对星载信号处理机DSP芯片在轨编程数据量大且可靠性要求高的难题,基于1553B接口完成了接口电路及在轨编程软件设计,并搭建实验系统,完成了实验验证,为星载信号处理机的DSP在轨编程方案设计提供了参考。