TC1728
CAN控制器(MultiCAN)
20
CAN控制器(MultiCAN)
本章描述TC1728 MultiCAN 控制器。它包括如下几个部分:
• CAN 基本知识(见页20-2)
• TC1728中的CAN模块概述(见页20-11)
• MultiCAN 内核功能描述(见页20-14)
• MultiCAN 内核寄存器描述(见页20-56)
• TC1728 的具体实现 (端口连接和控制、中断控制、地址译码、时钟控制,见页20-113)
注:本章描述的MultiCAN 寄存器的名称在TC1728 用户手册其它章节引用时,需要添加模块
名前缀“CAN_”。
表20-1
固定模块中的常量
常量
n_objects
n_interrupts
n_pendings
n_pendingregs
n_lists
n_nods
功能描述
可用报文对象的数目
可用中断输出线的数目
可用报文挂起位的数目
有n_pendings/32 个报文挂起寄存器。
报文对象分配的可用数目列表
可用CAN节点的数目 因为每个CAN节点除了其自己的列表
外还有未分配的元素列表,所以关系n_nods < n_lists 为真。
用户手册
MultiCAN, V2.24
20-1
V1.0, 2011-12
20.1
CAN 基本知识
TC1728
CAN控制器(MultiCAN)
CAN 为单一逻辑总线的异步串行总线系统,具有开放的线性总线结构,每个通信参与
者都是平等的,称之为节点。CAN 总线包含两个或多个节点。
总线逻辑采用“线与”机制,隐性位(等同于逻辑 1 电平)被显性位(等同于逻辑0 电平)改
写。只要没有节点发送显性位,总线就处于隐性状态。在这种状态下,从任何总 线节点发
出的显性位产生一个显性总线状态。从定义上讲,CAN 总线的最大速度为 1Mbit/s。该速
度下,CAN 总线长度最多为40 米。对于超过40 米的总线,必须降低总线速 度。
CAN 帧的二进制数据编码为 NRZ码(非归零)。为了确保所有总线节点都能够重新同 步,
使用位填充方法。这意味着发送报文期间,最多5 个连续位可以具有相同的极性。发送5 个
同极性的连续位之后,发送器将插入一个与先前发送的位流极性相反的附加位(填充位),
之后才能继续发送后面的位。接收器也会检查具有相同极性位的位个数,并从位流中删 除
填充位(=去填充)。
20.1.1 寻址和总线仲裁
CAN 协议中,地址信息由报文中的标识符域给出。标识符指示报文内容和优先级。
标识符的二进制数值越小,报文优先级越高。
使用带 NDA 的 CSMA/CD(非破坏性仲裁的载波侦听多路访问/冲突检测)进行总 线仲
裁。如果总线节点 A 试图通过网络发送报文,该节点先检测总线是否处于空闲状态(“载
波侦听”),也就是说,没有节点在进行发送操作。如果情况如此(且没有其它 节点要同
时启动一次报文发送操作),节点 A 成为总线主设备并发送报文。所有其它节 点在第一
个发送位(帧起始位)期间切换到接收模式,每个总线节点检查报文标识符, 如有需要,
存储该报文,否则忽略该报文。
如果两个或多个节点同时启动发送操作(“多路访问”),通过按位仲裁(“冲突 检测/非
破坏仲裁”和“线与”机制,显性位占先(显性位改写隐性位))避免报文发送 的总线冲突。每
个发送报文的节点都读回总线电平。当一个节点发送隐性位而读回显性 位,该节点丢
失总线仲裁并从发送模式切换到接收模式。例如,当一个竞争节点的报文 标识符具有
较低的二进制值,因此具有较高发送优先级时,会出现上述情况。在这种情 况下,具
有最高优先级的总线节点赢得仲裁且不需要重复发送报文(从而不需要损失时 间),一旦
总线返回空闲状态,其它失去仲裁的节点将自动重复发送操作。因此,数据 帧中同一
个标识符只能被系统中的一个节点发送。也就是说,一定不能设置为由多个节 点发送带
同一个标识符的数据帧。
用户手册
MultiCAN, V2.24
20-2
V1.0, 2011-12
标准报文标识符长度为11 位,CAN 规范2.0B 将报文标识符扩展为29 位,称为扩展标
TC1728
CAN控制器(MultiCAN)
识符。
20.1.2
CAN 帧格式
共有3种类型的CAN帧:
• 数据帧
• 远程帧
• 错误帧
数据帧包含长度为0 到8 字节的数据域。远程帧不包括数据域,通常用来请求数据
(如请求来自传感器的数据)。数据和远程帧可以使用带11 位“标准”标识符和29 位“扩 展”
标识符。检测到总线错误的任意节点都可以产生错误帧。
20.1.2.1 数据帧
共定义了2种类型的数据帧(见图20-1):
• 标准数据帧
• 扩展数据帧
标准数据帧
数据帧的第一位是帧起始位(SOF = 显性位),用于硬件同步所有节点。SOF 之后 是 12
位仲裁位域,由 11 位标识符(指示报文内容和优先级)和 1 位 RTR(远程发送 请求)组成。
RTR 为显性电平,指示该帧为数据帧。RTR 为隐性电平,则该帧为远程帧。
仲裁域之后是 6 位控制位域。该位域的第一位是 IDE(标识符扩展)位,该位为显 性电
平,表示该帧为标准数据帧。IDE 位之后一位保留,为显性电平。其余 4 位为数据 长度码
(DLC),指示数据域长度(字节个数)。数据域宽度为 0 到 8 字节。循环冗余(CRC)域紧跟数
据字节,用于检测可能出现的数据字节发送错误。该位域由 15 位CRC 序列组成,其最后
一位是隐性 CRC 分隔符位。 标准数据帧的最后一个位域是应答域。在 ACK 时隙期间,发
送节点发出隐性位。无论该节点是否配置为接收该报文帧,接收到无错帧的任何节点都发
回一个显性位指示该节点正确接收了该报文帧。该特性表明 CAN 协议属于“位回应”类型协
议。隐性 ACK 分隔符 位,不能由显性位改写,是应答位域的最后一位。
用户手册
MultiCAN, V2.24
20-3
V1.0, 2011-12
TC1728
CAN控制器(MultiCAN)
7 个隐性帧结束(EOF)位是数据帧的最后一个位域。在连续两帧之间,总线必须处 于
隐性状态至少 3 个位时间(称为帧间间隔)。帧间间隔之后,如果没有其它节点试图发 送,
那么总线保持隐性电平的空闲状态。
图20-1 CAN 数据帧
扩展数据帧
扩展数据帧的报文标识符被扩展为29 位。可分为两部分,11 位低位部分(和标准帧
中的相同)和18 位高位部分,在标准帧和扩展帧中,必须确保标识符扩展位(IDE) 位于相
用户手册
MultiCAN, V2.24
20-4
V1.0, 2011-12
TC1728
CAN控制器(MultiCAN)
同的位置上。
扩展 CAN 数据帧中,SOF 位之后是 32 位仲裁域。前 11 位是 29 位标识符低位部
分(“基本 ID‖),随后是隐性电平的替代远程请求(SRR)位。SRR 之后是隐性IDE 位, 指
示该帧为扩展 CAN 帧。如果发送标识符 11 位低位部分之后,仲裁仍未解决,且如果
参 与仲裁的一个节点发出标准 CAN 帧,因为其 IDE 位为显性,标准 CAN 帧赢得仲裁。
因此, 设置扩展 CAN 帧的 SRR 位为隐性以允许正在发送标准 CAN 远程帧节点设置其
RTR 位为 显性。SRR 和 IDE 位之后是扩展标识符高 18 位和 RTR 位。
扩展数据帧的控制域和帧结束域与标准数据帧相同。
20.1.2.2 远程帧
通常自动执行数据发送操作,由数据源节点(例如传感器)发出数据帧。然而,也可
能由一个(或多个)目标节点从数据源节点请求数据。为了实现该功能,目标节点发出一
个标识符与所请求数据帧标识符匹配的远程帧。对应的数据源节点将发送数据帧,以回
应 该远程请求。
远程帧和数据帧有两点不同:
• 远程帧RTR 位为隐性电平
• 远程帧没有数据域 如果同时发送标识符相同的数据帧和远程帧,因为数据帧标识符
之后的RTR 位为显性,所以数据帧赢得仲裁。在此情况下,发送远程帧的节点立
即接收所请求的数据帧。标准和扩展远程帧格式见图20-2。
用户手册
MultiCAN, V2.24
20-5
V1.0, 2011-12
TC1728
CAN控制器(MultiCAN)
图20-2 远程帧
用户手册
MultiCAN, V2.24
20-6
V1.0, 2011-12
20.1.2.3 错误帧
TC1728
CAN控制器(MultiCAN)
由检测到总线错误的任意节点产生错误帧。错误帧由两部分组成,错误标志域和其
后的错误分隔符域。错误分隔符位域由 8 个隐性位组成,出现错误之后,允许总线节点
重新开始通信。然而,错误标志域有两种格式,由检测到错误的节点的错误状态决定其
格式。
当错误激活节点检测到总线错误,该节点产生一个带错误激活标志的错误帧。错误
激活标志由 6 个连续显性位组成,故意违反位填充规则。其它节点识别到位填充错误,
这些节点自身也产生错误帧。因而CAN 总线上的错误标志域由6 到12 个连续显性位组成
(由一个或多个节点产生)。错误分隔符域为错误帧的结束部分。发送错误帧之后,总 线
返回到正常状态且中断的节点试图再次发送被中止的报文。
如果错误认可节点检测到总线错误,该节点发送一个错误认可标志,其后是错误分
隔符域。错误认可标志由 6 个连续隐性位组成,因此错误帧(对错误认可节点来说)由14
个隐性位组成(也就是说,无显性位)。因此,错误认可节点发送错误帧的操作不会 影响
网络中任何其它节点,除非检测到该总线错误的节点正在发送报文(即,其为总线主设
备)。如果总线主设备节点产生一个错误认可标志,可能会导致其它节点因违反位 填充
规则而产生错误帧。错误认可节点发送错误帧之后,必须在总线上等待 6 个连续隐性位
才能尝试再次参加总线通信。
图20-3 CAN 错误帧
用户手册
MultiCAN, V2.24
20-7
V1.0, 2011-12
TC1728
CAN控制器(MultiCAN)
20.1.3
标准位时间
一个位时间单元(对应于NRZ 码的高或低脉冲)由4 个时间段组成。每个时间段 由
整数个基本时间单元tQ 组成,基本时间单元是CAN 节点使用的最小离散时序精度单
位。各段额定(标准)位时间定义见图20-4。
图20-4 标准位时间的组成
同步段(SYSNC_SEG)用于同步各总线节点。如果在前一位和当前位之间位状态发生改
变,那么在该段期望总线状态发生改变。该段长度始终为1 tQ。 传播段(PROP_SEG)用于补
偿通过网络时产生的信号延迟。该延迟由总线上的信号传播延迟和通过总线节点接口电路
的延迟两部分组成。
相位缓冲段 1 和 2(PHASE_SEG1 ,PHASE_SEG2)用于补偿边沿相位错误。这 些段可能
被重新同步操作拉长或缩短。PHASE_SEG2 用于计算紧跟着的位电平,且≥2tQ 。 在 采
样 点 处 , 读 出 总 线 电 平 并 将 其 解 释 为 位 单 元 的 值 。 采 样 点 位 于PHASE_SEG1 末
尾。
一个位时间所包含的tQ个数在8 到25 之间。
重新同步可能拉长 PHASE_SEG1 或者缩短 PHASE_SEG2。相位缓冲段的拉长或 者缩
短量有一个上限,由重新同步跳转宽度给出。重新同步跳转宽度可能在 1tQ和 4tQ 之间,但
是不能超过PHASE_SEG1。
用户手册
MultiCAN, V2.24
20-8
V1.0, 2011-12