宋耀东,于 淼,杜 雪,李 军
(中国电子科技集团公司第二十七研究所,河南郑州 450047)
CAN 总线指的是控制器局域网(Controller Area Network,CAN)总线,是最先由德国博世公司提出的用于汽车控制的一种实时应用的串行通信协议总线网络,因其具有高性能、高可靠性、高实时性和配置灵活等特点,已经成为世界上应用最多的现场总线之一[1-3]。标准CAN 协议对物理层及数据链路层进行了定义,但在实际应用中还要对应用层进行协议明确[4-5]。常见的应用层协议有DeviceNET、J1939、CANOpen 等,这些协议偏重于通用性,其价格昂贵、结构复杂,不适用于具体应用。因此,通常需要针对具体应用,根据标准CAN 协议设计相应的具体应用总线协议[6]。
随着航天航空电子综合化技术的发展,航天航空器内部的系统功能复杂化和体量庞大化的同时,不同设备之间需要快速、可靠的通信。只有采用实时、稳定、可靠的数据传输技术才能实现此种需求[7]。目前,航天飞行器内部常用总线有1553B 总线、CAN 总线等。1553B 总线采用双余度和指令/响应方式异步通信的可靠性设计,在提高可靠性的同时,其成本也居高不下;而CAN 总线拥有很高的性价比,采用CAN 总线能够降低飞行器的研制成本[8]。为满足某航天项目多节点高可靠总线通信的需求,从高性能、高可靠性、低成本的角度设计了一种基于TMS320F28335 的CAN 总线的硬件接口、通信协议与软件配置。
CAN 总线是一种有效支持实时控制或分布式控制的串行通信网络。CAN 总线中的设备都可以通过其控制单元上的CAN 总线接口进行数据的接收和发送,它是一个多路传输系统,当某一单元出现故障时不会影响其他单元的工作。CAN 总线中数据在串联总线上可以单个顺序传送,符合ISO11898 标准。最大传输距离和传输速率成反比,传输速率为1 MB/s时,最大传输距离为40 m;传输速率为5 kB/s 时,最大传输距离为10 km。在传输介质方面多采用双绞线、同轴电缆等形式。
在标准CAN 通信协议中,有远程帧、数据帧、超载帧和错误帧等4 种不同的帧格式。该文对应的CAN 总线协议中只使用数据帧进行通信,数据帧仲裁段采用CAN2.0B 扩展格式。利用总线控制器的29 位扩展标识符来定义协议中的重要信息(如发送、接收设备等),通讯速率设为500 kbps,因此,相对应的最大通信距离为130 m。
文中设计的CAN 总线网络是手拉手形式,连接示意图如图1 所示。
图1 CAN总线网络通信节点连接方式
每台设备的通信接口采用一入一出两个插座,并在设备内部将两个插座的对应接点一一联接,通过双绞电缆网把各接点一一对应联接。终端电阻安置在电缆线的两端或者两端节点的内部。
每台设备使用两个9 芯插座的标准连接器,这两个9芯插座的接点分配完全一致,两个连接器各对应点在设备内相互短接,一个用于连接输入,一个用于连接输出,以方便形成整体链路。插座接点分配如表1所示。
表1 总线插座接点分配
CAN 总线网络采用双冗余的总线型网络结构,包括A、B 两条CAN 总线,结构如图2 所示。
图2 双冗余CAN总线网络结构
TMS320F28335 数字信号处理器是德州仪器公司出品的一款C2000 系列的浮点DSP 控制器,主频高达150 MHz。该DSP 控制器拥有强大的实时处理能力,并将控制器需要的核心外设功能集于一身,具有实时控制能力强、外设丰富、功耗小等特点。在CAN 通信方面,TMS320F28335 集成了两个全功能CAN2.0B 模块——eCAN-A 和eCAN-B,每个模块都具有32 个完整的、可独立配置的邮箱和时间戳,因此其拥有强大而灵活的CAN 串行通信接口。
CAN 总线接口芯片采用PHILIPS 公司的PCA82 C250,其管脚定义如表2 所示。
表2 PCA82C250管脚说明
TMS320F28335 与PCA82C250 的连接关系如图3所示。图中采用164245电平转换芯片实现3.3 V和5 V 电平之间的相互转换。
图3 CAN接口电路设计
正常位时间划分为以下4 个互不重叠的时间段:同步段(SYNC_SEG)、传播段(PROP_SEG)、相位缓冲段1(PHASE_SEG1)和相位缓冲段 2(PHASE_SEG2)。同步段总是等于1 个时间单元(TIME QUANTUM,TQ)。在TMS320F28335 的eCAN模块中,CAN 总线的位长度由TSEG1(组合了传播段和相位缓冲段1)、TSEG2(定义了相位缓冲段2)和BRP(通信速率预定标)3 个参数决定。位速率公式如下式所示[9]:
其中,BRPreg、TSEG1reg 和TSEG2reg 分别由寄存器BTC 的23-16 位、6-3 位和2-0 位决定。并且设置需要符合以下规则:
①TSEG1≥TSEG2;
②2TQ≤TSEG1≤16TQ;
③2TQ≤TSEG2≤8TQ;
④2TQ=3/BRP;
⑤如果设置了3 次采样模式,BRP≥5。
如果系统频率为150 MHz,设置BRPreg=9、TSEG1reg=10、TSEG2reg=2,那么CAN通信速率为500 kHz。
文中采用的是CAN2.0B 协议,是具有29 位标识符的扩展帧。其各个位的定义如表3 所示。
表3 CAN2.0B扩展帧位序表
需要注意的是,根据CAN 总线协议规范,在构成一帧的帧起始、仲裁场、控制场和CRC 序列均借助位填充规则进行编码,当CAN 发送器在发送的位流中检测到5 位连续的相同数值时,将自动地在实际发送的位流中插入一个补码位。比如,连续位流000000B,在实际发送中变为0000010B。而其余场采用固定格式,不进行填充。出错帧和超载帧也是固定格式,也不进行位填充。另外,标识符最高7 位(ID28-ID22)不能全是“隐性”电平,即ID28-ID22 不能全为“1”[10]。
将数据帧的29 位标识符分成4 部分,如表4所示[11-12]。
表4 数据帧标识符组成
优先级PRI 分为00B(备用)、01B(主节点控制命令)、10B(状态查询、遥测查询)和11B(保留)4 种。
站地址表示数据帧的目的地地址。各通信节点根据站地址设置屏蔽字,只接收与本通信节点有关的数据[13]。
帧类型分为两部分,ID20-ID19定义为00B(主节点发送的数据)、01B(从节点发送的数据)、10B(保留)和11B(保留);ID18来定义单帧(0B)和多帧(1B)。
单帧数据场第一字节为有效数据长度(字节数),第二字节为数据包信息标识(包括数据类型和发送端地址),第三字节开始为有效数据,数据包结尾为和校验的低字节[14]。
多帧数据起始帧数据场长度为8 字节,第一个字节为帧序0,第二个字节为数据包有效数据的长度(字节数),其他为数据[15];中继帧数据场长度为8 字节,第一个字节为帧序,其他为数据;结束帧数据场长度必须小于8 字节,第一个字节为帧序,其他为数据,结束帧有可能只包含一个字节的帧序号[16]。信息数据包格式如表5 所示。
表5 信息数据包格式
信息数据标识分为高3 比特(数据类型同标识符的帧类型TYPE)和低5 比特(发送端站地址)。
校验和是从序号0 到N的数据累加和的低字节。
根据上述规则设计以及TMS320F28335 寄存器设计,主节点控制ID、主节点查询ID、从节点控制ID、从节点查询ID 示例如表6 所示。
表6 节点ID设置示例
根据上表,主节点控制ID 设置为0x89200000,主节点查询ID 设置为0x91200000,从节点控制ID 设置为0x89690000,从节点查询ID 设置为0x916 C0000。
TMS320F28335 的eCAN 配置、发送数据和接收数据的步骤为:
1)使能CAN 模块的时钟;
2)设置CANTX 和CANRX 引脚到CAN 功能;
3)配置MC.SCB:0 为普通模式;1 为增强模式。该文配置为1;
4)初始化消息控制寄存器。MBOX0 到MBOX31的MSGCTRL 清零;
5)发送标志TA、接收标志RMP、中断标志GIF0、GIF1 写1 清零;
6)设置CCR=1,等到CCE=1,确认能够更改配置寄存器TC;
7)设置BRPreg=9、TSEG1reg=10、TSEG2reg=2;
8)设置SAM=1,采样3 次;
9)设置CCR=0,等到CCE=0,关闭配置寄存器TC 通道;
10)将寄存器ME 清零,以配置邮箱ID;
11)分配邮箱ID,比如邮箱0 的ID 设置为0x89200000,邮箱1 的ID 设置为0x91200000,邮箱2的ID 设置为0x89690000,邮箱3 的ID 设置为0x916 C0000;
12)设置邮箱方向,比如设置邮箱0和邮箱1为发送邮箱(MD=0);邮箱2 和邮箱3 为接受邮箱(MD=1);
13)使能邮箱,比如使能邮箱0,ME0=1;
14)设置邮箱数据区长度,比如邮箱0 数据区长度为8,MBOX0.MSGCTRL.bit.DLC=8;
15)设置发送邮箱的数据区数据,比如MBOX0.M DL.all=0x55AA55BB,MBOX0.MDH.all=0x11 223344;
16)设置发送邮箱发送标志位,比如TRS0=1;等到发送应答标志TA0=1;置位TA0=1,写1 清零,清除发送应答位;
17)接收数据时,接收邮箱的消息挂起寄存器(RMP)中的相应位为1,比如邮箱16,判断RMP16=1,即表明邮箱接收到了数据;接收程序首先将RMP16写1 清零,以便接收下一轮数据。
利用两个CAN 节点对文中硬件和软件设计进行测试,设置为扩展帧,速度为500 kbps,CAN 的ID设置同2.4节保持一致,数据长度设置为8字节。主CAN控制命令测试数据设置为0x55AA55BB11223344、查询命令测试数据设置为0x55CC55DD66 778899;从CAN 控制回复测试数据设置为0x7EE7BBAA010 20304、查询回复测试数据设置为0x7EE7DDCC060 70809。
测试流程为:1)主CAN 向从CAN 发送控制命令,从CAN 回复控制命令;2)主CAN 向从CAN 发送查询命令,从CAN 回复查询命令。通过CANtest 软件监控CAN 总线数据。监控结果如图4 所示。
图4 CANtest软件监控数据
图4 中第一行数据对应主CAN 向从CAN 发送控制命令数据,第二行数据对应从CAN 回复控制命令数据,第三行对应主CAN 向从CAN 发送查询命令数据,第四行对应从CAN 回复查询命令数据。可以看出数据与设定值一致。
另外注意帧ID,此图中帧ID 不完全等于所设定的帧ID,是因为TMS320F28335 设置的ID 格式中第31 到29 位不属于CAN 的ID范围,而第28位到0 位是CAN 扩展帧的29 位ID。
通过示波器观测CAN 数据的位时间,实测结果如图5 所示。可以看出,位时间为2 μs,与设置的500 kbps 一致。
图5 CAN数据波形图
1)根据CAN 总线通信规范,设计了CAN 总线多节点通信网络;根据TMS320F28335 处理器eCAN 外设特点,设计了CAN 总线接口电路;
2)介绍了CAN 位速率计算方法和CAN 扩展型数据帧的位序构成,设计了CAN 总线数据帧格式,并给出了ID 设置示例;
3)根据TMS320F28335 处理器eCAN模块的设置规则,对该模块进行了软件配置,最终实现了CAN总线多节点的收发通信;
4)项目的后续多机CAN 通信需求可根据文中所设定的通信格式进行协议制定。