了解CAN通讯的工程师们一般都会见过“反码位”一专业术语,但它究竟是什么?究竟有什么用?或许许多人对其并没有深化的了解,本文将让我们对此不再利诱。
数据数字编码具有许多办法,比如非归零(NRZ)、曼彻斯特或脉宽编码,它们的差异在于用来表明一个位的时隙的数目不同,如图1所示。
非归零电平编码的信号电平在整个位时刻里坚持不变,因而只需求一个时隙来表明一个位。而曼彻斯特编码的信号在一个位时刻内发生变化,因而需求两个时隙来表明一个位。曼彻斯特编码的长处是每个位都有一个信号边缘用来完成位同步(Self-clocking code)。可是曼彻斯特编码和非归零编码比较,在相同的位时刻(位频率)时,位速率只能到达非归零码一半。
因为非归零编码的信号电平可长时刻坚持不变(取决于所传输的数据),因而有必要采纳恰当的措施以确保不超越两个信号沿之间最大答应的时刻距离。从头同步点之间最大的时刻距离由节点振荡器的差错决议。从头同步可通过使用“位填充”的办法完成。这种办法是在必定数量的恒定位电平之后将一个反码刺进到位流中。
图1 NRZ和曼彻斯特编码的位表明
CAN协议中使用的是带位填充(填充宽度为5位)的NRZ信号编码,它确保了具有满足同步才能的最高传输功能。这种类型的编码还供给十分杰出的信号辐射特性(总线辐射的能量大致上和传输信号的频率以及信号边缘的数量成份额)。
CAN协议中使用NRZ编码的部分包含SOF、裁定场、操控场、数据场、数据帧和长途恳求帧的CRC序列。发送器一检测到5个接连相同值的序列,它就会在实践传输的位流中刺进一个反码位。数据帧或长途帧剩余的部分(CRC分隔符、ACK场和EOF)都有一个固定的方式(隐性电平),并且不选用位填充进行发送。犯错和超载帧也是如此。