图5 SJA1000写时序(Intel模式)
按照SJA1000的数据手册,确保SJA1000的读写正确,如下的时序参数必须满足:
l tW(AL):必须保证ALE的时间,最小不能小于8ns;
l tLLRL/tLLWL:读写时ALE无效到读写信号有效的时间,最小不能小于10ns;
l tLCRL/tLCWL:片选信号有效后读写信号有效的时间,最小不能小于0,即片选有效必须出现在读写信号有效前;
l tW(R):读信号有效宽度,最小不能小于40ns;
l tW(R):写信号有效宽度,最小不能小于20ns;
l tWHLH:写信号无效到下一次ALE有效的时间,最小不能小于15ns;
l th(AL-A):在ALE为低电平后地址应该保持时间,最小不能小于2ns。
CPU和CAN总线接口采用地址直接映射。接口时序设计重点是接口控制逻辑必须产生符合上述关键参数的读写时序。如果简单的按照ALE<=not nADS方法处理,不满足要求时序关系,这在调试过程中已经得到验证。为此,在设计中采用了FPGA技术,以求很好地解决CAN总线与CPU的接口问题。图6描述了通过VHDL编写实现接口电路的状态转移图和FPGA设计产生的读写CAN总线时序,其中时钟周期不低于67ns,该时序满足SJA1000要求。
图6 CAN总线接口时序设计的状态转移和时序
6 CAN总线通讯软件的设计
双冗余总线结构的通讯软件主要由初始化、接收和发送三个模块组成,控制流图见图7。在程序设计时采用了SJA1000的Basic模式,初始化中需要对BUS0和BUS1分别进行初始化,包括SJA1000的控制寄存器、接收代码寄存器、接收屏蔽寄存器、总线时序寄存器等。
图 7 CAN总线通讯软件的控制流图
发送模块采用主动发送方式,BUS0为优先通讯通道,若BUS0通道状态不正常,则启动BUS1通道进行通讯,并对BUS0通道进行初始化以备下次通讯时使用。
接收模块采用中断接收方式,为了保证接收到的数据被实时处理,CAN总线的接收中断被设置为高优先级中断。在接收中断中首先判断接收通道是BUS0还是BUS1,然后从接收通道按数据长度进行数据接收。
7 结束语
CAN总线技术的诸多优点如实时性好,通信速率高,抗干扰能力强,低廉的价格等使它不仅广泛应用于工业控制领域,而且开始向航天领域进军。其COTS工业级器件SJA1000经过飞行也得到了验证,CAN总线适宜航天应用的特点得到了充分的展示和飞行验证。