CAN的数据链路层和物理层注意事项

1、CAN节点在总线上TX的同时还在RX上监听发送数据

       节点在发送每个位的同时读取总线上的电平信号,所有从节点上发送的位必须与回读的位一致,否则就是一个位错误

2、有些CAN收发芯片会有数据帧的自动重发功能,实现驱动时需要注意


3、CAN电平--隐性与显性

物理信号
  CAN2.0B规范定义了两种互补的逻辑数值:“显性”和“隐性”,同时传送“显性”和“隐性”位时,总线结果值为“显性”。“显性”(“Daminant”)数值表示逻辑“0”,而“隐性”(“Recessive”)表示逻辑“1”。
  在CAN规范中并未定义代表逻辑电平的物理状态(例如电压),iCAN网络使用符合ISO11898-2标准的电平信号,典型地,CAN总线为“隐性”(逻辑1)时,CAN_H和CAN_L的电平为2.5V(电位差为0V);CAN总线为“显性”(逻辑0)时,CAN_H和CAN_L的电平分别是3.5V和1.5V(电位差为2.5V)

由此可见,无论从实时性、适应性、灵活性,还是可靠性上来看,CAN总线都是一种比RS-232更为优秀的串行总线。当两台串口设备的相距较远,不能直接用RS-232把它们连接起来时,就可以把RS-232转换为CAN,通过CAN总线来实现串口设备的网络互连。
但是,RS-232和CAN在电平和帧格式上都是很大的不同。具体表现如下:
    RS-232标准电平采用负逻辑,规定+3V~+15V之间的任意电平为逻辑“0”电平,-3V~-15V之间的任意电平为逻辑“1”电平。而CAN信号则使用差分电压传送,两条信号线称为“CAN_H”和“CAM_L”,静态时均为2.5V左右,此时的状态表示为逻辑“1”,也可以叫做“隐性”;用CAN_H比CAN_L高表示逻辑“0”,称为“显性”。显性时,通常电压值为:CAN_H=3.5V,CAN_L=1.5V;
差分电压定义:  Vdiff = CAN_H - CAN_L
那个图中黄线为CAN_H波形,绿线为CAN_L
在波形左,右两端时,CAN_H=CAN_L=2.5v,称为"隐性"  (差值为"0v")
在波形中间时,CAN_H=3.5V,CAN_L=1.5V,称为"显性"  (差值为"2v")


你可能感兴趣的:(硬件知识)