电子产业一站式赋能平台

PCB联盟网

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

CAN总线上是否可以同时存在标准帧和扩展帧?

[复制链接]

1001

主题

1001

帖子

8805

积分

高级会员

Rank: 5Rank: 5

积分
8805
发表于 2024-12-8 08:01:00 | 显示全部楼层 |阅读模式

1ycxhqqmngu64078509651.gif

1ycxhqqmngu64078509651.gif
+ o; R6 R% X0 s/ g$ ?8 x
点击上方蓝色字体,关注我们+ t- ?$ A6 f4 _; o7 r! c6 O- ]7 l4 s
来源于小伙伴提问。
) R5 D' @0 z8 `. |# V5 P0 ?+ I1 y& a4 N1 G2 G

hyy10pkfecm64078509751.png

hyy10pkfecm64078509751.png
& q) s# n' M: ]7 e
7 {  x8 T/ U+ Q3 z! u4 u
标准帧和扩展帧在CAN总线上的共存完全支持,但前提是硬件和软件配置正确。/ e0 @% ~9 O$ g' ?
+ O- A. E0 N  V
在你的实验中,扩展帧接收不稳定的可能原因包括仲裁失败、过滤器配置错误、硬件兼容性问题、总线负载过高或软件逻辑问题。
5 K- C* ^3 N2 M, H9 v$ c1
. s1 s. K: Q( V5 k9 H  M) dCAN协议支持标准帧和扩展帧的共存
1 q* R, _/ Q* H# v+ K1.1 标准帧和扩展帧的定义. B2 D/ H6 Y! F2 N6 s" p
  • 标准帧(Standard Frame,CAN 2.0A)使用11位的标识符(Identifier),数据帧格式较短。
  • 扩展帧(Extended Frame,CAN 2.0B)使用29位的标识符,包含额外的18位扩展标识符,数据帧格式更长。
    ; |$ _  V+ G. q( M$ o. P% U/ s
    + {4 E6 w" }% F# z( C' L6 t5 [0 r5 C
    1.2 帧格式差异
    % [  c# E' Y+ b" o扩展帧与标准帧的关键差异在于 IDE位(Identifier Extension Bit):1 B3 t9 F; t6 J1 `* l
    标准帧的IDE位为0,表示未扩展。" z& n' r( K# G3 ]

    ( |' o  r) _+ @3 x) g扩展帧的IDE位为1,后面跟随扩展标识符。  {* }: C  x5 `5 a% t7 Z4 U3 q0 m
    ; G6 U0 _, G+ x0 a3 H( _

    mipalec3pla64078509851.png

    mipalec3pla64078509851.png
    6 X5 ?. ?# `; O
    % K. ^  h7 P, Z) F3 L4 b
    8 V9 p1 [0 N5 P% x2 W

    sfv0kwh31je64078509951.png

    sfv0kwh31je64078509951.png
    6 ?% Y  R8 [' H0 G5 ]4 p
      O' B7 X8 d0 d6 H1 z- C  O
    标准帧和扩展帧在总线上通过仲裁阶段正常共存。CAN协议的仲裁机制基于标识符优先级,较低的二进制值标识符(更多0)具有较高优先级。1 V5 z5 g3 @8 O+ Y
    2$ D3 }& X/ l9 G% S
    导致扩展帧接收不稳定的可能原因4 y% `$ b" m5 S$ A+ \  k; l8 e6 k4 K2 F
    2.1 仲裁失败5 L$ o4 G/ T& \. u
    在标准帧和扩展帧共存时,仲裁过程可能导致扩展帧发送失败或接收中断:扩展帧标识符更长(29位),在仲裁时优先级通常低于标准帧(11位标识符)。, X& a8 U/ F. q
    , P; z: {2 w) J& C
    如果标准帧频繁发送,扩展帧可能因无法赢得总线仲裁而延迟或丢失。
      G- U/ m. N) H6 m7 N! Q解决方法:降低标准帧发送频率,确保总线负载较低(推荐总线负载率 为扩展帧分配较高优先级(标识符值较小)。
    $ e9 z- Y2 O8 g7 U1 p
    " P6 `5 H: G! I$ T7 Q, d2.2 过滤器设置问题
    7 r# L7 U) f# [( vCAN控制器的硬件过滤器用于筛选接收的帧。9 r! N0 `1 a$ C. e8 G; W) d

    9 T. G7 h! R8 w  {如果过滤器配置错误,可能导致扩展帧未被正确接收:
    9 O6 a: d: v+ Z4 d& d7 X# L
  • 有些控制器仅能启用部分硬件过滤器,并可能默认支持标准帧优先。
  • 如果过滤器未正确设置为支持扩展帧(如未启用扩展帧掩码),扩展帧可能被丢弃。
    * g. [& D" ^* e* u  l
    - s' F+ B$ {5 g$ `$ z5 j6 k
    解决方法:检查并配置CAN控制器的接收过滤器和屏蔽位,确保启用扩展帧接收。在代码中明确设置全接收模式(即关闭过滤器,仅用于调试)。( ^9 b1 ?' |3 H+ @+ t1 \: y5 N  F

    3 }1 V& U1 N! M- Y* W2.3 硬件兼容性问题4 G0 Q/ F7 p- z
    某些早期CAN控制器可能只支持CAN 2.0A(仅标准帧),接收扩展帧时可能报错或忽略。
    + h; m# Y# R# m2 C) H$ |) }3 f: S3 `, p% {8 y7 {
    检查实验环境中使用的硬件和驱动是否完全支持CAN 2.0B规范(支持标准帧和扩展帧)。2 h  q2 B" D4 V, _% ~
    9 k( x  \! w. H! j5 R6 t: s
    解决方法:确认实验设备(如收发器、控制器)和上位机工具是否支持扩展帧。更新硬件固件和驱动版本。
    . l2 }' _( H* S* s2 s6 V+ a% z( L% U% k
    2.4 总线负载过高
    # J9 C+ m( C7 D! {, e0 P扩展帧的数据量大,帧传输时间比标准帧长。在总线负载较高时,扩展帧更容易出现延迟或丢失:CAN总线速率固定(如500 kbps),高频率的数据帧可能导致缓冲区溢出。特别是标准帧发送频率高时,扩展帧更难竞争到总线时间片。# [! b8 Q% v" ]! t
    ) ~. J* h* M# ~5 @+ D7 x
    解决方法:减少总线负载,确保发送帧频率适中。增加CAN网络的波特率(如从250 kbps提高到500 kbps或1 Mbps)。
    2 h) v4 t! m% i# I, H; ^  k2 w; b: n; L" b* H' ]
    2.5 软件处理不当2 f; R1 e2 @, a9 C
    软件可能存在错误,如扩展帧未正确解码、接收中断优先级设置不当或缓冲区配置不足。( L, c" W( g0 |

    ; j: N& `6 p/ r8 A$ {上位机工具可能无法正确区分或显示扩展帧。4 s, o. u9 i, r, r  p; X& b
    2 G+ h/ c8 m/ h) W9 H
    解决方法:调试并检查代码逻辑,确保CAN协议栈正确处理标准帧和扩展帧。使用更专业的上位机工具(如CANoe、PCAN-View)进行帧分析。- y+ [$ z1 l/ q0 j' f% s* b
    3
    . q& |9 j' V4 Z+ A* F9 m实验建议与优化5 a: B; A4 Z- d" e* _8 j% S& @
  • 分离测试标准帧和扩展帧:单独发送标准帧和扩展帧,确保两者在独立情况下均能正常工作。
  • 优化总线负载:监测总线负载(使用专业工具如CANalyzer)并调整帧发送频率,避免过载。
  • 调整优先级:分配较低优先级给标准帧,确保扩展帧能够争夺总线仲裁。
  • 检查硬件和配置:验证控制器、驱动程序和上位机工具是否完全支持CAN 2.0B。
  • 使用示波器或逻辑分析仪:捕获总线信号,分析帧格式和错误标志(如ACK Error、Bit Error),定位问题根源。. K' }$ ]9 g+ U4 q
    0 V- o9 y/ q) |" ^$ C+ G

    ; g# i7 g" s$ k, |7 S  W, }0 B

    2ca0cljglq364078510051.jpg

    2ca0cljglq364078510051.jpg

    3 B6 `- F5 d) x

    pag5wsp0epz64078510151.gif

    pag5wsp0epz64078510151.gif
    " q8 ~; `( \6 I9 u+ A; x- W+ ]
    点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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