(西安电子工程研究所 西安 710100)
【摘要】本文阐述了龙芯2K1000平台下、基于ReWorks操作系统下的CAN总线接口设计,通过对比分析VxWorks操作系统,基于龙芯2K1000处理器的数据手册,通过CAN总线参数配置、软件设计以及实际测试,充分验证国产操作系统下的可靠性与稳定性。
关键词:ReWorks操作系统、龙芯2K1000、CAN总线
随着大国博弈间的形势日趋加剧,自主可控设计逐渐成为项目设计的关键因素。随着电子信息技术发展的日趋成熟,嵌入式系统软硬件设计也变的更加灵活,基于进口CPU和进口操作系统的产品设计尽管在产品可靠性、成熟性比国产软件硬件有很大优势,但在安全性方面面临很大挑战。因此,国产化操作系统搭配国产化硬件逐渐称为设计的主流,也将成为未来的趋势。常见的进口实时操作系统有VxWorks[1]、μC/OS、linux等;常见的国产化操作系统有锐华ReWorks、风云翼辉(AIC-OS)[2]、道、天脉等;常见的国产化CPU有飞腾FT-2000/4、LS2K1000、LS3A1000等[3]。通过自主可控优化设计,能够满足军事应用需求,同时提升装备在信息安全下的自主保障能力。本文主要说明基于龙芯2K1000的国产ReWorks操作系统下的CAN总线接口设计,通过软件设计,仿真,最终在测试板卡上完成验证。
对比VxWorks和锐华ReWorks、风云翼辉(AIC-OS)、道和天脉这几种系统,ReWorks操作系统基本兼容VxWorks,且基于项目的继承性和可移植性,本文讨论龙芯2K1000下,基于ReWorks下的CAN接口设计。CAN总线作为常见的一种数据总线,具有可靠性高,稳定性好,虽然传输速率相对其他总线略低,但是实时性,节点之间数据的协调性、系统的可靠性比较高。
CAN总线是由发送数据线Tx和接收数据线Rx构成的串行总线,可发送和接收数据。器件与器件之间进行双向传送,龙芯2K1000集成了两路CAN接口控制器,接口电压为3.3V,最高传送速率1Mbps。两路CAN接口与GPIO管脚复用,通过地址为0x1fe10420的寄存器中bit17和bit16位can_sel进行设置,can_sel为1,管脚为CAN功能,否则为GPIO功能。
标准模式下,CAN控制器的有效ID是11位;扩展模式下,CAN控制器的有效ID是11位或29位。扩展模式下,在接收不同格式的帧的时候,验收代码0~验收代码3(code0~code3)所检查的内容有所不同。验收屏蔽码0~验收屏蔽码3(mask0~mask3)对应验收代码0~验收代码3。如果验收屏蔽码的某1位为1,则对应的验收代码的那一位就不参与对接收包的ID的检查。
扩展模式下,CAN控制器可以对接收到的消息包进行单滤波也可以进行双滤波。在进行单滤波时,验收代码0~验收代码3仅对单一ID进行过滤。在进行双滤波时,验收代码0~验收代码3可以对两个不同的ID进行。CAN控制器只将ID符合滤波条件的消息包存入接收缓冲区,本项目使用29位的单滤波,滤波码设置如下:
(rx_id[28:21]==code0)&&(rx_id[20:13]==code1)&&(rx_id[12:5]==code2)&&(rtr==code3[2])&&(rx_id[4:0]==code3[7:3])
3.2.波特率设置
CAN总线波特率计算公式如下:
1bit time=internal_clock_time*((BRP+1)*2)*(1+(TESG2+1)+(TESG1+1))
通过总线定时寄存器0(BTR0)和总线定时寄存器 1(BTR1)进行设置,寄存器设置如表 1所示,其中核心板的内部时钟internal_clock_time=125MHz。
表 1 总线定时寄存器
位域 | 位域名称 | 位宽 | 访问 | 描述 | |
总线定时寄存器1(BTR1) | 7:6 | SJW | 5 | RW | 同步跳转宽度 |
5:0 | BRP | 8 | RW | 波特率分频系数 | |
总线定时寄存器1(BTR1) | 7 | SAM | 1 | RW | 为1时三次采样,否则是一次采用 |
6:4 | 1ESG2 | 3 | RW | 一个bit 中的时间段 2 的计数值 | |
3:0 | TSEG1 | 4 | RW | 一个bit中的时间段 1 的计数值 |
根据以上参数,常见的波特率计算以及寄存器设置如下:
目标波特率/Kbps | internal_clock_time | BTR0 | BTR1 | 1bit time | 8bit time | 实际波特率/Kbps |
50 | 8ns | 71 | 7F | 2500us | 20us | 50 |
100 | 58 | 7F | 1250us | 10us | 100 | |
125 | 53 | 7F | 1000 | 8us | 125 | |
250 | 49 | 7F | 500 | 4us | 250 | |
500 | 44 | 7F | 250 | 2us | 500 | |
800 | 85 | 37 | 156 | 1.248us | 801.2820513 | |
1000 | 42 | 6C | 126 | 1.008us | 992.0634921 |
3.3.软件设计:
CAN数据配置与收发如图 1所示,CAN数据结构体定义如下:
CAN数据结构体定义如下:
typedef struct TS_CAN_PACKET
{
unsigned long CAN_ID;//CAN ID
unsigned char rtr;//0表示数据帧,1表示远程帧
unsigned char len;
unsigned char reserved;
unsigned char ext;//0表示标准帧;1表示扩展帧
unsigned char data[8];
unsigned long time;
}CAN_PACKET;
CAN配置结构体定义如下:
typedef struct TS_PORT_STRUCT
{
int mode;//0为双滤波;1为单滤波
unsigned long accCode;//在此的ID为左对齐
unsigned long accMask;//在此的ID为左对齐
int baudrate;
unsigned char brp,tseg1,tseg2;
unsigned char sjw,sam;
}PORT_STRUCT;
该项目使用的波特率是500Kbps,采用单滤波,扩展帧数据帧,具体如下所示:
CANBaudRateSet(can_fd1,500000);
CANFilter1=0x10000000;
CANMask1=0xEFFFFFF8;
cancfg.mode = 1;
cancfg.accCode = CANFilter1;
cancfg.accMask = CANMask1;
ioctl(can_fd1,CAN_SET_FILTER,&cancfg);
图 1 ReWorks系统下CAN总线配置与收发结果
本文阐述了Reworks操作系统下的CAN总线接口设计,基于龙芯2K1000平台,分别描述了CAN总线的原理,CAN总线寄存器配置、波特率设置以及CAN总线数据结构体的定义。最后,通过实物仿真验证方法有效,数据传输可靠、无丢包现象。
参考文献:
[1]赵昶宇,胡平.VxWorks下多核编程[D].天津:天津津航计算技术研究所.2023
[2]雷超文,田文波.基于田基信息系统的数据分发技术研究 [D].上海:上海航天电子技术技术研究所.2022
[3]王悦 王树争 白云逸.基于LS2K1000-K处理器全国产化模块设计 [D].西安: 航空工业西安航空计算技术研究所.2024