CAN-BUS协议粗浅学习
CAN-BUS(Controller Area Network)
控制器局域网是一种广泛用于车辆的总线标准,被设计用与在不需要主机(Host)的情况下,允许网络上的单片机和仪器相互通讯。它基于消息传递协议,CAN创建了基于信息导向的传输协定的广播机制(Broadcast Communication Mechanism)上。其根据信息的内容,利用其独特的信息标识符(Message Identifier)来定义内容和消息的优先顺序进行传递,而并不指定特定的地址(Station Address)。
1、CAN总线概述
CAN-BUS技术本身就是为车辆行业而生,现代的汽车会为其子系统配备多达70个的电子控制器,其中有些是独立的子系统不需要与其他通讯,而有一些需要于其他子系统进行通讯,例如控制驱动器或接受传感器的反馈信息。CAN的出现解决了传统电缆直连的成本高,布线复杂的问题。由于CAN控制器和处理器价格低廉,CAN总线同样可应用于普通自动化环境的现场总线中。同时由于其较高的实时性、可靠性、强大的检错纠错能力而被广泛用于航空、航海、工业自动化控制等各行各业。
目前又开发出了LIN总线标准,用于在非关键系统中的应用,例如空调和信息娱乐系统等数据传输速度和可靠性不是很重要的系统中。
1.1 标准架构
CAN是一个用于连接电子控制单元(ECU)的多主机串行总线标准。电子控制单元有时也被称作节点,CAN网络上至少需要两个节点才可以进行通信。可以只是简单的输入输出设备;也可以是包含有CAN交互器并搭载了软件的嵌入式组件;还可以是一个网关,允许普通计算机通过USB或以太网端口与CAN网络上的设备通信。
1993年,国际标注化组织(ISO)公布了CAN标准ISO11898,后来CAN标准被重新编译分为两个部分。ISO11898-1涵盖链接层;ISO11898-2涵盖了高速CAN总线的物理层。ISO11898-3涵盖了低速CAN总线的的物理层规范以及CAN总线的容错规范。现在CAN通过ISO11898及ISO11519进行了标准化,已经成为了欧洲汽车网络的标准。
1.2 外设与CAN总线的连接
所有节点间的连接都依靠两根相互平行的总线,实际上这里使用一跟导线就可以完成通信功能,但是采用两条电线组成一条双绞线,是为了抵抗外界的干扰,这一部分在之后会讲到。
ISO11898为高速CAN总线,传输速率为125K~1Mbps(每秒传输的bit数量),是闭环总线,最大总线长度小于等于40m,最多可连接30个单元。
ISO11519为低速CAN总线,传输速率为10K~125Kbps,是开环总线,最大总线长度小于等于1km,最多可连接20个单元。
另外总线的长度会直接影响传输的速率,总线越长最大传输速率就越慢。
1.3 CAN总线上的信号
1、在CAN总线上的电平变化:
这里 按照高速CAN总线的CAN2.0B规范说明:
总线逻辑为1: 在隐性状态下,CAN两条导线上有相同的预先设定值,该值称为静电平,这个值大约为2.5V。静电平也称为隐形状态,因为所有的控制单元均可以修改它。
总线逻辑为0: 在显性状态下,CAN-High线