can总线
can是什么
CAN是Controller Area Network的简称,是一种有效支持分布式控制或实时控制的串行通信网络,最早是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,1986年,BOSCH开发出面向汽车的CAN通信协议,后来,CAN总线通过ISO 11898和ISO 11595进行了标准化,现在在欧洲是汽车网络的标准协议。
can的作用
CAN总线的作用就是把不同的部件连接起来,然后这些部件都执行同一套标准协议,这样的好处是兼容性高,信息可靠共享,并且能减少整车的线束数量。如下是车载网络示意图:
can的优点
- 低成本:ECU通过单个CAN系统进行通信,这样减少错误,重量,接线和成本
- 完全集中:CAN总线提供了一个接入点,可以与所有网络ECU进行通信,信息可靠共享
- 稳定:CAN总线具有强大的抗电干扰和抗电磁干扰能力,非常适合对安全要求严格的应用
- 高效:通过ID对CAN帧进行优先级排序,优先级最高的数据可以立即访问总线,而不会引起其他帧的中断
can总线拓扑
CAN总线拓扑图如下:
can控制器
- 接收收发器的数据,进行解析后发送给CPU
- 接收CPU的指令数据,然后发送给CAN收发器
can收发器
- 接收CAN总线上的差分数据,将数据转换为TTL电平,发送给控制器
- 将CAN控制器的TTL电平信号转换为差分信号,发送到总线传输
物理层特性
CAN收发器根据CANH和CANL的差值来判断总线电平,总线电平有两种:显性电平和隐性电平。
CAN2.0规定的总线Value如下:
显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平(0&1)。而隐形电平则具有包容性,只有所有的单元都输出隐性电平,总线上才为隐性电平(0&0)。
终端电阻
高频(高速)信号传输时,信号波长相对传输线较短,信号在传输线终端会形成反射波,干扰原信号,所以需要在传输线末端加终端电阻,使信号到达传输线末端后不反射。低频(低速)信号则不用。
CAN总线两端的终端电阻应该与通讯电缆的阻抗相同,典型值为120Ω(不总是120Ω),其作用是匹配总线阻抗,提高数据通信的抗干扰性及可靠行。
can的特点
多主控制
- 总线空闲时,所有的单元都可开始发送消息(多主控制)
- 最先访问总线的单元可获得发送权(CSMA/CA 方式)
- 多个单元同时开始发送时,发送高优先级 ID 消息的单元可获得发送权
消息发送
在 CAN 协议中,所有的消息都以固定的格式发送。总线空闲时,所有与总线相连的单元都可以开始发送新消息。两个以上的单元同时开始发送消息时,根据ID决定优先级。ID并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消息ID的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。
因为没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。
通信速度
同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信。
不同网络间则可以有不同的通信速度。
远程数据请求
发送“远程帧”,请求其他单元发送数据。
错误
- 错误检测功能:所有的单元都可以检测错误
- 错误通知功能:检测出错误的单元会立即同时通知其他所有单元
- 错误恢复功能:正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止
故障封闭
CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等),还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离(bus-off)出去。
连接节点多
CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。
但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。