CAN总线的物理层定义了连接车内各控制器的相关介质以及接口。由于CAN总线的数据传输实质是通过总线上的电压变化传输的,所以CAN的总线电压是CAN总线技术的核心所在,总线电压在物理层中定义。为了深刻理解CAN总线,下面我们详细介绍总线电压:
CAN总线的拓扑结构如下:
通过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总线的这一特性记忆为“显零隐一”。
CAN总线是多主节点(多主机)的局域网,各个主节点可以同时向总线上发送数据,此时总线上就会有电压变化。之前介绍过,如果总线的CAN-High和CAN-Low产生电压差,称为显性用0表示,如果总线上没有电压差,称为隐性用1表示。那么大家需要思考一个问题,假如节点A发送数据0101,节点B发送数据1111,节点A和节点B同时向总线发送数据,那么总线上的电压会如何变化呢?很明显,CAN总线上的电压变化是:2V-0V-2V-0V,用来表示数字信号0101。因为两个主节点共用一路CAN总线,而表示显性的2V电压差会覆盖表示隐性的0V电压差,即总线上某一时刻的电压只会有一种状态,无变化的电压自然会被有变化的电压覆盖,从显性和隐性的命名上可以看出这一深意(这很好理解,如同两个人A和B(即两个主节点)同时潜在水中游泳,并且他们游的一样快,如果露头表示显性0,不露头表示隐性1,A和B分别向外界传递某种信息0101和1111,那么我们通过观察水面的露头变化只会得到0101的信息),CAN总线的这一特性我们称为“显性可以覆盖隐性”,这一特性对于后面学习数据帧的仲裁、应答等机制都至关重要,因此需要深刻理解。
学习CAN总线物理层除了总线电压这一部分需要深刻理解之外,剩下的无非都是一些物理介质以及接口的规定。之后一章节将对物理介质及接口做详细的说明(原创内容,转载请注说明)。