CAN-bus的可靠性很高,但是在某些情况下还是发生错误,为了使数据能够在总线上可靠传输,CAN-bus规范对各类帧的格式、用途及发送时机都进行了详细的规定。并实现在CAN控制器中自动完成帧格式处理及校验等工作,一旦错误被检测,正在传送的数据帧将会立即停止而待总线空闲时再次重发直至发送成功,该过程并不需要CPU的干涉除非错误累计该发送器退隐(Bus off)。
CAN-bus的可靠性很高,但是在某些情况下还是发生错误,为了使数据能够在总线上可靠传输,CAN-bus规范对各类帧的格式、用途及发送时机都进行了详细的规定。下面我们来总结下在CAN通讯中会出现哪些错误。
图一
位错误:发送节点在发送数据的同时也会对发出的比特流采样回收,如果监测到总线电平与正在发送的电平不符,将会发生位错误(Bit Check Error);
位填充错误:为解决异步串行通讯中共有的缺点——各节点通讯时钟不同步,CAN-bus采用了一种同步的方式,规定每隔5个位的时间长度进行一次同步,当传输信号连续5个位是相同的,就要插入一个点评相反的位(称为“填充位”),如果电缆上传输的信号不满足这一规则,则会出现填充位错误(Bit Stuff Error);
CRC错误:发送端发送的CRC值由发送器计算得出,接收器采用同样的CRC算法,计算出接收端CRC值,若接收器计算的CRC值与接收到的CRC值不符,将会产生该类错误(CRC Error);
格式错误:当传输的数据帧格式与任何一种合法的帧格式不符时会发生该类格式错误(frame Check Error);