电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

1001

主题

1001

帖子

8803

积分

高级会员

Rank: 5Rank: 5

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

1ycxhqqmngu64078509651.gif

1ycxhqqmngu64078509651.gif

: _: e: v: G' f' n点击上方蓝色字体,关注我们
; i6 v( q0 g: f) T3 w9 R/ I1 D来源于小伙伴提问。: w+ h& W0 ^. `4 o9 |) {% G1 ]# r

5 r, i# H4 y8 c( G5 z

hyy10pkfecm64078509751.png

hyy10pkfecm64078509751.png

$ ^8 k( H" `$ w, E+ E
  s+ i3 Q: x% Y6 o9 g标准帧和扩展帧在CAN总线上的共存完全支持,但前提是硬件和软件配置正确。
$ K" \/ a1 D; y4 w& N& y9 S5 c6 L  r* u" |; j
在你的实验中,扩展帧接收不稳定的可能原因包括仲裁失败、过滤器配置错误、硬件兼容性问题、总线负载过高或软件逻辑问题。. Q: q! [( u+ {/ E/ I& N
1! R7 L/ v8 S; ]7 k) U5 x7 F; H  J
CAN协议支持标准帧和扩展帧的共存# \4 `* X2 e: v+ J/ R& ~/ R1 m
1.1 标准帧和扩展帧的定义6 b( @( E! `) w, O. _# o
  • 标准帧(Standard Frame,CAN 2.0A)使用11位的标识符(Identifier),数据帧格式较短。
  • 扩展帧(Extended Frame,CAN 2.0B)使用29位的标识符,包含额外的18位扩展标识符,数据帧格式更长。
    3 m) H! U$ Z! L, U. w
    + l- Y  }7 C( T( t/ N) v; O5 ^
    1.2 帧格式差异
    7 x/ V1 ~" Q- R* w扩展帧与标准帧的关键差异在于 IDE位(Identifier Extension Bit):0 F, |) f4 M3 S4 Q
    标准帧的IDE位为0,表示未扩展。  S1 v( v+ Z4 H  a

    ' n* \8 p( N7 H; h扩展帧的IDE位为1,后面跟随扩展标识符。
    9 K$ l- z4 u- r1 c. r+ b
    6 ?! J- n9 z& }/ ]9 U$ _

    mipalec3pla64078509851.png

    mipalec3pla64078509851.png
    - Z4 T& o: q+ B

    ! \" y2 q5 Y# w0 r3 D' J/ f4 u  f
    3 k: ?5 [! d; B# _4 k2 `- x" u; w

    sfv0kwh31je64078509951.png

    sfv0kwh31je64078509951.png

    6 c- i* ]5 D  x& I4 O* k+ u* D/ p: A) ?$ y$ S- V7 I1 t
    标准帧和扩展帧在总线上通过仲裁阶段正常共存。CAN协议的仲裁机制基于标识符优先级,较低的二进制值标识符(更多0)具有较高优先级。5 l' Z% s( R4 y7 e) s$ h6 O: y
    25 `& Q$ k9 \4 }" O3 {* |
    导致扩展帧接收不稳定的可能原因
    ; L+ `: i) R' k2 L. n5 M2.1 仲裁失败, ]5 D. d$ C( B6 S1 X' ], X
    在标准帧和扩展帧共存时,仲裁过程可能导致扩展帧发送失败或接收中断:扩展帧标识符更长(29位),在仲裁时优先级通常低于标准帧(11位标识符)。
    9 Z' W: y3 g9 O1 T$ D
    1 T) n+ F. N. H, w) y如果标准帧频繁发送,扩展帧可能因无法赢得总线仲裁而延迟或丢失。
    # F% o: o" k# F5 t$ T解决方法:降低标准帧发送频率,确保总线负载较低(推荐总线负载率 为扩展帧分配较高优先级(标识符值较小)。5 s; _- _* j+ T* k6 K+ ]8 b  j0 F
    2 B3 H! \4 r# K7 k' F
    2.2 过滤器设置问题
    . U1 T, ~0 E9 F1 D2 i: |' b1 KCAN控制器的硬件过滤器用于筛选接收的帧。; g$ N1 H5 E' Z- J1 ^# P( [

    7 I( R* X# e- p. g! [) Y如果过滤器配置错误,可能导致扩展帧未被正确接收:) \( {' H! _$ F- A( a4 F
  • 有些控制器仅能启用部分硬件过滤器,并可能默认支持标准帧优先。
  • 如果过滤器未正确设置为支持扩展帧(如未启用扩展帧掩码),扩展帧可能被丢弃。: @6 Q  \6 t8 ]+ b6 n

    ; o# o& [! M! n解决方法:检查并配置CAN控制器的接收过滤器和屏蔽位,确保启用扩展帧接收。在代码中明确设置全接收模式(即关闭过滤器,仅用于调试)。, c& I9 _* O3 ~( n5 `

    0 j$ o4 E# P' W$ N$ e. S2.3 硬件兼容性问题1 Z# z" Q# x3 H
    某些早期CAN控制器可能只支持CAN 2.0A(仅标准帧),接收扩展帧时可能报错或忽略。0 u: V2 `. a$ W" E. [: r9 j

    $ g3 O4 |. M0 u5 a0 H检查实验环境中使用的硬件和驱动是否完全支持CAN 2.0B规范(支持标准帧和扩展帧)。* t$ S, O" f$ l: h% M' e

      M' L. Q8 D& ?( c5 o7 }  ]  I解决方法:确认实验设备(如收发器、控制器)和上位机工具是否支持扩展帧。更新硬件固件和驱动版本。/ T' ^: G- W. K1 W9 V4 |9 q0 v

    9 o6 x3 ^4 l$ H  k3 W8 {0 u2.4 总线负载过高
    4 q; x# X& l% b- M扩展帧的数据量大,帧传输时间比标准帧长。在总线负载较高时,扩展帧更容易出现延迟或丢失:CAN总线速率固定(如500 kbps),高频率的数据帧可能导致缓冲区溢出。特别是标准帧发送频率高时,扩展帧更难竞争到总线时间片。' k# s9 X* W  M* ^
    $ O/ H3 c+ L( a( Q; `4 r
    解决方法:减少总线负载,确保发送帧频率适中。增加CAN网络的波特率(如从250 kbps提高到500 kbps或1 Mbps)。$ n  [; c& S3 @7 \$ u* ^5 M

    4 w+ J2 H5 |* z+ f! x9 x* {2.5 软件处理不当
    3 j, C" t. ^' `! W# a! K1 }: m0 h软件可能存在错误,如扩展帧未正确解码、接收中断优先级设置不当或缓冲区配置不足。
    : m, Y' D5 E0 ~$ }! Q( N: U+ Q$ Q0 o# c( C) T0 C5 \8 O6 `
    上位机工具可能无法正确区分或显示扩展帧。* T" y0 B0 m* j2 v( S- X4 W; h) M

    3 z  ?- p; c& \% j. b8 t& A- ]. Y解决方法:调试并检查代码逻辑,确保CAN协议栈正确处理标准帧和扩展帧。使用更专业的上位机工具(如CANoe、PCAN-View)进行帧分析。# P' o/ P8 u) U  a* y8 y) j! y
    3! f$ Y& y  W. D( {: \
    实验建议与优化
    : {/ n, U; m! x, w+ f' x) @
  • 分离测试标准帧和扩展帧:单独发送标准帧和扩展帧,确保两者在独立情况下均能正常工作。
  • 优化总线负载:监测总线负载(使用专业工具如CANalyzer)并调整帧发送频率,避免过载。
  • 调整优先级:分配较低优先级给标准帧,确保扩展帧能够争夺总线仲裁。
  • 检查硬件和配置:验证控制器、驱动程序和上位机工具是否完全支持CAN 2.0B。
  • 使用示波器或逻辑分析仪:捕获总线信号,分析帧格式和错误标志(如ACK Error、Bit Error),定位问题根源。
    ' V! Q0 q9 x$ f  g6 F& j2 Q

    " ~' U- D5 e' q9 a. u2 o$ y
    3 y4 ^  l- T3 a

    2ca0cljglq364078510051.jpg

    2ca0cljglq364078510051.jpg

    ; k6 o! a, r  _9 _! V7 c4 n5 B

    pag5wsp0epz64078510151.gif

    pag5wsp0epz64078510151.gif
    5 z" K0 ^+ U) I9 ?  C
    点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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