一. 简介
前面文章学习了 CAN总线协议,即五种数据帧格式。
I.MX6ULL 带有 CAN 控制器外设,叫做 FlexCAN,FlexCAN 符合 CAN2.0B 协议。
本文来学习一下 CAN总线的位时序。
二. CAN总线位时序
CAN
总线以帧的形式发送数据,但是最终到总线上的就是 “
0
” 和 “
1
” 这样的二进制数据,这里就涉及到了通信速率,也就是每秒钟发送多少位数据,前面说了
CAN2.0
最高速度为
1Mbps/S
。对于
CAN
总线,一个位分为
4
段:
① 同步段
(SS)
② 传播时间段
(PTS)
③ 相位缓冲段
1(PBS1)
④ 相位缓冲段
2(PBS2)
这些段由
Tq(Time Quantum)
组成,
Tq
是
CAN
总线的最小时间单位。帧由位构成,一个位由
4
个段构成,每个段又由若干个
Tq
组成,这个就是位时序。
1
位由多少个
Tq
构成、每个段
又由多少个
Tq
构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可
任意设定采样点。各段的作用和
Tq
数如下图
所示:
1 个位的构成如下图所示:
上图中的采样点是指读取总线电平,并将读到的电平作为位值的点。位置在
PBS1
结束处。根据这个位时序,我们就可以计算
CAN
通信的波特率了。具体计算方法,我们等下再
介绍,前面提到的
CAN
协议具有仲裁功能,下面我们来看看是如何实现的。
在总线空闲态,最先开始发送消息的单元获得发送权。
当多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性
电平最多的单元可继续发送
实现过程,如下图
所示:
上图中单元
1
和单元
2
同时开始向总线发送数据,开始部分他们的数据格式是一
样的,故无法区分优先级,直到
T
时刻,单元
1
输出隐性电平,而单元
2
输出显性电平,此时
单元
1
仲裁失利,立刻转入接收状态工作,不再与单元
2
竞争,而单元
2
则顺利获得总线使用
权,继续发送自己的数据。
这就实现了仲裁,让连续发送显性电平多的单元获得总线使用权。
关于
CAN
协议就讲到这里,关于
CAN
协议更详细的内容请参考《
CAN
入门教程》。