can协议_can协议解析 - CSDN
精华内容
参与话题
  • CAN协议完全讲解

    2020-07-28 17:06:47
    CAN协议完全讲解,适合新手下载。1.概要;2.使用注意事项;3.can是什么;4.can的特点;5.错误;6.can协议的基本概念;7.can协议及标准规格;8.can协议
  • CAN详解--协议详解

    千次阅读 2018-12-26 19:00:35
    基础知识一、背景二、发展三、总线要点四、参考 ...1、随着车用电气设备增加,对应的电气节点剧增(高档车节点有上千之多),一般的通信协议需要的线束太多。 2、 二、发展 1、 三、总线要点 1、 四、参考 1、 ...

    一、背景

    1、随着车用电气设备增加,对应的电气节点剧增(高档车节点有上千之多),一般的通信协议需要的线束太多。需要减少线束,支持更多节点的协议。
    ECU分布

    二、发展

    1、CAN ( Controller Area Network ) 即控制器局域网络。由于其高性能、高可靠性、及独特的设计,CAN越来越受到人们的重视。CAN最初是由德国的BOSCH公司为汽车监测、控制系统而设计的。现代汽车越来越多地采用电子装置控制,如发动机的定时、注油控制,加速、刹车控制(ASC)及复杂的抗锁定刹车系统(ABS)等。由于这些控制需检测及交换大量数据,采用硬接信号线的方式不但烦琐、昂贵,而且难以解决问题,采用CAN总线上述问题便得到很好地解决。
    2、1983-1986年 大众与Bosch制定 软件协议,由Intel 生产控制器。
    3、1990年 首次应用于汽车 奔驰 S级 12 缸发动机的汽车。
    4、1991年9月,NXP半导体公司制定并发布CAN技术规范CAN2.0A/B,其中CAN2.0A协议规范定义了标准帧格式,CAN2.0B协议规范定义了扩展帧格式。
    5、1993年11月,ISO组织正式颁布CAN国际标准ISO11898(高速应用,数据传输速率小于1Mbps)和ISO11519(低速应用,数据传输速率小于125Kbps)。
    6、1996年 用于奥迪 A8 D2自动变速器 3.7升 V8 01V AG5的汽车。
    7、1997年 用于帕萨特 B5 AG。
    8、1998年 用于宝来、高尔夫 A4 AG。
    9、VAN Bus 用于标志、雷诺、雪铁龙等,菲利普公司产品。
    10、J1850-HBCC 用于福特,莫托罗拉公司产品。
    11、J1850-DLC 用于通用,莫托罗拉公司产品。

    三、总线优点

    1、数据传递更安全可靠;
    2、低成本(通信介质可采用双绞线,同轴电缆和光导纤维,一般采用廉价的双绞线即可,无特殊要求);
    3、高速实时传递;
    4、有条件实现单线功能;
    5、适用于各种汽车;
    6、开放的标准。

    四、总线要点

    1、CAN的应用

    (1)车载网络构想

    车载网络构想

    (2)应用实例

    应用实例

    (3)连接图

    CAN连接图

    2、CAN协议基本概念

    (1)ISO模型与CAN协议

    ISO与CAN

    (2)ISO11898 和 11519-2 物理层的主要不同点

    ISO11898 和 11519-2 物理层的主要不同点

    (3)通信速度和最大总线长度

    通信速度和最大总线长度

    (4)ISO11898、ISO11519-2 的物理层特征

    ISO11898、ISO11519-2 的物理层特征

    (5)CAN 协议和标准规格

    CAN 协议和标准规格

    (6)通信协议分类

    通信协议分类

    3、CAN协议

    帧的种类及用途

    在这里插入图片描述

    (1)数据帧

    A、数据帧的构成

    数据帧的构成
    数据帧由7个段构成,分别是:
    (1) 帧起始:表示数据帧开始的段。
    (2) 仲裁段:表示该帧优先级的段。
    (3) 控制段:表示数据的字节数及保留位的段。
    (4) 数据段:数据的内容,可发送 0~8 个字节的数据。
    (5) CRC 段:检查帧的传输错误的段。
    (6) ACK 段:表示确认正常接收的段。
    (7) 帧结束:表示数据帧结束的段。

    (2)遥控帧

    A、遥控帧的构成

    在这里插入图片描述
    遥控帧由6个段构成,分别是:
    (1) 帧起始(SOF):表示帧开始的段。
    (2) 仲裁段:表示该帧优先级的段。可请求具有相同 ID 的数据帧。
    (3) 控制段:表示数据的字节数及保留位的段。
    (4) CRC 段:检查帧的传输错误的段。
    (5) ACK 段:表示确认正常接收的段。
    (6) 帧结束:表示遥控帧结束的段。

    (3)错误帧

    A、错误帧的构成

    在这里插入图片描述
    (1) 错误标志
    错误标志包括主动错误标志和被动错误标志两种。
    主动错误标志:6 个位的显性位。
    被动错误标志:6 个位的隐性位。
    (2) 错误界定符
    错误界定符由 8 个位的隐性位构成

    (4)过载帧

    A、过载帧的构成

    在这里插入图片描述
    (1) 过载标志
    6 个位的显性位。
    过载标志的构成与主动错误标志的构成相同。
    (2) 过载界定符
    8 个位的隐性位。
    过载界定符的构成与错误界定符的构成相同。

    (5)帧间隔

    A、帧间隔的构成

    在这里插入图片描述
    帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。
    过载帧和错误帧前不能插入帧间隔。
    (1) 间隔
    3 个位的隐性位。
    (2) 总线空闲
    隐性电平,无长度限制(0 亦可)。本状态下,可视为总线空闲,要发送的单元可开始访问总线。
    (3) 延迟传送(发送暂时停止)
    8 个位的隐性位。只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。

    五、补充要点

    1、信号传输技术数据

    (1)CAN bus最高传播速度:1 Mbps
    (2)ISO 分类:
    低速型 低于10 kbps (用于后视镜调整、电动窗、灯光照明、雨刷器等,称作LIN总线)
    低速型 10 -125 kbps (用于舒适系统、仪表显示等)
    高速型 125 kbps -1Mbps (用于发动机控制、ABS、传动控制等)
    (3)最多接入控制单元数:32个
    (4)通用版本:Bosch CAN 2.0

    2、干扰问题

    (1)两条数据线相互缠绕,防止电磁波干扰和向外辐射,规定绞距20mm。

    3、can收发器接口

    (1)常用三种接口器件
    M12小型连接器、OPEN5连接端子、DB9插座

    4、显性电平和隐性电平

    总线上的电平有显性电平和隐性电平两种。
    总线上执行逻辑上的线“与”时,显性电平的逻辑值为“0”,隐性电平为“1”。“显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平。并且,“隐性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比隐性电平更强。)

    六、参考

    1、《上海大众帕萨特CAN数据总线的结构原理》
    2、《CAN 入门书》 作者 瑞萨科技
    3、CAN总线要点

    展开全文
  • CAN协议学习(一)

    千次阅读 2019-05-23 12:15:30
    一、CAN协议的特点 1)在总线空闲时,所有单元都可以发送消息,两个以上单元同时发送消息时,对各消息的Identifier进行逐位仲裁比较,仲裁获胜的单元(具有较高优先级)可继续发送消息,仲裁失败的单元停止发送。 ...

    一、CAN协议的特点

    1)在总线空闲时,所有单元都可以发送消息,两个以上单元同时发送消息时,对各消息的Identifier进行逐位仲裁比较,仲裁获胜的单元(具有较高优先级)可继续发送消息,仲裁失败的单元停止发送。

    2)消息中没有地址,消息广播到总线上,任何总线上的单元都可以接收消息。在总线上增加单元,不会影响到其它的单元。

    3)最高数据传输速率1Mbps(距离小于40m),最远传输距离10km(速率低于5kbps)。CAN总线两个节点之间的通讯距离与波特率成反比。工程常用为500kbit/s的通信速率。

    类型 最高速率 描述
    高速CAN 1Mbit/s 最通用的CAN总线类型
    低速CAN 125kbit/s 容错,在一条总线短路时仍能正常工作
    单线CAN 50kbit/s 主要用低速的车身电子单元、舒适及娱乐控制领域

     

                                           

    4)CAN总线上可挂载多个单元,理论上挂载单元数没有上限,但受总线的时间延迟和电气负载限制。降低通信速率,可增加单元数量。

    5)所有单元具有错误检测功能,检测出错误后会立即通知其他单元。正在发送消息的单元一旦检测出错误,会结束当前的发送。

    二、网络拓扑

    CAN节点挂载在CAN_L和CAN_H之间,为降低反射,高速CAN在CAN总线两端增加了120Ω电阻,低速CAN和单线CAN在节点位置增加了电阻。低速CAN在总的终端电阻为100Ω时性能最佳,因此,确定低速CAN的终端电阻,需要先确定网络中的节点数,每个终端提供100Ω的一部分,并不要求每个终端有相同的阻值,但总值应该为100Ω。如总线中有3个CAN节点,则接到网络上的6个终端电阻值均为600Ω。

    ææ¯å享å¾ç

    对于高速CAN,当CAN_H - CAN_L < 0.5 时为隐性,即逻辑1;当 CAN_H-CAN_L>0.9V时为显性,即逻辑0。

    对于低速CAN,当CAN_L = 5V, CAN_H = 0V时为隐性;当CAN_H = 3.6V,CAN_L = 1.4V时为显性。相较于高速CAN,低速CAN显性和隐性的电平差异更大,抗干扰能力更强,

    单线CAN只有一根线,要求节点有较好的共地性,抗干扰能力较弱。

     三、总线仲裁

    总线空闲时,任何节点都可以发送报文。如果同时有多个节点发送报文,会出现总线访问冲突,CAN使用逐位仲裁的方式解决冲突。在仲裁期间,每个发送器都对发送的 Identifier 电平与被监控的总线电平进行比较,如果电平相同,则继续发送报文。若发送器发送了一个隐性电平,而监视到一个显性电平,则节点仲裁失败,退出发送状态。因此,Identifier越小,消息的优先级越高。若在非仲裁期间出现发送电平与监视电平不一致的状况,将产生错误事件。

                                

    四、消息机制

     CAN标准定义了四种消息类型,分别为数据帧、远程帧(也有称遥控帧)、错误帧和过载帧。

    数据帧:发送器向接收器发送数据帧;

    远程帧:接收器向发送器请求数据;

    错误帧:任何单元检测到总线错误后发出错误帧;

    过载帧:用于相邻数据帧和远程帧之间提供延时,由接收器发送,表示接收器来不及处理数据,请求延迟。

    五、位填充

    CAN总线使用非归零编码(NRZ),具有效率高的特点,但同步性能差。为保证同步通信中有足够的电平跳变,规范中应用位填充机制,在连续的5个相同电平后插入1个反相电平,接收节点收到消息后,自动将填充位删除。若检测到连续6个相同电平,则节点报错。

    六、消息过滤

     消息在CAN总线上是以广播的形式传输的,但并不是所有节点都对总线上的信息感兴趣。节点可通过CAN控制器中的过滤码和掩码来检验消息的 Identifier 是否匹配,从而决定是否接收消息。

    例:设置过滤码位 0x 00 00 15 60,设置掩码为 0x 1F FF FF F0,则节点只接收 Identifier 为 0x 00 00 15 60 ~0x 00 00 15 6F的消息。

    展开全文
  • CAN总线协议学习笔记

    千次阅读 2018-09-01 23:57:21
    CAN总线网络主要挂在CAN_H和CAN_L,各个节点通过这两条线实现信号的串行差分传输,为了避免信号的反射和干扰,还需要在CAN_H和CAN_L之间接上120欧姆的终端电阻,但是为什么是120欧姆呢?那是因为电缆的特性阻抗为120...

    1.CAN总线网络

    CAN总线网络主要挂在CAN_H和CAN_L,各个节点通过这两条线实现信号的串行差分传输,为了避免信号的反射和干扰,还需要在CAN_H和CAN_L之间接上120欧姆的终端电阻,但是为什么是120欧姆呢?那是因为电缆的特性阻抗为120欧。

    2.信号表示

    CAN总线采用不归零码位填充技术,也就是说CAN总线上的信号有两种不同的信号状态,分别是显性的(Dominant)逻辑0和隐形的(recessive)逻辑1,信号每一次传输完后不需要返回到逻辑0(显性)的电平。

    位填充规则:发送器只要检测到位流里有5个连续相同值的位,便自动在位流里插入补充位。

     

    观察下图:

    可以看到上图中的当第一段为隐性(recessive),CAN_H和CAN_L电平几乎一样,也就是说CAN_H和CAN_L电平很接近甚至相等的时候,总线表现隐性的,而两线点位差较大时表现为显性的,按照定义的:

    • CAN_H-CAN_L < 0.5V 时候为隐性的,逻辑信号表现为"逻辑1"- 高电平。
    • CAN_H-CAN_L > 0.9V 时候为显性的,逻辑信号表现为"逻辑0"- 低电平。

    下面将差分信号和显隐性之间对应关系总结为下表:

    状态

    逻辑信号

    电压范围

    显性Dominant

    0

    CAN_H-CAN_L > 0.9

    隐性recessive

    1

    CAN_H-CAN_L < 0.5

    由上面的分析我们可以知道:

    CAN总线采用的"线与"的规则进行总线冲裁。即1&0=0;所以0为显性。

    这句话隐含的意思是,如果总线上只要有一个节点将总线拉到低电平(逻辑0)即显性状态,总线就为低电平(逻辑0)即显性状态而不管总线上有多少节点处于传输隐性状态(高电平或是逻辑1),只有所有节点都为高(隐性),总线才为高,即隐性。

     

    3.通讯速率与通讯距离

    下面的SAE J2411为美国汽车标准。

    类型

    标准

    最高速率

    描述

    高速CAN

    CAN/ISO 11839-2

    1Mbit/秒

    最通用的CAN总线类型

    低速CAN

    ISO/ISO 11839-3

    125Kbit/秒

    容错,在一条总线短路的时候仍然能工作

    单线CAN

    SAE J2411

    50Kbit/秒

    高速模式可达到100Kbit/s主要用在汽车上,例如通用公司

     

    CAN总线上任意两个节点的最大传输距离与其位速率有关,如下表:

    位速率/kbps

    1000

    500

    250

    125

    100

    50

    20

    10

    5

    最大距离/m

    40

    130

    270

    530

    620

    1300

    3300

    6700

    10000

    这里的最大通信距离指的是同一条总线上两个节点之间的距离。可以看到速率越低通讯距离就越远,也就是说CAN总线的通讯距离和波特率成反比。在位速率为5千比特位每秒的时候达到最大的传输距离10公里。其中一般的工程中比较常用的为500K每秒的通讯速率。这个速率在实际测试的时候也是非常可靠的。

    如果想要更远的传输(大于10公里);可以考虑用多个CAN控制器连接或是加其他通讯协议(如485或是TCP/IP)的接口芯片组成的一个设备,这样就可实现长距离的通讯需求。 

     

    4.数据冲突解决办法-仲裁

    只要总线空闲,总线上任何节点都可以发送报文,如果有两个或两个以上的节点开始传送报文,那么就会存在总线访问冲突的可能。但是CAN使用了标识符的逐位仲裁方法可以解决这个问题。

    在仲裁期间,每一个发送器都对发送的电平与被监控的总线电平进行比较。如果电平相同,则这个单元可以继续发送。如果发送的是一"隐性"电平而监视到的是一"显性"电平,那么这个节点失去了仲裁,必须退出发送状态。如果出现不匹配的位不是在仲裁期间则产生错误事件。

    帧ID越小,优先级越高。由于数据帧的RTR位为显性电平,远程帧为隐性电平,所以帧格式和帧ID相同的情况下,数据帧优先于远程帧;由于标准帧的IDE位为显性电平,扩展帧的IDE位为隐形电平,对于前11位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高。 

     

    4.CAN总线是怎么通信的?

    CAN 总线是一个广播类型的总线,所以任何在总线上的节点都可以监听总线上传输的数据。也就是说总线上的传输不是点到点的,而是一点对多点的传输,这里多点的意思是总线上所有的节点。但是总线上的节点如何知道那些数据是传送给自己的呢?CAN总线的硬件芯片提供了一种叫做本地过滤的功能,通过这种本地过滤的功能可以过滤掉一些和自己无关的数据,而保留一些和自己有关的信息。 

    CAN标准定义了四种消息类型,每条消息用一种叫做比特位仲裁(Arbitration)机制来控制进入CAN总线,并且每条消息都标记了优先权。另外CAN标准还定义了一系列的错误处理机制。

    CAN报文的四种消息类型:

    • 数据帧:数据帧将数据从发送器传输到接收器。
    • 远程帧:总线单元发出远程帧,请求发送具有同一标识符的数据帧。
    • 错误帧:任何单元检测到总线错误就发出错误帧。
    • 过载帧:过载帧用在相邻数据帧或远程帧之间的提供附加的延时。 

     

    (1)数据帧

     

    下图为基本的格式:

     

    CAN总线中有标准帧和扩展帧两种格式,两种格式不同的地方在于仲裁域格式的不同,看下面两个表格可以很清楚的看出两者的不同,下面第一个表是标准帧(CAN2.0 A),第二个为扩展帧(CAN2.0 B):

    下面为扩展帧格式(CAN2.0B):

    其中

    • SOF为帧开始
    • SRR为"替代远程请求位
    • IDE为扩展标识符位
    • RTR为远程传输请求位
    • CRC delimiter 为CRC定界符。
    • ACK delimiter 为应答定界符.

     

    我们看到上图中的基本帧格式可以总结为以下几个域:

    描述

    仲裁域

    仲裁域决定了当总线上两个或是多个节点争夺总线时的优先权。

    数据域

    包含了0到8字节的数据。

    CRC域

    包含了15位的校验和,校验和用来做错误检测。

    应答槽

    任何一个已经正确接收到消息的控制器在每一条消息的末端发送一个应答位,发送器检查消息是否存在应答位,如果没有就重发消息。

     

     

    (2)远程帧

     

    作为数据接收器的站,通过发送远程帧,可以启动其资源节点传送它们各自的数据。远程帧和数据帧非常类似,只是远程帧没有数据域。

     

    上图就是远程帧的帧格式,它相对与数据帧没有远程帧,但是要注意发送远程帧的时候RTR位要置1,表示发送的是远程帧。下图更加清晰了呈现了这种结构。

     

    (3)错误帧

     

    错误帧是当总线的某一个节点检测到错误后发送出来的,它会引起所有节点检测到一个错误,所以当有任何一个节点检测到错误,总线上的其他节点也会发出错误帧。CAN总线设计了一套详尽的错误计数机制来确保不会由于任何一个节点反复的发送错误帧而导致CAN总线的崩溃。

    如上图所示错误标志和错误定界符组成,高低代表分别代表隐性和显性,其中错误标志为所有节点发过来的错误标志的叠加(Superposition)。下图更为清楚的看出各个数据位的分布:

    下面通过以下数据结构框图概括各个部分的定义:

     

    错误标志有两种形式:

    • 主动错误标志,它由6个连续的显性位0组成,它是节点主动发送的错误标志。
    • 被动错误标志,它由6个连续的隐性位1组成,除非被其他节点的显性位覆盖。

       

      刚才说到一个节点上检测到错误会导致总线上所有的节点都会检测到错误并发送错误标志,这是为什么呢?

      因为单一节点上的错误标志格式违背了从帧起始到CRC界定符的位填充规则,也破坏了ACK域或帧结尾的固定格式。下面简要说下位填充规则。

      位填充规则:发送器只要检测到位流里有5个连续相同值的位,便自动在位流里插入补充位。

      注意:位填充规则只是针对数据帧和远程帧,错误帧和过载帧格式固定。

          所以所有其他的节点会检测到错误条件并且开始发送错误标志,因此错误帧就是各个站的不同错误标志叠加在一起的结果。

    当某个节点发送错误帧(带有错误标志),其他节点收到了错误帧,检测到错误条件,就通过发送"被动错误标志"的错误帧来提示错误。

    错误定界符:

    传送了错误标志以后,每一个站就发送一个隐性位,并一直监视总线直到检测出一个隐性位为止,然后就开始发送其余7个隐性位。

     

    (4)过载帧

    过载帧是接收节点用来向发送节点告知自身接收能力的帧。

    过载帧,意思就是某个接收节点来不及处理数据了,希望其他节点慢点发送数据帧或者远程帧,所以告诉发送节点,我已经没有能力处理你发送过来的数据了。

    过载帧跟错误帧结构类似包括过载标志和过载定界符,有3中情况会引起过载:

    • 接收器内部的原因,它需要延迟下一个数据帧或是远程帧。
    • 在间歇字段(看下面的帧间空间)的第一位和第二位检测到一个显性位(间歇字段都是隐性位的)
    • 如果CAN节点在错误界定符或是过载界定符的第八位(最后一位)采样到一个显性位逻辑0,节点会发送一个过载帧,错误计数器不会增加。

     

    上图中很清晰的表示了过载标志有6个显性位组成,而叠加部分和"主动错误"标志一样,过载的标志破坏的是间歇域的固定格式。所以导致其他的节点都检测到过载条件,并一同发出过载标志。

    过载定界符:

    也就是上图的过载结束符,过载标志被传送以后,节点就一直监听着总线,直到检测到有一个从显性位到隐性位的跳变为止。当从总线上检测到这样的跳变,则就标志着每一个节点都完成了各自过载标志的发送,并开始同时发送其余7个隐性位。 

     

    5.CAN总线通信协议实例

    (1)帧标识符-29位

     

     

    (a)、协议号 PROTNO ( Protocol No )

    协议号描述各高级单元之间通信使用的协议。

    0x064

    RMP

    Rectifier Monitor Protocol

    监控主机与采集前端标识符

     

    (b)、PTP

    点对点位。PTP=0,表示该帧为广播信息。PTP=1 时,表示该帧为点对点信息。例如,在对所有的节点广播命令时,PTP=0时,目的地址设置为 0xFF。。

     

    (c、目的地地址

    目标地址表示该帧发往哪个地址。 目的地址(0x00-0xFE)。

    如果 PTP=1,bit11~bit18 被作为点对点通信的目的地址。

     

    (d)、源地址

    源地址表示该帧是由哪个地址发出。 源地址(0x00-0xFE)。

    在所有通信类型中,bit3~bit10 用于指示总线上信息源的地址。

    在系统中,PRONTO=0x064,采集前端的地址确定在 0x00~0x7F。

    监控主机的地址都确定在 0xF0~0xF8。

     

    (e)、源地址

    后续数据标识。如果 CNT=1,表示数据包含下一帧,而且,它有相同的源地址和协议类型。如果 CNT=0,表示是数据的最后部分。如果数据包只需要一帧传递,则 CNT=0。

     

    (f) 、RES 1

    预留位,为将来使用,必须设置为 1。

     

    (g)、RES 2

    预留位,为将来使用,必须设置为 1。

     

    (2)数据域

    (a)、 ERR

    错误位。如果节点接收到的数据包帧格式不符合协议规定,将此位置位传递给源节点。

     

    (b)、PTP

    点对点位。PTP=0,表示该帧为广播信息。PTP=1 时,表示该帧为点对点信息。例如,在对所有的节点广播命令时,PTP=0时,目的地址设置为 0xFF。。

     

    (c)、MSGTYPE

    命令信息类型。表示数据信息对应的类型。

     

    (d)、ErrType

    错误类型。表示数据信息错误原因。

    ErrType

    意义

    0xf0

    无错误,正常响应

    0xf1

    节点地址无效

    0xf2

    命令无效

    0xf3

    数据校验错误

    0xf4

    地址识别过程中

     

    (e)、Data information

    数据部分。

     

    (3)MSGTYPE

     

     

    欢迎大家进群交流分享:QQ群:773082801

    展开全文
  • CAN通信协议(一)

    万次阅读 多人点赞 2019-01-04 09:44:26
    目录 目录 前言 CAN基础知识介绍 CAN的特点 物理层特征 通讯节点 波特率及位同步 ...因为工作,需要研究CAN总线。博主的CAN学习参考正点原子和野火的教程。...CAN基础知识介绍 ...CAN是Contr...

    目录

    前言

    因为工作,需要研究CAN总线。博主的CAN学习参考正点原子和野火的教程。虽然没有买板子,不过对于博主现在来说,感觉开发板都差不多吧!毕竟工作中开发板肯定是不一样的!

    CAN基础知识介绍

    CANController Area Network(控制器局域网络)的缩写,是ISO国际标准化组织的串行通信协议。由德国电气商博世公司在1986 年率先提出。此后,CAN 通过ISO11898ISO11519 进行了标准化。现在在欧洲已是汽车网络的标准协议
    CAN协议经过ISO标准化后有两个标准:ISO11898标准和ISO11519-2标准。其中ISO11898是针对通信速率为125Kbps~1Mbps高速通信标准,而ISO11519-2是针对通信速率为125Kbps以下的低速通信标准
    CAN具有很高的可靠性和良好的错误检测能力,广泛应用于汽车计算机控制系统和环境温度恶劣/电磁辐射强及振动大的工业环境。
    CAN主要用在两个设备之间的通讯。

    CAN的特点

    1. 多主控制。总线空闲时,所有单元都可发送消息,而两个以上的单元同时发送消息时,根据标识符(ID, 非地址)决定优先级。两个以上的单元同时开始发送消息时,对各消息ID的每个位进行逐个仲裁比较。仲裁获胜(优先级最高)的单元可继续发送消息,仲裁失利的单元则立即停止发送而进行接收工作。
    2. 系统柔软性。连接总线的单元,没有类似"地址"的信息。因此,在总线上添加单元时,以连接的其他单元的软硬件和应用层都不需要做改变。
    3. 速度快,距离远。最高1Mbps(距离<40m),最远可达10KM(速率<5Kbps)。CAN物理层的形式主要分为闭环总线开环总线,一个适合于高速通讯,一个适合于远距离通讯(速度慢)。闭环通讯网络是一种高速、短距离网络,它的总线最大长度为40m,通信速度最高1Mbps,总线的两端各要求有一个"120欧"的电阻。开环总线网络是低速、远距离网络,它的最大传输距离1km,最高通讯速率为125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个"2.2千欧"的电阻。
    4. 具有错误检测/错误通知和错误恢复功能。所有单元都可以检测错误(错误检测功能),检测出错误的单元会立即同时通知其他所有单元(错误通知功能),正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送次消息直到成功发送位置(错误恢复功能)。
    5. 故障封闭功能。CAN可以判断出错误的类型是总线上数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生次序数据错误时,可将引起此故障的单元从总线上隔离出去。
    6. 连接节点多。CAN总线可同时可同时连接多个单元。可连接的单元总数理论上是没有限制的。但实际上可连接的单元受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。

    正是因为CAN协议的这些特点,使得CAN特别适合工业过程监控设备的互连,因此,越来越受到工业界的重视,并已公认为最有前途的现场总线之一。

    物理层特征

    与I2C/SPI等具有始终信号的同步通讯方式不同,CAN通讯兵不是以时钟信号来进行同步的,它是一种异步通信,只具有CAN_HighCAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。
    CAN控制器根据CAN_LCAN_H上的电位差来判断总线电平。总线电平分为显性电平隐形电平,二者比居其一。发送方通过使总线电平发生变化,将消息发送给接收方。
    显性电平对应逻辑:0
    CAN_High的电平为3.5V,CAN_Low线的电平为1.5V,CAN_HCAN_L的电压差为2V左右。
    隐性电平对应逻辑:1
    CAN_HighCAN_Low线上的电压均为2.5v, CAN_HCAN_L之间的电压差为0V。
    显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平。而隐形电平则具有包容的意味,只要所有的单元都输出隐形电平,总线上才为隐形电平(显性电平比隐形电平更强)。

    通讯节点

    CAN总线上可以挂载多个通讯节点,节点之间的信号经过总线传输,实现节点间通讯。由于CAN通讯协议不对节点进行地址编码,而是对数据内容进行编码,所以网络中的节点个数理论上不 受限制,只要总线的负载足够即可,可以通过中继器增强负载。
    CAN通讯节点由一个CAN控制器CAN收发器组成,控制器与收发器(电平转换)之间通过CAN_TxCAN_Rx信号线相连,收发器与CAN总线之间使用CAN_HighCAN_Low信号线相连。
    CAN节点需要发送数据时,控制器把要发送的二进制编码通过CAN_Tx线发送到收发器,然后有收发器把这个普通的逻辑电平转化为差分信号,通过差分线CAN_HighCAN_Low线输出到CAN总线网络。而通过收发器接收总线上的数据到控制器时,则是相反的过程,收发器把总线上收到的CAN_HighCAN_Low信号转化为普通的逻辑电平信号,通过CAN_Rx输出到控制器中。
    由于CAN总线协议的物理层只有1对差分线,在一个时刻只能表示一个信号,所以对通讯节点来说,CAN通讯是半双工的,收发数据需要分时进行。在CAN的通讯网络中,因为共用总线,在整个网络中同一时刻只能有一个通讯节点发送信号,其余的节点在该时刻都只能接收。

    波特率及位同步

    由于CAN属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口通讯那样,节点间使用约定好的波特率进行通讯,特别地,CAN还会使用"位同步"的方式来抗干扰/吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。

    位时序分解

    为了实现位同步,CAN协议把每一个数据位的时序分解成SS段,PTS段,PBS1段,PBS2段,这四段的长度加起来即为一个CAN数据位的长度。分解后最小的时间单位是Tq,而一个完整的位由8~25个Tq组成。

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

    信号的采样点位于PBS1段与PBS2段之间,通过控制各段的长度,可以对采样点的位置进行偏移,以便准确地采样。

    波特率

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

    $1/(nT)$
    ## 帧种类介绍 CAN通信以5种类型的帧进行: 数据帧:用于通讯节点向外传送数据。 遥控帧:用于向远端节点请求数据。 错误帧:用于向远端节点通知校验错误,请求重新发送上一个数据。 过载帧:用于通知远端节点:本节点尚未做好接受准备。 间隔帧:用于将数据帧及遥控帧与前面的帧分离开来的帧。 ### 数据帧介绍 1. 帧开始 表示数据帧开始的段,`SOT`段(`Start Of Frame`),帧起始信号只有一个数据位,是一个**显性电平**(逻辑0),它用于通知各个节点将有数据传输,其他节点通过帧起始信号的电平跳变沿来进行硬同步。 2. 仲裁段 表示该帧优先级的段,当同时有两个报文被发送时,总线会根据仲裁段的内容决定哪个数据包能被传输。仲裁段的内容主要为本数据帧的ID信息(标识符),数据帧具有标准格式和扩展格式两种,区别在于ID信息的长度,标准格式的ID为11位,扩展格式的ID格式为29位,它在标准ID的基础上多出18位。 在CAN协议中,ID决定着数据帧发送的优先级,也决定着其他节点是否会接收这个数据帧。CAN协议不对挂载在它之上的节点分配优先级和地址,对总线的占有权是由信息的重要性决定的,即对于重要的信息,可给它打包上一个优先级高的ID,使它能够及时地发送出去。 报文的优先级(越小越高),是通过对ID的仲裁来确定的。根据前面的物理层的分析,如果总线上同时出现显性电平和隐形电平,总线的状态会被置为显性电平,CAN正是利用这个特性进行仲裁。 仲裁段ID的优先级也影响着接收设备对报文的反应。因为在CAN总线上数据是以**广播**的形式发送的,所有连接到CAN总线的节点都会收到所有其他节点发出的有效数据,因而CAN控制器大多具有根据ID过滤报文的功能,它可以控制自己只接收某些ID的报文。 3. 控制段 表示数据的字节数及保留位的段 4. 数据段 数据的内容,一帧可发送0~8个字节的数据,MSB先行 5. CRC段 检查帧的传输错误的段,CAN的报文包含一段15位的CRC校验码,一旦接收节点算出的CRC码跟接收到的CRC码不同,则它会向发送节点反馈错误信息,利用错误帧请求它重新发送。CRC部分的计算一般有CAN控制器硬件完成,出错时的处理则由软件控制最大重发数。 在CRC校验码之后,有一个CRC界定符,它为隐形位,主要作用是把CRC校验码与后面的ACK段间隔起来。 6. ACK段 表示确认正常接收的段。ACK段包括一个ACK槽位,和ACK界定符位。在ACK槽位中,发送节点发送的是隐性位,而接收节点则在这一位中发送显性位以示应答。在ACK和帧结束之间由ACK界定符间隔开。 7. 帧结束 表示数据帧结束的段。帧结束段由发送节点发送的7个隐形位表示结束。

    总结

    总体来说,博主先看了看正点原子的视频与资料,感觉讲的不够详细,而且对于博主个人而言,没有学习动力。而野火的视频教程中,刚开始给出了一个实验现象,讲的也比较详细。记得以前对野火的影响不好,感觉正点原子的资料更为丰富些,不过CAN教程感觉野火还是不错的。

    链接地址

    ALIENTEK STM32开发板最新光盘资料–以后光盘有更新都是在本帖下载!
    [秉火官方资料] 【资料】野火产品资料合集(所有产品资料链接都在此处)-点击名称后下拉浏览器滚动条~

    展开全文
  • 几种CAN应用层协议介绍

    万次阅读 2015-03-16 23:21:31
    n CAL提供了所有的网络管理服务和报文传送协议,但并没有定义CMS对象的内容或者正在通讯的对象的类型。而这正是CANopen切入点。 n CANopen是在CAL基础上开发的,使用了CAL通讯和服务协议子集,提供了分布式控制...
  • CAN通信协议小结

    千次阅读 2018-10-13 15:21:06
    数据帧分为标准数据帧和扩展数据帧。它们之间最大的区别在于:标识符(ID)...这是can发送的结构体 typedef struct { uint32_t StdId; //标准帧 ID,如果您要发送扩展帧。可以不管它 //StdId 用来设定标准标识符。...
  • CAN协议学习(二)

    千次阅读 2019-05-22 12:07:27
    数据帧和遥控帧有标准格式(CAN2.0A)和扩展格式(CAN2.0B)两种格式,标准格式有11位标志符,扩展格式有29位标志符。 一、数据帧 1.1 帧结构 数据帧由七个段构成,包括帧起始、仲裁段、控制段、数据段、CRC段、...
  • CAN通信详解(全)

    万次阅读 多人点赞 2018-08-18 16:12:13
    本章我们将向大家介绍如何使用STM32自带的CAN控制器来实现两个开发板之间的CAN通讯,并将结果显示在TFTLCD模块上。本章分为如下几个部分: 30.1 CAN简介 30.2&amp;amp;amp;nbsp;硬件设计 30.3&amp;amp;amp;...
  • CAN总线传输协议

    万次阅读 多人点赞 2019-07-16 22:13:03
    一、控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线、同轴电缆或光纤来传输信号,因其高性能、高可靠性和高实时性等特点,已经成为了世界上应用最广泛的...
  • CAN总线学习笔记(2)- CAN协议数据帧与遥控帧

    万次阅读 多人点赞 2018-03-31 16:04:42
    在了解CAN总线的通信机制之前,首先需要了解CAN协议中五种类型的帧结构: 数据帧 遥控帧 错误帧 过载帧 帧间隔 在讲述五种帧结构的过程中,穿插讲述CAN总线的通信机制。 2 数据帧与遥控帧 在CAN协议中...
  • 一、CAN协议要点 1. 电压 2. 波形 3. CAN报文概述 CAN一共规定了5中类型的帧,帧也称为报文。 CAN总线的数据帧有标准格式(StandardFormat)和扩展格式(ExtendedFormat)的区分。 4. CAN报文编码...
  • C++项目之CAN协议

    千次阅读 2018-05-09 20:54:17
    LX-CAN通讯帧传输协议LX_CAN 通讯帧传输协议定义了 LX_CAN 协议规范中的通讯...1.1 LX_CAN协议通讯模式LX_CAN 协议采用灵活的通讯模式,支持主从方式通讯模式和事件触发通讯模式。生产者消费者通讯模式用于 L...
  • can协议在汽车被通讯上被广泛地应用,can协议好处在于在一条总线上可以挂在很多CAN设备节点,而且每个节点也没有主从之分。因为一个汽车零部件可能是由多个厂家所生产的。这样可以大大减少通讯设计时的任务量,只需...
  • 适合初学者的STM32 CAN协议理解总结( ISO11898 标准)

    万次阅读 多人点赞 2018-08-20 11:21:38
    暑假学习的时候看到了CAN总线,几个小伙伴好像...我在这里记录一些我学习CAN协议过程中的理解总结,希望能帮到一些初学者。   CAN的组成框图 下图为互联网型的双CAN框图: 我使用的F103ZET6只有一个串口,其中3...
  • CDL3的自定义CAN协议

    千次阅读 2018-03-18 15:52:44
    Motec CAN协议 之前弄清楚了Dash Manager的初步使用方法,但想要使用除Motec ECU和一些特定型号的ECU以外的数据来源,需要对其CAN协议进行定制。 一般需要了解的CAN的格式是11位地址加8字节数据(扩展帧有29位地址...
  • CAN协议中的PGN

    万次阅读 2017-04-19 21:09:16
    PGN是参数组编号,对于制定CAN协议来说十分重要,很多ECU在接受报文时识别的就是PGN而不是报文的ID, 报文ID作为报文的名字,是没一条报文专有的名字,而一个PGN不仅仅对应一条报文。CAN的扩展帧使用29位标识符,...
  • BOSCH CAN规范V2.0 (中文版CAN协议),介绍CAN Specification 2.0 pdf文件
  • CAN协议中CRC编码的硬件实现

    千次阅读 2017-06-06 19:48:47
    针对CAN协议中提出的串行CRC检验原理,给出其硬件实现方法及具体实现时应需注意的技术问题,给出了RTL级的VHDL代码。  为了提高CRC编码的生成速度和CRC检验的效率,介绍了CRC检验的并行原理,并针对CAN协议中CRC...
  • CAN协议教程_KVASER

    千次阅读 2018-05-03 23:26:56
    原文链接:CAN协议教程 本CAN协议教程概述了ISO 11898-1和ISO 11898-2标准。 对CAN的基本原理做出了详细的介绍,诸如用于汽车设计、工业自动化控制以及更多的应用。 讲解的简单实用,中英文版都有。
1 2 3 4 5 ... 20
收藏数 131,524
精华内容 52,609
关键字:

can协议