CAN总线控制器SJA1000

1.CAN总线

控制器局域网总线(CAN,Controller Area Nerwork)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。CAN协议用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。该协议的健壮性使其用途延伸到其它自动化和工业应用。

CAN总线控制器分为两种,一种是可以直接与MCU连接的控制芯片(如sja1000),另一种是集成在SOC中适用APB总线接口的CAN IP。

MCU控制的CAN总线系统结构如下所示。
在这里插入图片描述
CAN-bus通信帧共分为数据帧、远程帧、错误帧、过载帧和帧间隔五种类型。数据帧由结构上由7个段组成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)。
在这里插入图片描述
在CAN总线上,默认保持高电平,只要有一个节点发出低电平,总线上的电平就变为低电平,只有当所有节点保持为电平时,总线上才会保持为高电平。所以,显性为低电平,隐性为高电平。

帧起始和帧结束用于界定一个数据帧,无论是标准帧还是拓展帧,都有帧起始和帧结束。
在这里插入图片描述

1.1仲裁过程

仲裁有三大规则:
1.帧ID值越小,优先级越高。
在这里插入图片描述
2.数据帧优先级比远程帧优先级高。
在这里插入图片描述
3.标准帧优先级比拓展帧高。
在这里插入图片描述

1.2控制段

在这里插入图片描述

1.3数据段

在这里插入图片描述

1.4CRC段

在这里插入图片描述

1.5ACK段

在这里插入图片描述

1.6远程帧

在这里插入图片描述
在这里插入图片描述

2.滤波器设置

CAN总线的滤波器设置就像给总线上的节点设置了一层过滤网,只有符合要求的CAN信息帧才可以通过,其余的一概滤除。

在验收滤波器的帮助下,只有当接收信息中的识别位和验收滤波器预定义的值相等时,CAN 控制器才允许将已接收信息存入RXFIFO。

验收滤波器由验收代码寄存器(ACRn)和验收屏蔽寄存器AMRn 定义,要接收的信息的位模式在验收代码寄存器中定义,相应的验收屏蔽寄存器允许定义某些位为“不影响”,即可为任意值。

在SJA1000复位模式下,设置寄存器CDR.7为“0”,即设置CAN控制器SJA1000工作于BasicCAN模式,CDR.7为1,即Pelican模式。

有两种不同的过滤模式可在模式寄存器中选择MOD.3, AFM。
单滤波器模式:AFM 位是1;
双滤波器模式:AFM 位是0。

2.1单滤波器设置

(1)接收CAN标准帧时单滤波器配置

对于标准帧,11位标识符、RTR位、数据场前两个字节参与滤波;

对与参与滤波的数据,所有AMR为0的位所对应的ACR位和参与滤波数据的对应位必须相同才算验收通过;

如果由于置位RTR=1 位而没有数据字节,或因为设置相应的数据长度代码而没有或只有一个数据字节信息,报文也会被接收。对于一个成功接收的报文,所有单个位在滤波器中的比较结果都必须为“接受”;

注意AMR1 和ACR1 的低四位是不用的,为了和将来的产品兼容,这些位可通过设置AMR1.3、AMR1.2 、AMR1.4和AMR1.0 为1 而定为“不影响”。
在这里插入图片描述
举例:如何设置单滤波,接收标识符为0000 1010 010的CAN标准帧?

在SJA1000复位模式下,设置寄存器CDR.7为“1”,即设置CAN控制器SJA1000工作于PeliCAN模式。

设置模式寄存器的验收滤波器模式位(AFM)为1,选择单滤波器模式;

设置验收代码寄存器ACR0=0x0A、ACR1=0x40、ACR2=ACR3=0x00;

根据单滤波器时信息帧与滤波器的位对应关系,将需要参与滤波的信息位对应的验收屏蔽寄存器位设置为0,设置AMR0=0x00,AMR1=0x0F、AMR2=AMR3=0XFF;

如此设置,SJA1000接收标识符ID.28~ID.18为0000 1010 010的CAN标准帧。

(2)接收CAN扩展帧时单滤波器配置

对于扩展帧,29位标识符和RTR位参与滤波;

对与参与滤波的数据,所有AMR为“0”的位所对应的ACR位和参与滤波数据的对应位必须相同才验收通过滤波;

必须注意的是AMR3和ACR3的最低两位是不用的。为了和将来的产品兼容,这些位应该通过置位AMR3.1和AMR3.0为“1”来定为“不影响”。
在这里插入图片描述
举例:如何设置单滤波,接收标识符ID.28~ID.0为0000 1010,0100 1010,0110 1011,1110 1的CAN扩展帧?

在SJA1000复位模式下,设置寄存器CDR.7为“1”,即设置CAN控制器SJA1000工作于PeliCAN模式。

设置模式寄存器的验收滤波器模式位(AFM)为1,选择单滤波器模式;

设置验收代码寄存器ACR0=0x0A、ACR1=0x4A、ACR2=0x6B、ACR3=0XE8;

根据单滤波器时信息帧与滤波器的位对应关系,将需要参与滤波的信息位对应的验收屏蔽寄存器位设置为0,设置AMR0=0x00,AMR1=0x00、AMR2=0x00、AMR3=0X03;

2.2双滤波器设置

这种配置可以定义两个短滤波器,由4个ACR和4个AMR构成两个短滤波器。总线上的信息只要通过任意一个滤波器就被接收。

滤波器字节和信息字节之间位的对应关系取决于当前接收的帧格式。

(1)接收CAN标准帧时双滤波器配置

如果接收的是标准帧信息,被定义的两个滤波器是不一样的。

第一个滤波器由ACR0、ACR1、AMR0、AMR1以及ACR3、AMR3低4位组成,11位标识符、RTR位和数据场第1字节参与滤波;

第二个滤波器由ACR2、AMR2以及ACR3、AMR3高4位组成,11位标识符和RTR位参与滤波。

为了成功接收信息,在所有单个位的比较时,应至少有一个滤波器表示接受。RTR 位置位“1”或数据长度代码是“0”,表示没有数据字节存在;只要从开始到RTR 位的部分都被表示接收,信息就可以通过滤波器1。

如果没有数据字节向滤波器请求过滤,AMR1和AMR3的低4位必须被置为“1”,即“ 不影响”。此时,两个滤波器的识别工作都是验证包括RTR 位在内的整个标准识别码。
在这里插入图片描述
举例:如何设置双滤波,接收标识符ID.28~ID.18为0000 1010,010或ID.28~ID.18为01101011,111,且DATA Byte1 = 0x55 的两类CAN标准帧?

在SJA1000复位模式下,设置寄存器CDR.7为“1”,即设置CAN控制器SJA1000工作于PeliCAN模式。

设置模式寄存器的验收滤波器模式位(AFM)为0,选择双滤波器模式;

滤波器1配置为:
ACR0=0x0A、ACR1=0x45、ACR3(bit3-bit0)=0x5;
AMR0= 0x00、AMR1=0x00、AMR3(bit3-bit0)=0x0;
滤波器2配置为:
ACR2= 0x6B、ACR3(bit7-bit4)=0xE;
AMR2=0x00、 AMR3(bit7-bit4)= 0x0;

(2)接收CAN扩展帧时双滤波器配置

如果接收到扩展帧信息,定义的两个滤波器是相同的。

第一个滤波器由ACR0、ACR1和AMR0、 AMR1构成;

第二个滤波器由ACR2、ACR3和AMR2、 AMR3构成;

两个滤波器都只比较扩展识别码的前两个字节,即29位标识符中得高16位。

为了能成功接收信息,所有单个位的比较时至少有一个滤波器表示接收。

在这里插入图片描述

举例:如何设置双滤波,接收标识符ID.28~ID.13为0000 1010,0100 1010和ID.28~ID.13为0110 1011,1110 1001的两类CAN扩展帧?

在SJA1000复位模式下,设置寄存器CDR.7为“1”,即设置CAN控制器SJA1000工作于PeliCAN模式。

设置模式寄存器的验收滤波器模式位(AFM)为0,选择双滤波器模式;

设置验收代码寄存器ACR0=0x0A、ACR1=0x4A、ACR2=0x6B、ACR3=0XE9;

根据双滤波器时信息帧与滤波器的位对应关系,将需要参与滤波的信息位对应的验收屏蔽寄存器位设置为0,设置AMR0=0x00,AMR1=0x00、AMR2=0x00、AMR3=0X00

3.初始化设置

在对CAN控制器进行初始化设置时,必须先设为复位模式

(1)置位模式寄存器Bit0位进入复位模式;

(2)设置时钟分频寄存器选择时钟频率、CAN模式;

(3)设置验收滤波,设定验证码和屏蔽码;

(4)设置总线定时器寄存器0、1设定CAN波特率;

(5)设置输出模式;

(6)清零模式寄存器Bit0位退出复位模式;

(7)发送数据时,需要设置CMR寄存器,配置发送请求或者自测试请求,然后将发送数据写入发送buffer(在写入时,需要查看状态寄存器,发送buffer是否为释放状态,如果是在锁定状态写入数据,那么数据会丢失,并没有任何提醒!);接收数据时,将数据从接收buffer读取后,需要设置CMR寄存器,释放接收buffer,这样才可以读取后面的数据。

初始化代码如下所示:
在这里插入图片描述

参考资料

1.CAN总线系列讲座第六讲——SJA1000的滤波器设置
2.CAN-bus现场总线基础教程【第3章】CAN控制器驱动-SJA1000初始化(11)
3.CAN协议,系统结构和帧结构

  • 21
    点赞
  • 221
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值