CAN介绍
CAN总线:控制器局域网总线(类似一个局域网网络,网络中任何一个节点都可以向其他节点发送数据)
CAN总线特性:
两根通信线(CAN_H、CAN_L)
差分信号通信,抗干扰能力强
高速CAN(ISO11898):125k~1Mbps, <40m
低速CAN(ISO11519):10k~125kbps, <1km
异步,无需时钟线,通信速率由设备各自约定
半双工(不能同时发送和接收),可挂载多设备,多设备同时发送数据时通过仲裁判断先后顺序
11位/29位报文ID,用于区分消息功能,同时决定优先级(ID号小的优先发送)
CAN总线通过广播自己的消息来实现多设备的通信,CAN总线中的每个设备都可以广播消息,每个消息都加一个ID用于区分功能
一个数据帧(一次发送)可配置1~8字节的有效字节
可实现广播式和请求式两种传输方式
应答、CRC校验、位填充、位同步、错误处理等特性
主流通信协议对比
UART适用于点对点的通信,I2C、SPI主要适用于一主多从的情况,其中SPI主要用于需要高速通信的场景,那假如我需要的场景是,多个点(主控)相互通信,UART、I2C、SPI就不行了,这时候就引进了CAN通信,也就是可以实现多个主控相互通信。
CAN硬件电路
每个设备通过CAN收发器挂载在CAN总线网络上
CAN控制器引出的TX和RX与CAN收发器相连,CAN收发器引出的CAN_H和CAN_L分别与总线的CAN_H和CAN_L相连
高速CAN使用闭环网络,CAN_H和CAN_L两端添加120Ω的终端电阻(具有收紧作用,因为两个线是连在一起的)
低速CAN使用开环网络,CAN_H和CAN_L其中一端添加2.2kΩ的终端电阻
CAN默认就是1,如果想发送0的时候,就拉开两个线,产生信号的差分,就是发送0了
CAN电平标准
CAN总线采用差分信号,即两线电压差(VCAN_H-VCAN_L)传输数据位
高速CAN规定:
电压差为0V时表示逻辑1(隐性电平)
电压差为2V时表示逻辑0(显性电平)
低速CAN规定:
电压差为-1.5V时表示逻辑1(隐性电平)
电压差为3V时表示逻辑0(显性电平)