■李宏伟
(太原城市职业技术学院,山西 太原 030027)
在时代的推动下,各类飞行设备承担的任务更加纷繁复杂。为能够提高数据可靠性,系统内部往往需要针对不同的工作设备选择合适的总线通讯方式。在发挥各类总线通信的最大优势的同时,总线之间的转换传输也受到越来越多的关注。CAN总线与1553B总线均以数据传输可靠性高、传输速度快等优点,广泛应用于飞行设备中[1]。对于两总线之间的数据交互,传统的解决办法一般是采用FPGA+ARM双处理器实现,但国产ARM芯片价格高,制板时周期相对较长[2]。系统采用单芯片FPGA实现CAN总线与1553B总线之间的通信,利用FPGA能够并行处理数据的架构以及具有编程灵活的优势,编写总线底层传输协议,用软件的方式实现数据的快速转换与传输[3]。
CAN总线与1553B总线之间通讯的系统总体设计框图如图1所示。系统数据流由FPGA控制,参与实现CAN总线与1553B总线之间通信的模块主要包括CAN控制器模块、数据转换模块、1553B协议模块和RS422发送模块。
图1 系统总体设计框图
CAN总线与1553B总线之间的通信是双向的,以从1553B总线发送数据至CAN总线为例,该数据流的工作流程为:上电初始化所有模块,FPGA通过编写1553B底层协议模块实现与1553B总线的数据交互,1553B底层协议模块作为终端,接收总线发送来的数据并根据1553B协议对数据进行解析及格式转换,然后通过CAN总线控制器模块将转换后的数据发送至CAN控制器SJA1000,最后驱动收发器完成数据的上传,完成单向数据流的传输。为验证总线间的传输无误,采用RS422发送模块将CAN控制器模块接收到的数据发送至上位机进行显示,对比1553B总线上发送的数据与上位机接收到的数据,判断数据传输的可靠与否。从CAN总线发送数据至1553B总线的数据传输流程与上述类似。
系统CAN模块主要由CAN控制器及CAN收发器组成[4],其中CAN控制器通过SPI接口与FPGA进行信息交互,然后控制器与收发器串行相连,CAN收发器将控制器中的数据按照物理层的数据协议进行转换并实现与CAN总线的通信,CAN收发器与CAN总线通信即实现单端信号与差分信号的相互转换[5]。系统选用NXP公司生产的CAN控制器SJA1000,符合CAN2.0协议规范,支持高速数据传输,速率高达1Mbps[6]。CAN收发器选用PCA82C250,它实现的是数据协议层的转换传输,其传输速率与CAN控制器一致,最高为1Mbps[7]。系统主频为80 Mbps,通过分频模块后提供给CAN控制器芯片的时钟频率为16 MHz。由于FPGA的I/O口电平为3.3 V,而CAN控制器芯片的工作电压为5 V[8],因此为实现两芯片间的正常通讯,在数据进行传输时,需对其进行电平转换。该模块的工作原理图如图2所示,终端管脚INTE需上拉至3.3 V[9]。
图2 CAN模块工作原理
数据转换模块主要实现的是两种总线协议下的数据位宽的转变。由于1553B总线与CAN总线的数据传输速率不一致,为避免数据在总线交互过程中出现帧丢失或帧错误的现象,需对两总线间的速率进行平衡。设计采用双口RAM来解决速率匹配的问题[10],根据协议要求,CAN模块的数据输入输出宽度均为1 Byte,而1553B协议模块的数据输入输出宽度均为2 Byte。因此,针对两个方向的数据流采用2个RAM来对数据分别进行缓存。数据由CAN总线传输到1553B总线上的双口RAM缓存设计如图3所示。
图3 双口RAM缓存设计
1.CAN控制器模块初始化
系统加电后,CAN控制器默认为复位状态。FPGA需要对该控制器中的相关寄存器进行初始化配置,实现对其内部寄存器的配置,为其进入正常工作模式做准备[11]。初始化完成后,配置CAN控制器进入工作模式。CAN控制器模块初始化过程如图4所示。
图4 CAN控制器模块初始化过程
2.CAN控制器模块接收设计
CAN控制器模块中的接收模块主要实现了CAN总线报文的接收。CAN控制器SJA1000接收CAN总线报文后产生中断信号并使能接收模块,通过该模块调用SPI接口进行CAN报文接收,一帧报文接收完成后,将接收到的报文传递到接收报文分类模块中,传递完成后通过处理器清除CAN控制器SJA1000芯片中断使能信号[12],为下次中断做准备。接收报文分类模块实现了对接收到CAN报文进一步判断与缓存功能。若接收到的报文ID符合判断条件时即与CAN控制器在初始化配置时所要求的一致,则对报文进行缓存并传输至数据格式转换模块。CAN控制器接收报文的过程如图5所示。
图5 CAN模块接收报文时的流程图
1.1553B协议模块设计
系统中1553B协议模块作为终端(RT),主要实现对1553B总线(BC)上数据的收发与解析。RT端向BC端数据传输时,1553B协议模块首先需要检测同步字,同步字中包含的信息用于区分字的类型[13]。RT端发送的数据信息经过了曼彻斯特编码,因此在对接收数据进行解析前需要对其进行译码。译码后通过数据信息中的同步字判断该条信息的字类型,若字类型为命令字,需对同步字之后的相关数据进行解析,BC端依照该条命令字执行相应的操作;若字类型为接收数据字命令字,BC端需对后续RT端发送的数据字进行缓存,并发送状态字至RT端;若字类型为发送数据字命令字,BC端需读取缓存的数据至RT端。1553B协议模块设计框图如图6所示。
图6 CAN1553B协议模块设计框图
2.1553B协议字格式
依照1553B传输协议,数据在总线上传输时其允许最大长度为32个字,每个字包含20 bit[14]。数据帧按照不同的类型划分可以分为命令、状态、数据。不同类型的字格式见图7所示。
图7 不同类型的字格式
3.1553B协议数据字收发
1553B总线控制器(BC端)与1553B协议模块(RT端)通讯时,BC端占有绝对控制权。因此,不论RT端接收还是发送数据,均由BC端控制。当RT端收到接收数据的命令字时,根据该命令字中的信息获取数据字的个数情况,判断RAM接收到的经过译码后的数据字的个数是否正确,发送相应的状态字给BC端。接收数据字流程如图8所示。
图8 1553B协议模块接收数据字流程
当RT端收到发送数据的命令字时,根据该命令字中的信息读取RAM中的指定字节个数的数据字,并对其进行曼彻斯特编码后发送至BC端。
为验证CAN模块收发数据的正确性,对收发模块均进行仿真测试。当CAN总线收发器检测到CAN总线上有数据时,产生中断信号给CAN控制器,然后将数据写入CAN控制器的接收缓存区中。接收完数据之后,清除中断标志。CAN口接收数据仿真图如图9所示。
图9 CAN口接收数据仿真图
向CAN总线上传输数据时,按照CAN协议帧格式,将数据首先发送至CAN总线控制器的发送缓存区中,然后驱动通过SPI接口发送数据至CAN总线上。CAN口发送报文仿真图如图10所示。
图10 CAN口发送数据仿真图
为验证1553B协议模块数据收发的正确性,编写测试文件,模拟BC端发送数据给RT端,其中RT端的地址为5'b00111。首先RT端发送命令字16'h3943,然后发送3个数据字16'hCA1C,16'hED9B,16'h8C93。BC端通过对接收到的命令字进行解析可知,BC端需要执行的操作是接收3个数据字。BC端将接收到的数据进行缓存之后发送状态字给RT端。RT端通过解析接收到的状态字可判断出数据是否被接收。1553B协议模块接收数据时的仿真图如图11所示。
图11 1553B协议模块接收数据仿真图
为验证系统中两总线之间的通信正确,分两部分进行测试。
1.由1553B总线发送数据字,经过1553B协议模块、数据格式转换模块,最后通过CAN模块将数据发送至CAN总线上。1553B总线上发送命令字16'h3D43,然后发送 3个数据字16'hC1C3,16'hE1CB,16'hE9D3。采用在线逻辑分析仪SignalTap对数据格式转换模块的输入信号进行抓取,如图12所示。
图12 数据格式转换模块的输入信号波形
为可以直观地观察到数据传输的正确与否,将CAN控制器中缓存的数据经由RS422发送模块发送至上位机进行显示,如图13所示。对比图12中的数据与串口助手收到的数据,验证了该数据流向的正确性。
图13 RS422发送的CAN总线数据
2.从CAN总线至1553B总线的传输验证与(1)相反。采用串口助手发送数据至CAN控制器接收缓存器中,然后通过数据格式转换模块,最后通过1553B协议模块将数据上发至1553B总线上。串口助手发送的数据为8'hCA,8'h9A,8'h8A,8'hC1,8'hC2,8'hE 2,8'hF1,8'h22。同样地,采用 SignalTap对输入到1553B协议模块的信号进行采集,如图14所示。对比串口发送的数据与图14中的波形,可知该数据流向正确。
图14 输入到1553B协议模块的信号采集
系统采用FPGA实现CAN总线与1553B总线之间的通信,充分发挥FPGA并行处理的优势,代替了ARM处理器实现1553B的通信,一方面缩减了产品的制造费用,另一方面使得产品的研发时间变短。经系统验证,该设计能够实现CAN总线与1553B总线之间的正确通信,满足了设计需求,对其他总线间的通讯提供了可靠的参考价值。