CAN 是差分总线,根据两根线上的电位差来产生显性电平和隐性电平,实现发送消息的目的。当处于逻辑1,CAN_High和CAN_Low的电压差小于0.5V时,称为隐性电平(Recessive),当处于逻辑0,CAN_High和CAN_Low的电压差大于0.9V,称为显性电平(Dominant)。
一般总线通信都是分主机和从机,但是CAN总线上所有的设备都是对等地位,既可以做主机也可以做从机,但是同一时刻,只允许一个主机存在。所以CAN总线可以认为是多主控制,在总线空闲的时候,所有设备都可以以主机身份发起通信。
但是如果由两个以上的设备同时发起发送怎么办?CAN总线拥有仲裁机制,CAN标识符里面有优先级,总线仲裁高优先级获胜,低优先级失利,获胜方获得发送的权利。
通信速度较快,通信距离远。最高1Mbps(距离小于40M),最远可达10KM(速率低于5Kbps)。
连接节点多。CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加,提高通信速度,可连接的单元数减少。
CAN总线不设定节点的地址,而是通过消息的标识符(Identifier)来区别消息,CAN标准格式标识符11位,扩展格式标识符29位。标识符格式一致,这让总线上增删节点变得更加灵活。
图一,CAN协议格式
CAN控制器大多具有根据ID过滤报文的功能,即只接收某些ID的报文。节点对接收到的报文进行过滤:比较消息ID与选择器(Accepter)中和接受过滤相关位是否相同。如果相同,接收,如果不相同,则过滤。
可以使用中断方式接收,也可以查询接收。
图二,中断接收
图三,查询接收
一般使用PCANVIEW进行测试,可以方便的对总线上的CAN消息截胡下来。
图四,PCANVIEW
,