• 通信总线协议五 :CAN


    通信总线协议五 :CAN

    1. CAN总线简介

    • CAN : 控制器局域网CAN(Controller Area Network), 是一种技术先进、可靠性高、功能完善、成本合理的远程网络通讯控制方式,广泛应用于汽车领域。
    • CAN总线主要功能特性有:
      • 多主(master)架构依据优先权进行总线访问
      • 无破坏性的基于优先权的逐位仲裁
      • 借助验收滤波器的多地址帧传递
      • 全系统数据相容性
      • 错误检测和出错信令
      • 很远的数据传输距离(长达10Km)
      • 高速的数据传输速率(高达1Mbps)
      • 高度实时性:每帧报文允许传输最高8个字节的数据
      • 发送期间丢失仲裁或出错而遭到破坏的帧可自动重发
      • 暂时错误和永久性故障节点的判别以及故障节点的自动脱离
      • 脱离总线的节点不影响总线的正常工作

    2. CAN总线基本概念

    • 使用双绞线进行串行通信,一根为CAN_H,另一根为CAN_L
    • 总线上的电平有显性电平隐性电平两种。
      • “显性”状态 : VCAN-H = 3.5V, VCAN-L = 1.5V,即Vdiff = 2V;
      • “隐性”状态 : VCAN-H 和 VCAN-L 固定在平均电压 2.5V,即Vdiff = 0V。
      • 显性电平表示逻辑值 “0”,隐性电平表示逻辑值“1”
        在这里插入图片描述
    • CAN分层结构
      CAN总线控制器中集成了CAN协议的物理层数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等项工作。
      在这里插入图片描述

    3. CAN 协议介绍

    3. 1 CAN 协议消息报文格式

    1. CAN帧格式可分为:

    • 标准帧(Stand Frame):具有11位标识符
    • 扩展帧(Extend Frame):具有29位标识符

    2. 通信报文帧类型分为:

    • 数据帧:从发送节点向其它节点发送数据
    • 远程帧:向其它节点请求发送具有同一识别符的数据帧
    • 错误帧:当检测出错误时向其它节点指明其已检测到总线错误
    • 过载帧:接收单元通知其尚未做好接收准备

    3. 帧结构:
    在这里插入图片描述

    • 帧起始 :标志帧的起始,由一个“显性”位构成。
    • 仲裁场:由标识符(ID)远程发送请求(RTR)位组成。
      • 标识符:的长度为11位,这些位以ID-10至ID-0的顺序发送,最低位为ID-0,其中最高7位(ID-10 ~ID-4)必须不是全“隐性”。
      • RTR位:数据帧中是“显性”,远程帧是“隐性”。
    • 控制场:6位组成,两个用于扩展的保留位和4位数据长度码。
    • 数据场:由数据帧中被发送的数据组成,可包括0至8个字节, 远程帧无数据场
    • CRC场:包括CRC序列、CRC界定符。参加CRC校验的位场包括帧起始、仲裁场、控制场、数据场(假若存在)在内的无填充位流。CRC序列后随CRC界定符,它只包括一个“隐性”位。
    • 应答场:为两位长度,包括应答间隙应答界定符。在应答场中发送站送出两个“隐性”位,一个正确地接收到有效报文的接收器,在应答间隙期间,通过传送一个“显性”位将此信息报告给发送器(接收器发送“应答”)。
    • 帧结束:由7个“隐性”位组成的标志序列界定的。

    4. 错误帧:

    • 主动错误帧:标志(6 个显性位)+ 界定符(8 个隐性位)
    • 被动错误帧:标志(6 个隐性位)+ 界定符(8 个隐性位)

    5. 过载帧

    • 过载标志(6 个显性位) + 过载界定符(8 个隐性位)
    • 过载帧在帧间间隔产生,主动错误帧是在帧传输时发出

    6. 帧间空间

    • 通过插入帧间隔将数据帧和远程帧与前面的帧分开
    • 过载帧和错误帧前不插入帧间隔。
    • 组成:
      • 间歇场 : 3 个隐性位。
      • 总线空闲场 : 无长度限制隐性电平。

    3. 2 总线仲裁(Bus Arbitration)

    • 总线空闲时,任何节点可以发送报文;每条报文都有唯一的标识符;
    • 多节点同时发送时,在“仲裁场”进行“逐位仲裁”;标识符的值小获得优先权;失去仲裁的节点在总线空闲时重新传送。
    • 具有相同 ID 的数据帧和远程帧在总线上竞争时,数据帧具有优先权。
    • 标准格式 ID 与相同 ID 的远程帧或者扩展格式的数据帧在总线上竞争时,标准格式的 RTR 位为显性位的具有优先权。

    3. 3 位流编码(Bit Coding)与位填充(Bit Stuffing)

    • 位流编码:“不归零”方法编码,位电平只有“0”和“1”;各位无附加同步信号;时钟频率误差及传输路径上的相位延迟引起同步偏差通过硬件同步或者再同步的方法调整时序。
    • 位填充:发送器检测到位流里有5个连续相同值的位,便会自动在位流里补充一位,接收器自动删除这个补充位。固定位场中不用位填充,发送数据帧和远程帧时,SOF~CRC 场间的数据进行位填充。

    3. 4 位定时与同步

    • 位时间分为:同步段、传播段、相位缓冲段1、相位缓冲段2
      • 同步段用于同步各节点,正常情况下跳变沿落在此段内;
      • 传播段用于补偿网络内的传输延时;
      • 采样点时刻读取的电平代表这个位的电平;
        在这里插入图片描述
    • 位同步的规则:
      • 在总线空闲时,只要检测到一个隐性到显性的边沿,就执行一次硬同步(以该边沿作为同步段)
      • 在总线不空闲时,若边沿落在同步段以外,则按其与同步段之差执行再同步:
        再同步情况1:边沿落在同步段以后,则把所差份额加到相位缓冲段1
        再同步情况2 :边沿落在同步段以前,则从相位缓冲段2减去所差份额
        再同步所加减的份额有个上限,该上限可取值1~4个时间份额,但不可大于相位缓冲段1。
      • 因为有位填充规则,所以可用于再同步的边沿在一定时间内总会出现,最大可能时间间隔是29个位。

    3. 5 错误检测机制

    在这里插入图片描述

    1. 五种节点错误类型
    • 位错误 : 发送和监视的位值不相符合 (除仲裁场、应答场外)。
    • 填充错误 : 位填充编码位流中出现了第六个连续相同的位电平。
    • 形式错误 : 一个固定形式的位场含有一个或多个非法位。
    • 应答错误 : 应答间隙所监视的位不为“显性。
    • CRC 错误 : 接收器的CRC结果和发送器的CRC结果不同。
    1. 两种错误计数器:发送错误计数(TEC)接收错误计数(REC)

    2. 总线节点存在以下三种状态:

    • 错误主动:节点可以正常地参与总线通讯,并在错误被检测到时发出主动错误标志。
    • 错误被动:节点不允许发送主动错误标志。“错误被动”的单元参与总线通讯,在错误被检测到时发出被动错误标志。
    • 总线关闭(Bus Off):“总线关闭”的单元不允许在总线上有任何的影响。
    • 错误主动和被动为暂时错误, Bus Off为永久性故障。
    1. Bus Off恢复条件:
    • 在bus off发生后,总线上已经检测到了128次11个连续的隐性位
    • 用户程序请求恢复,通常MCU中的CAN控制器都可以支持自动恢复和手动恢复两种方式。CAN总线的bus off恢复需要满足整车的网络管理规范。

    4. CAN 网络通信矩阵介绍

    上述介绍的CAN总线协议的相关内容,由CAN控制器进行实现,开发中了解CAN控制器芯片的控制方法即可。对于大多数汽车开发人而言,更多的是了解CAN网络通信矩阵。

    4.1 通信矩阵

    • 信号、消息和网络节点之间的相互关系以表格形式显示,由整车厂完成定义,车辆网络中的各个节点需要遵循该通讯矩阵才能完成信息的交互和共享。
      • 网络节点 :一般一个汽车控制器作为一个网络节点
      • 消息 :一个控制器会发出多个帧报文,每帧报文称为消息
      • 信号 :一阵报文长度为1-8 byte, 大多为8byte,即64bit ,规定不同的bit代表不同信号,则一阵报文包含多个信号
    • 通信矩阵基本内容包括:
      在这里插入图片描述
      • 基本信息:
        • 报文名称 :每个报文消息规定的名字
        • ID :唯一标识报文的ID号,规定ID范围为0x0 - 0x7FF,0x5xx用于网络报文,0x7xx用于诊断报文,其它用于应用报文。
        • 报文类型 :分为周期报文,事件报文,周期事件报文
        • 报文周期 : 报文发送的周期
        • 长度 : 报文字节长度,1- 8 byte
      • 信号定义 :
        • 信号名称:一般是以发送节点的名字开头,“_” 后面是具体指代的内容。
        • 信号长度:该信号的长度,单位是bit 位。
        • 信号类型:Boolean(布尔类型true或false) 还是 Unsigned(无符号)。
        • 起始字节:起始位所在的字节序号。
        • 起始位:信号LSB(least significant bit)所在的位置。
        • 结束位:信号MSB(Most Significant Bit)所在的位置。
        • 精度/偏移量:描述信号值如何转变成信号物理值
        • 物理值公式真实物理值 = 信号值 * 精度 + 偏移量
        • 物理值范围:经过物理值转换后的最大最小值。

    4.2 DBC文件

    • 全称为Data Base CAN,描述CAN网络中的通信信息,即根据CAN通讯协议制作的一份用于解析CAN报文数据的文件。因为我们获得的每一帧报文都是一串8个字节、十六进制的数据(共64bit),想要知道报文数据代表什么,需要对着通讯协议去翻译出数据代表含义。而DBC文件的作用就是帮助我们直接得到报文数据的代表含义,省去了查通讯协议这个步骤,直接得到报文数据的具体含义。
      在这里插入图片描述
    • 每个信号去填充64bit 位时,两种填充方式:
      • Intel格式:以起始位为原点,自上而下填充。
      • Motorola格式:以起始位为原点,自下而上填充。

    在这里插入图片描述
    在这里插入图片描述

    • 信号的高位:即最能表达信号特性的因子,最左侧的位,数量级最大,牵一发动全身,即高位。
    • 信号的低位:即最不能表达信号特性的因子,最右侧的位,即低位。
    • 信号的起始位:信号的最低位。主机厂在定义整车CAN总线通信矩阵时,每一个信号都从其最低位开始填写。
      在这里插入图片描述

    4.3 CANdb++

    • CANdb ++是一个数据管理程序,可用于创建和修改网络总线系统中的信息以及信息单元之间的相互关系,即建立DBC文件的软件
    • 关于DBC文件和CANdb++软件使用方法,可学习 :优秀的博主写的专题文章 :DBC专题

    感谢阅读 若有错误 敬请见谅 !!!


  • 相关阅读:
    推进生态社会化分工 与伙伴共担未来 数商云受邀出席京东科技合作伙伴论坛
    arthas
    MONAI Label 安装流程及使用攻略
    【C++11】右值引用和移动语义 {左值引用和右值引用;移动语义;解决函数传值返回的深拷贝问题;完美转发}
    Redis面试必备,超详细!!(至尊典藏版)
    【python学习小案例】提高兴趣之BMI计算器
    Opencv项目实战:01 文字检测OCR(2)
    企业如何通过CRM系统赢得客户?
    电脑出现关于kernelbase.dll文件找不到的情况,有什么办法可以解决?
    Vue2+Vue3笔记(尚硅谷张天禹老师)day03
  • 原文地址:https://blog.csdn.net/weixin_44289254/article/details/126324471