文章目录
一、前言二、如何解决波特率误差带来的通信错误?三、填充位一、前言
广州虹科录制的CAN总线技术课程非常不错,建议同学们学习一下。B站的地址:/video/BV1gD4y1U7bJ?p=1
CAN总线使用异步串行通讯,相比同步串行通讯,CAN总线省去了一根用于同步的时钟线(CLK)。有优点,多半会带来一些缺点,缺点就是同步问题。
根据波特率做采样,波特率的误差会产生通信错误。为什么?CAN总线上的各个CAN节点的波特率来源于各个节点上的晶振(例如,STM32上的CAN控制器上的时钟频率就是从PCB上的晶振进行倍频后再分频得到)。晶振会有误差,外加上其他误差。说白了,各个节点的波特率都设置500K。但是,由于误差问题肯定不会完全等于500K。
二、如何解决波特率误差带来的通信错误?
CAN总线规定信号的“跳变沿时刻”进行同步,将误差累计限制在两个跳变沿之间。
接着问题又来了:当发送数据出现都为0或者1的时候,同样不跳变造成误差累计怎么办法呢?
三、填充位
采用填充位在连续5个相同位后插入一个相反位(CAN控制负责插入该填充位),产生跳变沿,用于同步。如下图所示:
还有疑问:为什么5个连续相同位之后才使用填充位呢?答:CAN总线在刚发明的时候,设计人员做了大量的测试来验证5个填充位比较合适。
总之,CAN总线为了解决异步串行通讯带来的缺点(波特率误差导致的通讯错误),增加了跳变沿时刻同步与填充位的功能。