电子说
在前2天的推送中我们介绍了I2C、SPI 总线,但它们多用于传输距离短、协议简单、数据量小、主要面向 IC(集成电路)间通信的“轻量级”场合。而 CAN 总线则不同,CAN 总线定义了更为优秀的物理层、数据链路层,并且拥有种类丰富、简繁不一的上层协议。
什么是CAN 总线
CAN 是“Controller Area Network”的缩写,即“控制器局域网”,是一个 ISO 标准的串行通信协议。CAN 总线由德国 BOSCH 公司研发设计,用于应对汽车上日益庞大的电子控制系统的需求,其最大的特点是可拓展性好,可承受大量数据的高速通信,并且高度稳定可到。ISO 组织通过 ISO11898 和 ISO11519 对 CAN 总线进行了标准化,使其早早确立了欧洲汽车总线标准的地位。时至今日,CAN 总线已经获得业界的高度认可,其应用也从汽车电子领域延伸至工业自动化、船舶、医疗设备、工业设备等领域。
CAN 总线网络拓扑结构
CAN 总线的物理连接只需要两根线,常称为 CAN_H 和 CAN_L,通过差分信号进行数据的传输。CAN 总线有两种电平,分别为 隐性电平 和 显性电平,这两种电平有着类似漏极 I/O 电平信号之间“与”的关系:
· 若隐性电平相遇,则总线表现为隐性电平;
· 若显性电平相遇,则总线表现为显性电平;
· 若隐性电平和显性电平相遇,则总线表现为显性电平。
一个典型的 CAN 总线网络拓扑结构如图1所示,注意两端的终端电阻是必需的。
图1. CAN 总线网络拓扑
CAN 总线的几种数据帧
CAN 总线协议规定了5种帧,分别是数据帧、遥控帧、错误帧、过载帧以及帧间隔,实践中数据帧的应用最为频繁。各种帧的用途如表1所示。
表1. CAN 总线数据帧的种类及用途
CAN 总线的特点
CAN 总线网络是一种真正的多主机网络,在总线处于空闲状态时,任何一个节点单元都可以申请成为主机,向总线发送消息。其原则是:最先访问总线的节点单元可以获得总线的控制权;多个节点单元同时尝试获取总线的控制权时,将发生仲裁事件,具有高优先级的节点单元将获得总线控制权。
CAN 协议中,所有的消息都以固定的数据格式打包发送。两个以上的节点单元同时发送信息时,根据节点标识符(常称为 ID,亦打包在固定的数据格式中)决定各自优先级关系,所以 ID 并非表示数据发送的目的地址,而是代表着各个节点访问总线的优先级。如此看来,CAN 总线并无类似其他总线“地址”的概念,在总线上增加节点单元时,连接在总线的其他节点单元的软硬件都不需要改变。
CAN 总线的通信速率和总线长度有关,在总线长度小于 40m 的场合中,数据传输速率可以达到 1Mbps,而即便总线长度上升至 1000m,数据的传输速率仍可达到 50Kbps,无论在速率还是传输距离都明显优于常见的 RS232、RS485 和 I2C 总线。
对于总线错误,CAN 总线有错误检测功能、错误通知功能、错误恢复功能三种应对措施,分别应对于下面三点表述:所有的单元节点都可以自动检测总线上的错误;检测出错误的节点单元会立刻将错误通知给其他节点单元;若正在发送消息的单元检测到当前总线发生错误,则立刻强制取消当前发送,并不断反复发送此消息至成功为止。
CAN 总线上的每个节点都可以通过判断得出,当前总线上的错误时暂时的错误(如瞬间的强干扰)还是持续的错误(如总线断裂)。当总线上发生持续错误时,引起故障的节点单元会自动脱离总线。
CAN 总线上的节点数量在理论上没有上限,但在实际上收到总线上的时间延时及电气负载的限制。降低最大通信速率,可以增加节点单元的连接数;反之,减少节点单元的连接数,则最大通信速率可以提高。
全部0条评论
快来发表一下你的评论吧 !