国民技术单片机CAN接口参数配置说明及应用Application Note
说明:本文为国民技术Arm Cortex系列单片机的CAN参数配置参数说明部分章节,可适用于国民技术所有32位MCU的CAN参数配置,若您需要完整的配置说明手册或其它技术支持,请联络国民技术代理商深圳市绿都电子有限公司,联络方式:Email: philip.yf@szlvdu.com,0755-83777478,18688790400(微信同号)。
bxCAN 指的是基本扩展 CAN(Basic Extended CAN),它支持 CAN 协议 2.0A 和 2.0B。它在高效处理大量收到的报文的同时,极大地降低了 CPU 资源的消耗。可以通过软件配置报文发送的优先级特性。本篇应用笔记可以帮助用户了解 CAN 模块,通过对 CAN 接口参数的详解及典型应用来了解 CAN 接口的使用。
一、CAN 协议简介
CAN 是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的德国博世(BOSCH)公司开发的,并最终成为国际标准, CAN 总线协议已经成为汽车计算机控制系统和嵌入式工业
控制局域网的标准总线。近年来,它具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强及振动大的工业环境。
1.1 CAN 物理层
与 I2C、SPI 等具有时钟信号的同步通讯方式不同,CAN 通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有 CAN_High 和 CAN_Low 两条信号线,共同构成一组差分信号线,以差分信号的形式进行
通讯。
1.1.1 闭环总线网络
CAN 物理层的形式主要有两种,图 1-1 中的 CAN 通讯网络是一种遵循 ISO11898 标准的高速、短距离“闭环网络”,它的总线最大长度为 40m,通信速度最高为 1Mbps,总线的两端各要求有一个“120 欧”的电阻。
1.1.2 通讯节点
从 CAN 通讯网络图可了解到,CAN 总线上可以挂载多个通讯节点,节点之间的信号经过总线传输,实现节点间通讯。由于 CAN 通讯协议不对节点进行地址编码,而是对数据内容进行编码的,所以网络中的节点个
数理论上不受限制,只要总线线束的电气负载能力足够即可,但实际应用过程中,一条总线上的节点一般不会超过 100 个。
CAN 通讯节点由一个 CAN 控制器(如 MCU)及 CAN 收发器组成,控制器与收发器之间通过 CAN_Tx及 CAN_Rx 信号线相连,收发器与 CAN 总线之间使用 CAN_High 及 CAN_Low 信号线相连。其中 CAN_Tx
及 CAN_Rx 使用普通的类似 TTL 逻辑信号,而 CAN_High 及 CAN_Low 是一对差分信号线,下一小节将对该差分信号做较为详细阐述 。
当 CAN 节点需要发送数据时,控制器把要发送的二进制编码通过 CAN_Tx 线发送到收发器,然后由收发器把这个普通的逻辑电平信号转化成差分信号, 通过差分线 CAN_High 和 CAN_Low 线输出到 CAN 总线上。而通过收发器接收总线上的数据到控制器时,则是相反的过程,收发器把总线上收到的 CAN_High 及CAN_Low 信号转化成普通的逻辑电平信号,通过 CAN_Rx 输出到控制器中。
1.1.3 差分信号
差分信号又称差模信号,与传统使用单端信号的电压表示逻辑的方式有区别,使用差分信号传输时,需要两根信号线,这两个信号线的振幅相等,相位相反,通过两根信号线的电压差值来表示逻辑 0 和逻辑 1。见图1-2,它使用了 V+与 V-信号的差值表达出了图下方的信号。
CAN 协议中对它使用的 CAN_High 和 CAN_Low 表示的差分信号做了规定,如图 1-3 和 1-4 所示,以高速CAN 协议(ISO11898)为例,当表示逻辑 1 时(隐形电平),CAN_High 和 CAN_Low 线上的电压均为
2.5V,即他们的电压差△ V=|VH-VL|=0V;而表示逻辑 0 时(显性电平),CAN_High 的电平为 3.5V,CAN_Low 的电平为 1.5V,即他们的电压差为△ V=|VH-VL|=2V。例如,当 CAN 收发器从 CAN_Tx 线接收到来自 CAN 控制器的低电平信号时(逻辑 0),它会使 CAN_High 输出 3.5V,同时 CAN_Low 输出 1.5V,从而输出显性电平表示逻辑 0。
在 CAN 总线中,必须使它处于隐性电平(逻辑 1)或显性电平(逻辑 0)中的其中一个状态。假如有两个 CAN通讯节点,在同一时间,一个输出隐性电平,另一个输出显性电平,类似 I2C 总线的“线与”特性将使它处于显性电平状态,显性电平的名字就是这样来的,即可以认为显性具有优先的意味。由于 CAN 总线协议的物理层只有 1 对差分线,在一个时刻只能表示一个信号,所以对通讯节点来说,CAN 通讯是半双工的,收发数据需要分时进行。在 CAN 的通讯网络中,因为共用总线,在整个网络中同一时刻只能有一个通讯节点发送信号,其余的节点在该时刻都只能接收。
1.2 协议层
对 CAN 协议标准这里不作多余阐述,若对 CAN 通讯协议想要了解,可以浏览附件的文档《CAN 入门教程》、《CAN2.0 规范》,或网上查找专业性资料进行学习CAN 外设接口参数说明。CAN 外设有许多的参数接口需要配置,例如初始化结构体、发送及接收结构体、过滤器结构体等,下面将根据 N32 库的风格来对这些结构体成员变量做一些解释及配置说明
2 CAN 外设接口参数说明
CAN 外设有许多的参数接口需要配置,例如初始化结构体、发送及接收结构体、过滤器结构体等,下面将根据 N32 库的风格来对这些结构体成员变量做一些解释及配置说明
2.1 CAN 控制内核
CAN 控制内核包含了各种控制寄存器及状态寄存器,主要讲解其中的主控制寄存器 CAN_MCTRL 及位时序寄存器 CAN_BTIM
2.1.1 主控制寄存器 CAN_MCTRL
主控制寄存器 CAN_MCTRL 负责 CAN 的工作模式,它主要使用以下功能实现控制
(1) DBGF 调试冻结功能
DBGF(Debug freeze)调试冻结,使用它可设置在调试时 CAN 处于工作状态或禁止收发的状态,禁止收发时仍可访问接收 FIFO 中的数据。这两种状态是当 N32 芯片处于程序调试模式时才使用的,平时使用并不影响。注:CAN 冻结时必须设置 DBG_CTRL.CAN_STOP 位
(2) TTCM 时间触发模式
TTCM(Time triggered communication mode)时间触发模式,它用于配置 CAN 的时间触发通信模式,在此模式下,CAN 使用它内部定时器产生时间戳,并把它保存在 CAN_TMDTx、CAN_RMDTx 寄存器中。内部定时器在每个 CAN 位时间累加,在接收和发送的帧起始位被采样,并生成时间戳。利用它可以实现 ISO11898-4 CAN 标准的分时同步通信功能。
(3) ABOM 自动离线管理
ABOM(Automatic bus-off management) 自动离线管理,它用于设置是否使用自动离线管理功能。当节点检测到它发送错误或接收错误超过一定值时,会自动进入离线状态,在离线状态中,CAN 不能接收或发送报文。处于离线状态的时候,可以软件控制恢复或者直接使用这个自动离线管理功能,它会在适当的时候自动恢复。
(4) AWKUM 自动唤醒
AWUM(Automatic bus-off management),自动唤醒功能,CAN 外设可以使用软件进入低功耗的睡眠模式,如果使能了这个自动唤醒功能,当 CAN 检测到总线活动的时候,会自动唤醒。
(5) NART 自动重传
NART(No automatic retransmission)报文自动重传功能,设置这个功能后,当报文发送失败时会自动重传至成功为止。若不使用这个功能,无论发送结果如何,消息只发送一次。
(6) RFLM 锁定模式
RFLM(Receive FIFO locked mode)FIFO 锁定模式,该功能用于锁定接收 FIFO。锁定后,当接收 FIFO 溢出时,会丢弃下一个接收的报文。若不锁定,则下一个接收到的报文会覆盖原报文。
(7) TXFP 报文发送优先级的判定方法
TXFP(Transmit FIFO priority)报文发送优先级的判定方法,当 CAN 外设的发送邮箱中有多个待发送报文时,本功能可以控制它是根据报文的 ID 优先级还是报文存进邮箱的顺序来发送。
2.1.2 位时序寄存器 CAN_BTIM
CAN 外设中的位时序寄存器 CAN_BTIM 用于配置测试模式、波特率以及各种位内的段参数。
(1) 测试模式
为方便调试,N32 的 CAN 提供了测试模式,配置位时序寄存器 CAN_BTIM 的 SLM 及 LBM 寄存器位可以控制使用正常模式、静默模式、回环模式及静默回环模式,如图 2-1 所示
(2) 位时序及波特率
N32 的 CAN 外设定义的时序与 CAN 标准时序有一点区别,如图 2-2 所示:
N32 的 CAN 外设位时序中只包含 3 段,分别是同步段 SYNC_SEG、位段 BS1 及位段 BS2,采样点位于BS1 及 BS2 段的交界处。其中 SYNC_SEG 段固定长度为 1Tq,而 BS1 及 BS2 段可以在位时序寄存器 7 CAN_ BTIM 设置它们的时间长度,它们可以在重新同步期间增长或缩短,该长度 RSJW 也可在位时序寄存器中配置。
理解 N32 的 CAN 外设的位时序时,可以把它的 BS1 段理解为是由前面介绍的 CAN 标准协议中 PTS 段与PBS1 段合在一起的,而 BS2 段就相当于 PBS2 段。了解位时序后,接下来可以配置波特率。通过配置位时序寄存器 CAN_BTIM 的 TBS1[3:0]及 TBS2[2:0]寄存器位设定 BS1 及 BS2 段的长度后,就可以确定每个 CAN 数据位的时间:
BS1 段时间:TS1=Tq x (TBS1[3:0] + 1)
BS2 段时间:TS2= Tq x (TBS2[2:0] + 1)
一个数据位的时间:T1bit =1Tq+TS1+TS2 =1+ (TBS1[3:0] + 1)+ (TBS2[2:0] + 1)= N Tq
其中单个时间片的长度 Tq 与 CAN 外设的所挂载的时钟总线及分频器配置有关,CAN1 和 CAN2 外设都是挂载在 APB1 总线上的,而位时序寄存器 CAN_BTIM 中的 BRTP[9:0]寄存器位可以设置 CAN 外设时钟的分频值 ,所以:Tq = (BRTP[9:0]+1) x TPCLK
其中的 PCLK 指 APB1 时钟,N32G45X 默认值为 36MHz。
最终可以计算出 CAN 通讯的波特率:BaudRate = 1/N Tq
如下图 2-3 说明了一种把 N32G45X 的 CAN 波特率配置为 1Mbps 的方式
(以下内容因篇幅原因未详述,详细应用笔记请联络国民技术代理商深圳市绿都电子有限公司索取,联络方式:Philip.yf@szlvdu.com,0755-83777479, 18688790400)
2.2 CAN 初始化结构体
2.3 CAN 发送及接收结构体
2.4 CAN 过滤器结构体
3 CAN 外设典型应用
3.1 修改采样率
3.2 过滤指定 ID 报文
4 注意事项