之前用到过CAN总线协议,也是为了复习整理,简单把CAN总线应用中的一些软硬件上需要注意的要点写一下
CAN总线比较详尽的内容可以参考这篇博文:https://blog.csdn.net/qq_38880380/article/details/84573821
CAN总线主要是工作在物理层,数据链路层和传输层,在高层还有一些利用CAN协议来组网的协议,不过不在本文讨论范围之内。
硬件设计
CAN总线的硬件设计比较容易,一般使用处理器内集成的CAN控制器,CAN控制器工作在数据链路层,引出RX,TX两根数据线,接到外部专用的CAN phy芯片上,转为CAN_H和CAN_L两根差分信号。比较规范的CAN硬件设计如下图所示
注意R45+R46合计120Ω的电阻只能用作一个CAN总线两端的两个节点上,若CAN总线存在中间节点,中间节点要去掉R45和R46两颗电阻。
CAN采用总线式拓扑结构,连接方式如下图所示,所有节点的CAN_H和CAN_L分别连接到一起即可,一般只使用CAN_H和CAN_L这两根数据线,采用双绞线的方式连接在一起,减少对外辐射和外部干扰。
软件设计
CAN数据链路层上主要分为数据帧,遥控帧,错误帧,过载帧和帧间隔五种,其中后三种软件开发人员不必过度关注,一般由CAN控制器自动处理,注意处理事件中断即可。
数据帧
帧起始后紧接仲裁段,仲裁段实际上就是软件中CAN ID部分,分为两种,一种是标准ID,共11bit,另一种是扩展ID,共29bit,一个CAN帧可以在发送前决定发送标准CAN帧(ID 11bit)还是扩展CAN帧(ID 29bit),通过IDE字段标识,IDE=0说明发送的是一个标准帧,IDE=1则发送的是一个扩展帧。
CAN id段除了标识一个帧外也决定了一个帧的优先级,CAN id越小的CAN帧优先级越大,当两个CAN节点同时发送帧导致发生冲突时,优先级较低的CAN会在检测到总线上电平和发送数据不符时自动退出,避免干扰高优先级CAN帧的发送过程。
CAN ID段也可以再划分,如可把11bit重新划分为3bit优先级id+5bit消息id+3bit标识id,通过不同的划分方式可以实现更加高级的功能。
DLC是数据长度,以字节为单位,最大为8。
Data是荷载的数据部分,最大64bit(8byte),实际发送的长度与DLC有关。
CRC和ack等由硬件自动实现,无需理会。
遥控帧
遥控帧和数据帧基本一致,不同点就两个,其一是遥控帧的RTR字段为隐形(1),标明这是个遥控帧。其二是遥控帧中去掉了Data字段,意味着遥控帧不能携带荷载数据。
其余的就是实例了,看芯片的相关示例代码即可。
文章链接:https://blog.csdn.net/CSDN1344789841/article/details/114447733
转载需标明出处