基于DSP和FPGA环境下的CAN总线实现

2017-06-30 08:24王皓
科技视界 2017年5期

王皓

【摘 要】随着当代航空平台的飞速发展,各类航电系统愈发趋向于综合化。CAN(control area network)总线因其传输速率高、传输稳定、连接节点多、扩展方便等特点非常适用于综合导航子系统。本文介绍了CAN总线的详细性能特点以及CAN总线控制器SJA1000的配置使用方法,并基于DSP+FPGA+SJA1000实现了单个导航功能模块在综合导航子系统中的通讯。

【关键词】综合导航系统;CAN-BUS总线;DSP;SJA1000

【Abstract】With the development of airborne platforms, all kinds of avionics systems tend to be integrated.CAN BUS has a lot of characteristics such as high speed, transmission stability, more connection node, and convenient extension. Its very suitable of integrated navigation subsystem. This page introduces the performance feature of CAN BUS and the configuration method of CAN BUS controller SJA1000. This page Use DSP+FPGA+SJA1000 to realize the communication of single navigation functional module in integrated navigation subsystem.

【Key words】Integrated navigation subsystem; CAN BUS; DSP; SJA1000

0 引言

综合导航子系统,作为综合航电系统中一个非常重要的子系统,具备微波着陆(MLS)、仪表着陆(ILS)、塔康(TACAN)、伏尔(VOR)、指点信标(MB)、卫星导航(GPS)、敌我识别(IFF)、链路通信等功能。将众多功能融入一个子系统中,就需要负责通讯的总线具备安全可靠、兼容性好、传输快等特点。CAN(control area network)控制器局部网属于现场总线的范畴,它是一种开放式、数字化、多主方式的网络通信协议,有效支持分布控制或实时控制的串行通讯网络。CAN总线采用双线串行通信方式,通信介质为双绞线、铜轴电缆或光纤,检错能力强,可在航空平台这种高噪声、复杂电磁环境中工作;具备多主工作方式,且各节点信息分成不同的优先级,采用非破坏性逐位仲裁技术,优先级较低的信息会让优先级高的信息优先发送,可满足各功能的实时要求;采用短帧结构,通信速率高(可达1Mbps,此时传输距离40M);每帧数据都带有CRC校验,出错率低,节点在严重错误情况下会自动关闭等;这些特性使CAN总线非常适用于构建多功能模块的综合导航子系统。

1 硬件电路实现

如图1所示,单功能导航模块硬件系统信号处理板框图,其主要核心是两个处理芯片,即FPGA(v4)和DSP(TI6400)。其中FPGA主要作用是作为DSP和外围接口的桥梁及中频信号的采样和滤波、解调,DSP作为数据解算核心和接口控制核心。FPGA通过数据总线将前端射频模块处理完毕的中频信号进行采样、滤波等操作,再把数据存放在指定的内建存储器上。DSP通过EMIF总线接口读取相应的数据,并作数据解算处理和接口控制指令的执行。

CAN控制器SJA1000是Philips公司生产具有BasicCan模式(符合CAN 2.0A协议)和PeliCan模式(符合CAN2.0B协议),I/O接口为OC门,电平为5V,提供Intel和Motorola两种寻址方式。在本文中,CAN控制器SJA1000采用Intel地址数据多路复用总线模式。主要信号线有地址数据复用线AD7~AD0,地址选通线ALE为低电平,片选线/CS,读使能/RD,写使能/WR。在Intel模式下读写SJA1000时,地址和數据是分时传送的,地址在前,数据在后。ALE为高电平时,为地址总线周期;当ALE为低电平,/CS为低电平,/RD或/WR为低电平时,为数据总线周期。SJA1000总线读写周期时序如图2.

SJA1000的数据和地址信号为分时复用的,而FPGA中不存在地址的概念,设计的关键就是要把SJA1000中的寄存器地址当作数据写入。图3为对SJA1000中寄存器的读写状态机流程图。

2 SJA1000初始化

根据设计原理,SJA1000工作在PeliCan模式下,其内部寄存器对于微控制器而言,表现为片上内存映射的外部寄存器,共128个字节。在工作模式下和复位模式下,其具有不同的内部地址定义。表1:列出了SJA1000在PeliCan模式、CAN信息采用扩展帧形式下的内部寄存器地址的分配情况。

模块上电工作后DSP先通过FPGA对SJA1000芯片的模式寄存器(MODR)、命令寄存器(CMR)、中断使能寄存器(IER)、时钟分频寄存器(CDR)、总线定时器(BTR)验收代码寄存器(ACR),验收屏蔽寄存器(AMR)、输出控制寄存器(OCR)等寄存器进行读写(每个寄存器的地址空间都是一个字节),对波特率、屏蔽码、校验码、工作模式等进行初始化,流程图如图4:

MODR:将模式寄存器的0位置1进入复位模式,复位模式下将寄存器的1位和2位分别置0,CAN总线使用正常模式;将寄存器3位置1,使用单滤波模式;将模式寄存器的0位置0后,SJA1000退出复位模式,进入正常工作模式。

IER:将中断使能寄存器的0位置,关闭当SJA1000接收缓存器“满”时产生的接收中断。

CMR:将命令寄存器的1位置1,停止上一个发送请求;并将2位置1,释放接收缓冲器FXFIFO中存储的报文。

CDR:将时钟分频寄存器的3位置1,关闭时钟;将7位置1,使用Pelican模式。

ACR/AMR:验收滤波器由验收代码寄存器(ACR) 和验收屏蔽寄存器(AMR)定义。要接收的报文的位组合格式在验收代码寄存器中定义,相应的验收屏蔽寄存器允许定义某些位“不相关”。本模块使用单滤波模式,CAN报文为扩展帧,所以其过滤原理如图5.根据协议配置ACR0,ACR1,ACR2,ACR4和AMR0,AMR1,AMR2,AMR3寄存器,来实现节点过滤总线上其它模块的CAN报文信息。

OCR:在复位模式下将控制寄存器的0位置0,1位置1,使用正常输出模式;

BTR:根据波特率计算公式,将总线定时器0的赋值0x31,;根据周期长度,采样点位置和数目,将总线定时器1赋值0x1c,此时波特率位500Kbps。

3 数据的收发

CAN节点的接收程序要完成检测CAN控制器状态,确定接收缓冲器中有可读取报文。读取接收缓冲器中的数据,释放接收缓冲器。读取仲裁丢失捕捉寄存器,和错误代码捕捉寄存器,

CAN节点的接收方式可以采用查询方式,即按照一定周期查询状态寄存器(SR),当接收缓冲器中有可用报文时读取。这种方式虽然简单,但严重影响了系统的实时性。因此该模块采用中断方式进行接收数据,当有可用报文进入接收缓冲器后,SJA1000产生接收中断,DSP读取数据寄存器取报文。然后将命令寄存器(CMR)的2位置1,释放接收缓冲器的内存空间,最后读取仲裁随时捕捉寄存器(ALC)和错误代码捕捉寄存器(ECC)以此来释放ALC和ECC。

CAN节点的发送程序要完成的任务为根据报文要发送的目的地址,正确配置报文标识符寄存器,准备要发送的数据,配置相应的寄存器,在SJA1000可以发送报文时启动报文发送。其流程图如图7:

当DSP需要发送CAN报文时,DSP先通过FPGA读取SJA1000的SR(状态寄存器)的4位,以此来确定是否正在接收报文。当无可接收报文时再去查询SR的3位,来确定上一个报文发送是否完毕。上一个报文发送完毕后DSP去查询SR的2位,来确定发送缓存器是否被锁定。只有发送缓存器没有被锁定后再将需要发送的CAN报文依次写入TXBSR(发送缓存器)中,最后将CMR(命令寄存器)的0位置1将TXBSR中的CAN报文发送出去,CAN帧格式在本文中就不进行赘述了。

4 总结

上述内容详细介绍了单个导航功能模块在以CAN总线为通信基础的综合导航子系统中的硬件实现方式和软件实现方式。硬件采用DSP+FPGA+SJA1000的基本配置方式,利用此种方式降低了软件调试难度,减轻处理器运行负载,给导航功能留足充分的计算能力。软件实现方法采用CAN2.0B、扩展帧、PeliCan模式,最大限度的提高了总线使用性能指标。

【参考文献】

[1]李真花,崔健,等.CAN总线轻松入门与实践.北京.北京航空航天大学出版社.

[2]唐苗,等.CAN总线技术及其在鱼雷制导系统中的应用.西安.西北工業大学航海学院.2006.

[3]岳奎,刘少君,等.SJA1000内存器的VHDL语言读写设计与应用.广州.计算机与数字工程.2009,10.

[4]马丽,崔海东,等.飞机综合导航系统浅议.汉中.科技视界.

[5]姚君,等.基于状态机方法的CAN总线通信的FPGA实现.长春.应用天地.2015,3.

[责任编辑:朱丽娜]