概述

CAN 定义了物理层(Physical)和数据链路层(DataLink)

  • 物理层:规定引脚数、如何定义0和1等等
  • 数据链路层:如何定义一个CAN帧

物理层

特性包括

  • 包括 CAN_Low 和 CAN_High 两个线
  • 逐位总线仲裁
  • 双绞线,差分信号

电平

0为显性,1为隐性,即0可以把1覆盖了

按位仲裁

可以理解0的优先级比1高,即数字越小优先级越高;节点A它发送了1却检测到了0,那它就会停止发送了,因为有优先级更高的设备在传输

数据链路层(帧)

共有三种类型:

其中**错误帧过载帧帧间隔**都是由硬件完成的,没有办法用软件来控制。

数据帧和遥控帧有**标准格式扩展格式。标准格式有11位标识符,扩展格式有29位**标识符。

  • 数据帧
  • 远程帧
  • 错误帧

数据帧

包括

1 帧起始 表示帧的开始,产生一个bit的显性电平。
2 仲裁段 表示帧的优先级, 由标识符(ID)和传送帧类型(RTR)组成。
3 控制端 表示数据的字节数,由6个bit构成(4bits为DLC 0~8bytes)。IDE位用于表明此帧是标准帧还是扩展帧。
4 数据段 数据的具体内容,可发送0~8 个字节的数据。
5 CRC段 用于校验传输是否正确。
6 ACK段 表示确认是否正常接收。
7 帧结束 表示此帧结束。

远程帧

用于请求数据

不包括数据区

错误帧

Transmitted when a node detects a fault and cause all other nodes to detect a fault

包括

  • 错误标志
  • 错误分割(留时间给其他设备发错误帧)

如何使用

  • 配置波特率

  • 配置过滤器:CAN过滤器有两种工作模式列表模式掩码模式

    • 列表:列出ID名字,过滤器通过判断报文ID与其是否一致来决定是接受还是舍弃这份报文。
    • 掩码:通过确定ID特定位的值来判断报文的接受与丢弃。
  • 之后就可以发送和接收了