文章分两部分,一是CAN的详解,二是常见问题汇总;文章长,但是都是重点精华,往有帮助~
(参考的是火哥的STM32有关CAN协议的文档)
一、CAN的详解
1. 物理层
- CAN总线:成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线。
- CAN是异步通讯,只有CAN_High和CAN_Low两条信号线,且这两条信号线是差分信号线,以差分信号的形式通讯;
- CAN是半双工的,在同一时刻,一个通讯节点发送消息,其他节点只能接收消息;
- CAN物理层的形式分为闭环总线和开环总线,闭环总线是高速短距离的,长度最长40m,通信速度最高10Mbps;开环总线是低速远距离的,长度最长1km,通信速度最高125kbps。开环闭环的区别在于差分信号线是不是连在一起的。
- CAN总线可以挂载多个节点:
- 差分信号:两根信号线的幅度相同,相位相反,通过电压差代表电平1和0;差分信号优点:抗干扰能力强,因为有外界噪声干扰时,会同时耦合到这两条信号线上,由于接收端只关心信号的差值,因此噪声可以抵消。
- 逻辑电平为1是隐性电平,CAN_High和CAN_Low电压都是2.5v,压差为0;逻辑电平为0显性电平,CAN_High电压3.5v和CAN_Low电压1.5v,压差2v。
2. 协议层
- CAN中,每个数据位又分为多个段,包括:SS、PTS、PBS1、PBS2;一个数据位由8~25个Tq表示,这个段的作用是保证让该节点与总线的时序同步,确保通讯正常;