前面的文章已经介绍过基础软件的CAN通信部分,今天整理下CAN通信的概览知识。从几个概念开始。
1 位速率
位速率(bit rate),即传输期间单位时间的位数。
数字信号系统中,带宽用来标识通讯线路所能传送数据的能力,即在单位时间内通过网络中某一点的最高数据率,常用的单位为bps(bit per second,又称为比特率)。通过多少个物理电平的位及以什么样的方式组合来表示逻辑上的0和1,即位表示法来分,主要有NRZ编码和曼码。其中,使用曼彻斯特码时可以用电平上的0-1跳变表示逻辑上的0,电平上的1-0跳变表示逻辑上的1,如下图(b)所示。使用NRZ码用电平上的0表示逻辑上的0,电平上的1表示逻辑上的1,如下图(a)所示。
2 位填充
在使用NRZ位表示时,使用位填充提供的总线状态来满足周期性同步。每当发送逻辑在数据中遇到一定填充宽度的有相等值连续位时,它会自动填充一个位的互补值,填充到输出比特流中。接收器执行逆过程,从接收数据中去除它。
NRZ码的带宽利用率很高,但是有些时候它不能传输时钟信号。比如,传输0-0-0-0或1-1-1-1在物理线路上将看到一条水平直线的“低电平”或“高电平”,当接受方和发送方的时钟存在偏差时,会造成接收方多检出或少检出一个位。如下图,发送方1-0跳变开始,接收方时钟与它同步,但是接收方比发送方的系统时钟慢了1/5Tq,当发送方连续发了6个零,接收方只连续收到了5个零,丢了一个位。
对于采用NRZ码的异步通信,为了避免这种情况,就要定义一个最大时钟同步间隔。即最大允许发送N个连续位时必须要反转一次电平,让接收方同步发送方的时钟。定义发送数据帧中连续位的个数为数列{n_i},如果max{n_i}<N,就不需要填充,否则就要对帧中满足填充。但是这个填充位是0还是1没有任何数据意义,它只是时钟同步的标志,接收到之后必须要被识别出来并剔除掉,才能恢复出发送方的原始数据。
每填充一个位,填充的位也会被定义到发送数据序列里,则{n_i}就要重新计算一次,重新判定max{n_i}<N。从而可能会出现填充的连锁反应,如下图所示。而在去填充的时候,要首先全识别出填充位,然后再一起剔除。
3 位时序
由发送单元在非同步的情况下发送每秒的位数称为位速率。一个位可分为 4 段。
同步段(SS)
传播时间段(PTS)
相位缓冲段1(PBS1)
相位缓冲段2(PBS2)
这些段又由可称为 TimeQuantum(以下称为Tq)的最小时间单位构成。
1 位分为4 个段,每个段又由若干个Tq 构成,这称为位时序。
1 位由多少个Tq 构成、每个段又由多少个Tq 构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。各段的作用和 Tq 数如下图所示:
1个位的构成如下图所示:
上图的采样点,是指读取总线电平,并将读到的电平作为位值的点。位置在 PBS1 结束处。根据位时序,可以计算CAN通信的波特率了。
前面提到的CAN协议具有仲裁功能,下面我们来看看是如何实现的。在总线空闲态,最先开始发送消息的单元获得发送权。当多个单元同时开始发