国产ReWorks操作系统下的CAN总线接口设计

(整期优先)网络出版时间:2024-07-05
/ 2

国产ReWorks操作系统下的CAN总线接口设计

王育东

(西安电子工程研究所  西安  710100)

【摘要】本文阐述了龙芯2K1000平台下、基于ReWorks操作系统下的CAN总线接口设计,通过对比分析VxWorks操作系统,基于龙芯2K1000处理器的数据手册,通过CAN总线参数配置、软件设计以及实际测试,充分验证国产操作系统下的可靠性与稳定性。

关键词:ReWorks操作系统、龙芯2K1000CAN总线

  1. 引言

随着大国博弈间的形势日趋加剧,自主可控设计逐渐成为项目设计的关键因素。随着电子信息技术发展的日趋成熟,嵌入式系统软硬件设计也变的更加灵活,基于进口CPU和进口操作系统的产品设计尽管在产品可靠性、成熟性比国产软件硬件有很大优势,但在安全性方面面临很大挑战。因此,国产化操作系统搭配国产化硬件逐渐称为设计的主流,也将成为未来的趋势。常见的进口实时操作系统有VxWorks[1]、μC/OS、linux等;常见的国产化操作系统有锐华ReWorks、风云翼辉(AIC-OS)[2]、道、天脉等;常见的国产化CPU有飞腾FT-2000/4、LS2K1000、LS3A1000等[3]。通过自主可控优化设计,能够满足军事应用需求,同时提升装备在信息安全下的自主保障能力。本文主要说明基于龙芯2K1000的国产ReWorks操作系统下的CAN总线接口设计,通过软件设计,仿真,最终在测试板卡上完成验证。

  1. 系统介绍

对比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功能。

  1. CAN总线配置
    1. 标准帧、扩展帧以及屏蔽码和滤波码

标准模式下,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总线配置与收发结果

  1. 结论:

本文阐述了Reworks操作系统下的CAN总线接口设计,基于龙芯2K1000平台,分别描述了CAN总线的原理,CAN总线寄存器配置、波特率设置以及CAN总线数据结构体的定义。最后,通过实物仿真验证方法有效,数据传输可靠、无丢包现象。

参考文献:

[1]赵昶宇,胡平.VxWorks下多核编程[D].天津:天津津航计算技术研究所.2023

[2]雷超文,田文波.基于田基信息系统的数据分发技术研究 [D].上海:上海航天电子技术技术研究所.2022

[3]王悦 王树争 白云逸.基于LS2K1000-K处理器全国产化模块设计 [D].西安: 航空工业西安航空计算技术研究所.2024