电子产业一站式赋能平台

PCB联盟网

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

如何选择CRC校验码的长度?

[复制链接]

1001

主题

1001

帖子

8805

积分

高级会员

Rank: 5Rank: 5

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

vtpp4vvsgfj64044431419.gif

vtpp4vvsgfj64044431419.gif
! O1 A& h- s$ A8 I5 ^1 A( r
点击上方蓝色字体,关注我们
; L4 P+ q+ l& n+ O; H# c
$ g/ [" c( G& Z2 u3 X选择CRC校验码的长度时确实需要在检错能力和系统开销之间做出权衡。CRC码的长度(通常是4、8、16、32位)直接影响到能检测到的错误类型和概率。4 V) ?+ X4 U* B4 f* I

0 S. Y0 F% [, t9 f% o% m3 V

0tnvlapkqrq64044431519.png

0tnvlapkqrq64044431519.png

7 }' J1 L: l- ?! r6 v要确定在一定检错概率 p 下的最小CRC长度,可以从几个方面入手,包括信息长度 n、错误检测概率需求 p、以及CRC多项式的选择。
" ^0 Q, o6 J! h2 U/ \
; p& [9 ?3 J/ y3 y# j. B9 L下面从理论背景、实用方法以及计算步骤等方面详细解释。6 i& U7 _' c6 ^4 ]- c! ^+ O
19 l% ?) v  [7 u! m0 x+ {1 @* O
理论背景:CRC的检错原理, i8 i! t: ^9 F8 ]+ w" y: Y
CRC(Cyclic Redundancy Check)使用一个特定的生成多项式对数据帧进行余数计算,产生一个校验码。8 Z5 [+ \2 J  ]# ?6 }5 @. y: v

) ?6 U$ k* |1 V6 l1 @8 n2 Y3 H接收端利用相同的多项式重算余数,如果余数为零则判定无误差,否则判定出错。
. r4 g" ~( X  h! \# W6 i4 O7 k+ o) N* x8 o" M
对于不同长度的CRC码,其生成多项式能探测不同类型的错误:6 k: h) v$ _6 T# _! i) L9 ]
  • 单比特错误:任何CRC都能检测单比特错误。
  • 连续位翻转的突发错误:长度为 k 位的CRC最多可以检测到长度不超过 k 位的突发错误。
  • 随机错误:概率与CRC码的位数有关。
    ) ?- l' G0 Q- H2 Y0 H! w  P

    7 |5 z! G1 V- h$ ~$ C5 n7 C2$ b; w6 E/ {8 o, h; ^0 Q
    检错概率的数学模型7 D) {: ?5 Z- P, W* [- _# H
    CRC的检错概率可以近似通过以下公式进行估算:
    ( P# g& f: C7 g* ]* U3 r

    vkrxvwac1xd64044431619.jpg

    vkrxvwac1xd64044431619.jpg

    ' t+ V$ V/ ?: b& G0 ?, w其中 k为CRC校验码的位数。
    # \6 C# F& u9 G* H* [0 Q- s' d( ?5 i+ B) g+ `: Q' Y3 Y( P
    例如,对于一个8位的CRC码,理论上可检测到的错误概率约为 1?1/256=0.996。从公式中可以看出,位数越多,检错概率越高。* c6 h& s# n1 V9 i. ^' B2 v/ \
    3
    ! u% A& S1 d3 r: W& w7 r' w根据信息长度 n 和所需检错概率 p 计算CRC位数2 s) E, ]& V6 \  }4 z# |
    在实际应用中,我们可以通过以下步骤来确定CRC的位数:确定目标检错概率:假设我们要求的检错概率 Pdetect≥p。
    5 a/ L0 C, ]+ X, C! {
    4 ~' ^/ U0 H" g) B代入公式并求出位数:我们可以重新排列公式来得到最小的CRC位数:4 _7 h! \7 O0 w. c3 H' k9 d1 O' z

    5hnnjxxd4il64044431719.jpg

    5hnnjxxd4il64044431719.jpg
    9 Y( [5 o7 F, ]# {; e
    例如,若我们希望检错概率 p=0.999,则:
    3 @4 e3 C. i6 S% T

    33vw2bzldje64044431819.jpg

    33vw2bzldje64044431819.jpg

    . r5 a7 ~- N" ]" P7 T这意味着至少需要10位的CRC才能满足这个检错概率。
    $ Y5 K$ D) p. H: K- j4 s5 l
    8 H' _" N$ z1 b8 `' Z考虑信息长度 n:虽然理论上,CRC的检错能力与信息长度 n 不直接相关,但在极长的帧中,可能会遇到极端情况。
    0 A% k' _( Q. k8 K/ W
    % ~2 U# l1 A& _) p0 E) f, n因此,当 n 非常大(如数百甚至上千位)时,建议增加1-2位以提高稳健性。1 p3 `& w" A; ?8 a) s: q+ D7 n
    4
    % V6 G; @# ]2 y8 g" [2 I7 l( oCRC位数选择的经验法则6 y& E7 C3 x, x) M+ K
  • 短数据帧(如10-100比特):通常8位的CRC码已经可以提供很高的检错概率,适合普通通信应用。
  • 中等数据帧(100-1000比特):16位的CRC是更合适的选择,适合要求较高检错概率的协议。
  • 长数据帧(1000比特以上):32位CRC可以提供极高的检错能力,多用于高可靠性的工业、通信或存储系统中。" d1 |/ D0 ^- X2 c% m& h: h: Z
    : i* A1 E; k" D% b8 C& e8 d5 s' y0 X$ P
    假设你设计的协议需要保证检错概率不低于 p=0.999,且每帧数据为 n=500 比特。
    + y+ @; @6 [0 {6 E5 p' s: _3 h  W, J4 }
    根据上面的公式,我们计算得到的最小位数约为10位;结合数据帧长度,实际应用中推荐至少选择12位甚至16位的CRC,以确保满足高检错需求。6 \5 J+ b+ n: S# k

    . {+ P6 f' v& j进一步的,标准CRC多项式(如CRC-16或CRC-32)经过广泛验证,在通信和存储应用中可靠性高,通常推荐直接采用这些标准多项式。
    ( @* ~, F9 l( p5
    # S9 w# ?! ]& Z% @$ p1 q8 O! QCRC码位数对系统的影响
    . l4 b' W* G; B位数越长的CRC校验码,校验性能越好,但代价是数据包的开销和计算复杂性增大。. x3 s  m( c$ g; N/ s) N# j' O# G) A5 e# F
    1 _8 y! ]- q- V" A
    典型的实现中:' F6 ?3 F4 i" i: i0 l( X' t0 o
  • 计算性能:硬件CRC加速器可以显著降低较长CRC的计算延迟。
  • 通信开销:8位CRC增加的传输开销通常较小,但超过16位时,额外开销对低速通信协议影响较大。, b& G+ I  d3 X( y8 d% @8 Y
    8 M1 C' Q, W# j% Q) {
    综合以上分析,为了在实际应用中确定CRC码长度,建议的步骤如下:
    % Z1 W, U  b& q+ H. A3 s$ {6 r
  • 根据要求的检错概率计算最小位数。
  • 考虑数据帧长度,适当增加1-2位以提高稳健性。
  • 使用标准CRC多项式以确保通用性和可靠性。5 R& R% f- m. l+ x+ O1 I

    : ]' g7 G# N- \* p7 n  m

    pa2u5r01uci64044431919.jpg

    pa2u5r01uci64044431919.jpg

    7 x$ Z5 }  B# R5 g0 `

    d0vuz2dwazn64044432019.gif

    d0vuz2dwazn64044432019.gif
    1 T% y( e. T5 C
    点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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