跳至主要內容
Can基础

Can基础

YanZJNNFFCanCan大约 7 分钟约 2062 字

CAN是什么

CAN 是 Controller Area Network(控制器局域网)的缩写,它是一种串行通信协议和总线系统,最初设计用于汽车电子系统中的通信。

CAN 是由罗伯特·博世公司(Robert Bosch GmbH)在 1980 年代初开发的,旨在解决汽车电子系统中的通信需求。它提供了一种可靠的、实时的、高速的数据通信方式,用于在车辆的各个电子控制单元(ECU)之间进行通信。

CAN 总线采用了多主从的通信结构,其中一个或多个主节点负责控制总线的访问和数据传输,而从节点则接收和发送数据。CAN 总线使用差分信号传输,即使用两个线路(CAN_H 和 CAN_L)进行数据传输,以提高抗干扰能力。

CAN 协议具有以下特点和优势:

  1. 可靠性:CAN 使用差分信号传输,具有抗干扰能力强的特点,适用于车辆等电磁环境复杂的场景。
  2. 实时性:CAN 提供了实时的数据传输,用于传输对实时性要求较高的信息,如引擎控制、制动系统等。
  3. 高速性:CAN 总线的通信速率可达到 1 Mbps,能够满足大多数应用的需求。
  4. 灵活性:CAN 具有广播和点对点两种通信模式,支持多个节点同时进行通信。
  5. 易于扩展:CAN 支持在总线上添加或移除节点,并且具有较好的可扩展性。
  6. 错误检测和纠正:CAN 使用 CRC(循环冗余校验)进行错误检测,还具有错误报告和错误处理机制。

CAN物理层

CAN通信是一种异步通信方式,不依赖于时钟信号进行同步。它使用两条信号线,即CAN_High(CAN_H)和CAN_Low(CAN_L),以差分信号的形式进行通信。

CAN物理层主要有两种形式:

  1. 高速闭环网络(符合ISO 11898标准):该网络适用于短距离通信,总线最大长度为40米,通信速率最高可达1 Mbps。在总线的两端,需要分别连接一个120欧姆的电阻。

  2. 低速开环网络(符合ISO 11519-2标准):该网络适用于远距离通信,最大传输距离可达1千米,最高通信速率为125 kbps。该网络由两根独立的总线组成,不形成闭环结构,在每根总线上都需要串联一个2.2千欧姆的电阻。

CAN协议层

CAN通信是一种异步通信方式,没有时钟信号线。在一个共享总线网络中,各个节点之间使用约定好的波特率进行通信。CAN使用位同步的方式来抗干扰、吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。

位时序分解:为了实现位同步,CAN协议采用了位时序分解的方法。每个数据位被分解为SS(同步段)、PTS(传输段)、PBS1(位填充段1)和PBS2(位填充段2)四个部分,它们的长度加起来构成一个CAN数据位的长度。最小时间单位为Tq(时间量子),一个完整的位由8到25个Tq组成。

段名称作用Tq数
SS 段 (SYNC SEG)同步段,若通讯节点检测到总线上信号的跳变沿被包含在 SS 段的范围之内,则表示节点与总线的时序是同步的1Tq
PTS 段 (PROP SEG)传播时间段,用于补偿网络的物理延时时间。是总线上输入比较器延时和输出驱动器延时总和的两倍1~8Tq
PBS1 段 (PHASE SEG1)相位缓冲段,主要用来补偿边沿阶段的误差,它的时间长度在重新同步的时候可以加长1~8Tq
PBS2 段 (PHASE SEG2)另一个相位缓冲段,也是用来补偿边沿阶段误差的,它的时间长度在重新同步时可以缩短2~8Tq

波特率:总线上的各个通讯节点只要约定好 1 个 Tq 的时间长度以及每一个数据位占据多少个 Tq,就可以确定 CAN 通讯的波特率。

同步过程:波特率只是约定了每个数据位的长度,数据同步还涉及到相位的细节,此时就要用到数据位内的 SS、PTS、PBS1 及 PBS2 段了。根据对段的应用方式差异, CAN 的数据同步分为硬同步和重新同步。其中硬同步只是当存在帧起始信号时起作用,无法确保后续一连串的位时序都是同步的,而重新同步方式可解决该问题

  • 硬同步:在CAN节点发送数据时,会发送帧起始信号。挂载在CAN总线上的节点会检测总线上的信号,当检测到总线的帧起始信号与节点内部的时序不同步时,节点调整自身的位时序,使得同步后的采样点可以正确采集数据
  • 重新同步:当一帧数据很长且节点信号与总线信号相位有偏移时,硬同步无法解决同步问题。重新同步利用普通数据位的跳变沿来同步。它使用SS段进行检测,目的是包含跳变沿。重新同步分为相位超前和相位滞后两种情况
    • 相位超前:节点从总线的边沿跳变中,检测到它内部的时序比总线的时序相对超前 2Tq,这时控制器在下一个位时序中的 PBS1 段增加 2Tq 的时间长度,使得节点与总线时序重新同步
    • 相位滞后:节点从总线的边沿跳变中,检测到它的时序比总线的时序相对滞后 2Tq,这时控制器在前一个位时序中的 PBS2 段减少 2Tq 的时间长度,获得同步

报文种类及结构:对数据、操作命令 (如读/写) 以及同步信号进行打包,打包后的这些内容称为报文。CAN 一共规定了 5 种类型的帧

帧用途
数据帧用于节点向外传送数据
遥控帧用于向远端节点请求数据
错误帧用于向远端节点通知校验错误,请求重新发送上一个数据
过载帧用于通知远端节点:本节点尚未做好接收准备
帧间隔用于将数据帧及遥控帧与前面的帧分离开来
  • 数据帧:数据帧是在 CAN 通讯中最主要、最复杂的报文

    段名称作用备注
    帧起始SOF,用于通知各个节点将有数据传输1个数据位(显性电平)
    仲裁段决定数据帧发送的优先级,也决定其它节点是否会接收这个数据帧。标准格式11位,扩展格式29位RTR位标识是否远程帧(0数据帧;1远程帧),IDE位为标识符选择位(0标准标识符;1扩展标识符),SRR位为代替远程请求位(隐性位),代替了标准帧中的RTR位
    控制段用表示数据段的字节数,由6个位构成标准帧和扩展帧有所不同,r1和r0为保留位,默认为显性位;DLC为数据长度码,由4位组成,表示本报文中的数据段含有多少个字节
    数据段节点要发送的原始信息由 0~8 个字节组成,从最高位(MSB)开始输出
    CRC段用于检查帧传输错误由15个位的CRC顺序和1个位的CRC界定符(用于分隔的位)组成
    ACK段用来确认是否正常接收由ACK槽(ACK Slot)和ACK界定符2个位组成
    帧结束EOF,由发送节点发送的7个隐性位表示结束7 个数据位(隐性电平)