目录
一、初识CAN
1. 介绍
CAN( Controller Area Network ),是ISO国际标准化的串行通信协议。现在,CAN 的高性能和可靠性己被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。CAN 等通信协议的开发,使多种 LAN 通过网关进行数据交换得以实现。
2. CAN总线特点
(1)多主控制
① 在总线空闲时,所有的 单元都可开始发送消息(多主控制)。
② 多个 单元同时开始 发送时,发送高优先级ID 消息的单元可获得发送权。
(2)消息的发送
① 在 CAN 协议中,所有的 消息都以 固定的 格式发送。
② 总线 空闲时,所有与 总线相连的 单元都可以 开始发送 新消息。
③ 两个以上的 单元 同时开始 发送消息时,根据标识符( Identifier,ID )决定优先级( ID并不是表示发送的 目的地址,而是表示 访问总线的 消息的优先级 )。
④ 两个以上的 单元同时 开始发送 消息时,对各消息 ID 的每个位进行 逐个仲裁比较。 仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利 的单元则 立刻停止发送 而进行 接收工作。
(3)系统的柔软性
与总线相连的 单元没有 类似于 “ 地址 ” 的信息。因此 在总线上 增加单元时,连接 在总线上的 其它 单元的 软硬件 及 应用层都不需要改变。
(4)通信速度
① 根据 整个网络的规模,可 设定适合的 通信速度。
② 在同一网络中,所有单元 必须设定成 统一的 通信速度。即使 有一个单元的 通信速度与其它的不一样,此单元也会输出 错误信号,妨碍 整个网络的通信。
③ 不同网络间 可以有 不同的通信速度。
(5)错误检测&错误通知&错误恢复功能
① 所有的单元都 可以 检测错误(错误检测功能)。
② 检测出错误的单元 会立即 同时通 知其他所有 单元(错误通知功能)。
③ 正在 发送消息的单元一旦 检测出错误,会强制 结束当前的发送。
④ 强制结束发送的单元 会不断反复地 重新发送此消息 直到成功发送为止(错误恢复功能)
(6)故障封闭
CAN 可以判断出错误的类型 是总线上暂时的 数据错误(如外部噪声等)还是持续的 数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上 发生持续数据错误时,可将 引起此 故障的单元从 总线上 隔离出去。
(7)连接节点多
① CAN 总线是 可同时连接多个单元 的总线。可连接的单元总数 理论上是 没有限制的。但实际上可连接的单元数 受 总线上的 时间延迟及电气负载的限制。
② 降低 通信速度,可连接的单元数 增加;提高通信速度,则 可连接的单元数 减少。
二、CAN物理层
CAN 控制器根据 两根线上的电位差 来判断总线电平。总线电平分为 显性电平和隐性电平,二者必居其一。显性电平具有优先权。发送方通过使总线电平发生变化,将消息发送给接收方。
补:显性电平和隐性电平。
总线上执行 逻辑上的线 “ 与 ” 时,显性电平 的逻辑值为 “ 0 ” ,隐性电平为 “ 1 ” 。
“ 显性 ” 具有 “ 优先 ” 的意味,只要有 一个单元输出 显性电平,总线上即为 显性电平。
“ 隐性 ” 具有 “ 包容 ” 的意味,只有 所有的单元都输出 隐性电平,总线上才为 隐性电平。( 显性电平比隐性电平更强 )
CAN总线由两根线(CANL和CANH)组成,允许挂载多个设备节点(低速CAN:20 高速CAN:30)。
1. 低速CAN
2. 高速CAN
三、CAN协议层
CAN总线以 “ 帧 ” 形式进行通信。CAN协议定义了5种类型的帧:数据帧、遥控帧、错误帧、过载帧、间隔帧。其中数据帧最为常用。
1. 数据帧
数据帧由7段组成,其又分为 标准帧 ( CAN 2.0A ) 和 扩展帧 ( CAN 2.0B ),主要体现在 仲裁段 和 控制段。
(1)帧起始:表示数据帧开始的段,显性信号。
(2)仲裁段:表示该帧优先级的段,优先级。
(3)控制段:表示数据的字节数及保留位的段。
(4)数据段:数据的内容,一帧可发送0~8字节数据。
(5)CRC段:检查帧的传输错误的段。
(6)ACK段:表示确认正常接收的段。
(7)帧结束:表示数据帧结束的段,7个隐性信号。
补:遥控帧的 RTR 位为 隐性位,没有数据段。没有数据段的 数据帧 和 遥控帧可通过 RTR位 区别开来。
2. 位时序
CAN总线以 “ 位同步 ” 机制,实现对电平的正确采样。位数据都由四段组成:同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2)。
1 位由多少个 Tq 构成、每个段又由多少个 Tq 构成等,可以 任意设定位时序。通过设定位时序,多个单元可 同时采样,也可 任意设定 采样点。根据位时序,就可以计算 CAN通信的 波特率。
采样点:指读 取总线电平,并 将读到的 电平作为 位值的点。
注:节点监测到 总线上信号的 跳变在 SS段 范围内,表示 节点与总线的时序 是同步,此时采样点的 电平即 该位的 电平。
3. 数据同步过程
CAN为了实现对总线电平信号的正确采样,数据同步分为硬件同步和再同步。
(1)硬件同步
节点通过 CAN总线 发送数据,一开始发送帧起始信号。总线上其他节点会 检测帧起始信号在不在位数据的 SS段内,判断内部时序与总线 是否同步。
假如不在 SS段 内,这种情况下,采样点获得的电平状态是不正确的。所以,节点会 使用硬件同步方式 调整,把自己的 SS段 平移到检测到边沿的地方,获得同步,同步情况下,采样点获得的电平状态才是正确的。
(2)再同步
利用普通数据位的边沿信号( 帧起始信号是特殊的边沿信号 )进行同步。再同步的方式分为两种情况:超前和滞后,即边沿信号与 SS段 的相对位置。
再同步时,PSB1 和 PSB2 中增加 或者 减少的时间 被称为 “ 再同步补偿宽度( SJW ) ”,其范围:1~4Tq。
每当 检测出边沿时,根据 SJW值 通过加长 PBS1 段,或缩短 PBS2段,以 调整同步。但如果发生了 超出 SJW值 的误差时,最大调整量 不能超过 SJW值。
限定 SJW值 后,再同步时,不能 增加限定长度 的 SJW值 。SJW值 较大时,吸收误差能力更强,但是 通讯速度会下降。
补:硬件同步和再同步规则
① 1个位 中只 进行一次 同步调整。
② 只有当 上次采样点的总线值 和 边沿后的总线值 不同时,该边沿才能用于 调整同步。
③ 在 总线空闲 且存在 隐性电平到显性电平的边沿 时,则一定要进行 硬件同步。
④ 在 总线非空闲时 检测到的 隐性电平 到显性电平 的边沿 如果满足条件 ① 和 ② ,将进行再同步。但还要满足 ⑤、⑥。
⑤ 发送单元观测到 自身输出的显性电平 有延迟时不进行 再同步。
⑥ 发送单元 在帧起始到 仲裁段 有多个单元 同时发送的情况下,对 延迟边沿不进行 再同步。
4. CAN总线仲裁
CAN总线处于空闲状态,最先开始发送消息的单元获得发送权。
多个单元同时开始发送时,从仲裁段(报文ID)的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送,即首先出现隐性电平的单元失去对总线的占有权变为接收。
竞争失败单元,会 自动检测总线空闲,在 第一时间再次尝试发送。
(1)数据帧和遥控帧的优先级
具有相同 ID 的数据帧 和 遥控帧 在总线上竞争时,仲裁段的最后一位(RTR) 为显性位的数据帧具有优先权,可继续发送。
(2)标准格式和扩展格式的优先级
标准格式 ID与具有相同 ID的遥控帧 或者扩展格式的数据帧 在总线上竞争时,标准格式的 RTR 位为显性位的具有优先权,可继续发送。