电子产业一站式赋能平台

PCB联盟网

搜索
查看: 28|回复: 0
收起左侧

CAN总线如何处理超过8字节的数据帧,有哪些相关协议?

[复制链接]

633

主题

633

帖子

1929

积分

三级会员

Rank: 3Rank: 3

积分
1929
发表于 昨天 08:03 | 显示全部楼层 |阅读模式
来源于小伙伴提问。

sp0qgv51fek6409869248.png

sp0qgv51fek6409869248.png

对于CAN总线来说,当数据帧大于标准的8字节时,可以借助高层协议实现数据分段和传输。

abv1to32ixg6409869348.png

abv1to32ixg6409869348.png

CAN协议规定标准帧和扩展帧中数据段的长度为最大8字节。
这一限制是由于CAN协议的设计初衷是用于实时性要求较高的系统,如汽车电子、工业控制等,数据帧短小有助于降低总线负载,提高传输效率。
针对这一限制,工业界开发了一些高层协议来支持长数据帧的分段传输和重组。以下是几种常用方法和协议:
ISO-TP(ISO 15765-2)
                                 
ISO-TP(ISO Transport Protocol)是一种广泛应用于CAN的传输协议,用于解决数据大于8字节的分段传输问题,尤其在汽车诊断通信中常见(如UDS协议)。
关键点:数据被分成多个帧传输,包括单帧、首帧、连续帧和流控帧:
  • Single Frame (SF): 数据长度≤7字节,直接通过单帧发送。
  • First Frame (FF): 数据长度>7字节时,第一个帧中包含数据长度和首段数据。
  • Consecutive Frame (CF): 后续帧承载剩余数据。
  • Flow Control Frame (FC): 接收端控制数据发送节奏,防止溢出。

    使用场景:UDS(统一诊断服务)协议建立在ISO-TP之上。
    优点:可靠性高,支持完整的流控机制。
    缺点:实现复杂,开销大。
    CANopen SDO(Service Data Object)
                                     
    CANopen是一种面向工业自动化的高层协议,其SDO协议部分支持大于8字节的数据传输。
    关键点:数据通过多个帧分段传输,每帧包含索引和子索引信息。
    块传输(Block Transfer):更高效的方式,允许批量传输多个数据帧。
    使用场景:适合设备配置、参数设置等需要传输大数据的场景。
    优点:支持复杂的设备间通信。
    缺点:效率相对较低。
    J1939 协议
                                     
    SAE J1939 是一套基于CAN的协议,广泛用于重型车辆和农业机械。它通过TP(Transport Protocol)扩展支持长数据帧传输。
    关键点:使用BAM(Broadcast Announce Message)和RTS/CTS(Request to Send / Clear to Send)两种机制进行大数据分段。
    优点:在车辆系统中应用广泛,成熟度高。
    缺点:不适用于高实时性需求场景。
    那么如何选择适合的协议?我认为主要有几点区分:
  • 实时性要求高: ISO-TP由于有流控机制,效率稍低,适合诊断或非实时场景。如果需要高实时性,可以设计自定义的轻量级协议。
  • 工业自动化: CANopen的SDO或PDO机制适用于工业控制和参数配置场景。
  • 车辆与机械: J1939是车辆行业的标准协议,特别适合重型车辆和大数据的广播通信。

    dsiiinfn2q26409869448.gif

    dsiiinfn2q26409869448.gif

    3ok4g4dj3li6409869548.jpg

    3ok4g4dj3li6409869548.jpg


    c0ovbiys3oc6409869648.gif

    c0ovbiys3oc6409869648.gif

                戳“阅读原文”一起来充电吧!
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表