目录
德国Bosch公司开发CAN总线的最初目的是解决汽车上数量众多的电子设备之间的通信问题以及减少电子设备之间数量繁多的信号线束,于是设计了一个单一的网络总线,使得所有的外围电子控制单元可以挂接在该总线上。
- 2.1:ISO 11898 是CAN 总线规范,对应的是OSI 模型物理层和数据链路层,对于物理层而言,定义了CAN 总线信号在双绞线的电压形式;对于数据链路层而言,定义了CAN 帧的各个域的用途。
- 2.2:SO 15765-2 是诊断服务在CAN总线传输的 实现方式,对应OSI 的传输层,对于classical CAN 总线来说,它一帧只能承载8个字节,而上层的诊断服务却可能超过8个字节,这时候就需要传输层对数据进行分包重组流控制。ISO 15765-2还定义了应用层、传输层、数据链路层之间的编程接口,其实就是request, confirm, indication这几个原语的定义。ISO 15765-3和ISO 14229-3的内容是一样的,后者取代了前者。ISO 15765-4定义了基于CAN总线实现OBD通信的方式。
- 2.3:ISO 14229-1 对应于OSI的层7,即应用层,它定义了诊断服务的格式。ISO 14229-2定义了诊断会话中的各种时间参数,比如ECU的响应时间等。ISO 14229-3 一直到ISO 14229-7 分别定义了UDS在CAN,FlexRay, Internet Protocol ,K-Line ,LIN上的实现要求 。
- 2.4:这三部分协议一起使用,就可以实现完整的诊断功能了。总结来说,ISO 14229-1生成诊断服务,ISO 15765-2对诊断服务进行分包并把分包后的数据交给ISO 11898,ISO 11898给收到的数据加上CAN总线特有的包头和包尾,然后通过双绞线以电压差的形式发送出去。
3.1:CAN的总线电压是CAN总线技术的核心所在,总线电压在物理层中定义。
使用ISO11898标准:
通过CAN的总线拓扑结构可以看出,CAN总线采用双绞线进行数据传输。两根导线中,一根称为CAN-High,另一根称为CAN-Low。这两根导线在静止状态下对地电压均为2.5V,此时两根导线的电压差值为0V,该状态称为隐性状态,其数字信号用1来表示;当CAN-High的对地电压为3.5V,CAN-Low的对地电压为1.5V时,此时CAN-High和CAN-Low两根导线的电压差为2V,该状态称为显性状态,其数字信号用0来表示。为了方便,不会出现混淆记忆,我们将CAN总线的这一特性记忆为“显零隐一”。
需要思考一个问题,假如节点A发送数据0101,节点B发送数据1111,节点A和节点B同时向总线发送数据,那么总线上的电压会如何变化呢?很明显,CAN总线上的电压变化是:2V-0V-2V-0V,用来表示数字信号0101。因为两个主节点共用一路CAN总线,而表示显性的2V电压差会覆盖表示隐性的0V电压差,即总线上某一时刻的电压只会有一种状态,无变化的电压自然会被有变化的电压覆盖,CAN的这一特性即为 显性可以覆盖隐性
3.2:优先级的选择
1:总线空闲时,最先发送的单元获得发送优先权,一旦发送,其它单元无法抢占,
2:如果有多个单元同时发送,则连续输出显性电平多的单元,具有较高优先级
3:从ID开始比较,如果ID相同,还可能会比较RTR和SRR等位
4:具有相同ID的数据帧和遥控帧在总线上竞争时,仲裁段的最后一位(RTR)为显性位的数据帧具有优先权,可继续发送
5:标准格式ID和具有相同ID的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的RTR位为显性位的具有优先权,可继续发送