电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

840

主题

840

帖子

6491

积分

高级会员

Rank: 5Rank: 5

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

vtpp4vvsgfj64044431419.gif

vtpp4vvsgfj64044431419.gif

3 w0 i5 ]4 M' @5 c3 ^4 [- A  p/ S点击上方蓝色字体,关注我们) b/ }2 M1 |5 d/ K' L) h

. \  Y; P( S0 U9 i0 c, R选择CRC校验码的长度时确实需要在检错能力和系统开销之间做出权衡。CRC码的长度(通常是4、8、16、32位)直接影响到能检测到的错误类型和概率。5 P1 J+ e8 O9 P5 ^
0 G/ i/ S  h0 n0 G

0tnvlapkqrq64044431519.png

0tnvlapkqrq64044431519.png

* J+ |5 c+ K. c% x) |0 ^要确定在一定检错概率 p 下的最小CRC长度,可以从几个方面入手,包括信息长度 n、错误检测概率需求 p、以及CRC多项式的选择。% N: {& H8 y- j. e* M$ F( m+ i
9 x) k! u2 {( J- j6 I
下面从理论背景、实用方法以及计算步骤等方面详细解释。1 U" h! [# x8 d5 y/ {8 `6 q
1
8 G$ y) \, v* |6 T理论背景:CRC的检错原理+ h0 G1 H* L* y
CRC(Cyclic Redundancy Check)使用一个特定的生成多项式对数据帧进行余数计算,产生一个校验码。4 s) ?- B' h$ ], A
' k  X0 i+ V) `/ }; z
接收端利用相同的多项式重算余数,如果余数为零则判定无误差,否则判定出错。( `: z5 f' s' C

4 x3 p( v$ W0 |+ r5 Y对于不同长度的CRC码,其生成多项式能探测不同类型的错误:
& g& K5 g" ^. p! n* C5 L( X' H
  • 单比特错误:任何CRC都能检测单比特错误。
  • 连续位翻转的突发错误:长度为 k 位的CRC最多可以检测到长度不超过 k 位的突发错误。
  • 随机错误:概率与CRC码的位数有关。: ~0 g3 K0 z9 J5 J9 {! F* E1 c
    9 w, L3 v- t3 v& _1 q
    2
    , L( [) \0 [, x9 p. P检错概率的数学模型
    + i7 z+ X7 _) r4 [# SCRC的检错概率可以近似通过以下公式进行估算:" J: C$ s) V9 i) a# ~* _& n

    vkrxvwac1xd64044431619.jpg

    vkrxvwac1xd64044431619.jpg
    ' V2 Q  o* y1 T  k9 e
    其中 k为CRC校验码的位数。+ k# ~) Y' s  j4 ]( L7 n1 w) ?  Q

    0 X7 R+ c, v$ y, F0 C例如,对于一个8位的CRC码,理论上可检测到的错误概率约为 1?1/256=0.996。从公式中可以看出,位数越多,检错概率越高。
    + u( K, z2 ~+ T# ]9 g. p2 n3! L% W7 ~- \' ~5 q* h
    根据信息长度 n 和所需检错概率 p 计算CRC位数4 s: V9 Q4 v$ ^, {# c. J
    在实际应用中,我们可以通过以下步骤来确定CRC的位数:确定目标检错概率:假设我们要求的检错概率 Pdetect≥p。
    6 j2 j0 P' r- q# }3 J; I  r3 j2 x/ y0 d
    代入公式并求出位数:我们可以重新排列公式来得到最小的CRC位数:3 N- G) s9 m1 j: Y* e% e3 [: S

    5hnnjxxd4il64044431719.jpg

    5hnnjxxd4il64044431719.jpg
    - Q3 Y4 E8 x0 K, @8 k$ s! d
    例如,若我们希望检错概率 p=0.999,则:
    ) I4 Y" t; O$ f1 N' S

    33vw2bzldje64044431819.jpg

    33vw2bzldje64044431819.jpg
    - ?& K0 N, D3 P7 r* s+ O
    这意味着至少需要10位的CRC才能满足这个检错概率。7 K% E( p  h; H7 b- s3 H# d0 n

    7 Q% K7 k1 L7 h' c* m% S7 V% `考虑信息长度 n:虽然理论上,CRC的检错能力与信息长度 n 不直接相关,但在极长的帧中,可能会遇到极端情况。, N% S" c6 @9 ]; r- s6 I

    $ g6 K- p; j/ i9 w6 Q! W# P因此,当 n 非常大(如数百甚至上千位)时,建议增加1-2位以提高稳健性。0 p# q4 ~- X2 O. M
    4
    1 N6 a" O$ |. {; N3 c% R1 c: RCRC位数选择的经验法则
    * A0 q3 i4 i, M  h  @# F0 R  _; N) s2 E
  • 短数据帧(如10-100比特):通常8位的CRC码已经可以提供很高的检错概率,适合普通通信应用。
  • 中等数据帧(100-1000比特):16位的CRC是更合适的选择,适合要求较高检错概率的协议。
  • 长数据帧(1000比特以上):32位CRC可以提供极高的检错能力,多用于高可靠性的工业、通信或存储系统中。
    + ^! n6 v0 r6 j
    1 W0 {0 b& _: Z7 z9 c
    假设你设计的协议需要保证检错概率不低于 p=0.999,且每帧数据为 n=500 比特。
    3 ^1 D1 t5 i0 u3 L4 F) X" l' A
    ( s- g, t2 F7 ]7 z7 ^- g根据上面的公式,我们计算得到的最小位数约为10位;结合数据帧长度,实际应用中推荐至少选择12位甚至16位的CRC,以确保满足高检错需求。
    : a) A4 H* C: s- m" l9 ~! s) \3 l' k0 r; B' G! k
    进一步的,标准CRC多项式(如CRC-16或CRC-32)经过广泛验证,在通信和存储应用中可靠性高,通常推荐直接采用这些标准多项式。
    1 \( w2 R$ w0 u5  ^& j, ~% W$ |1 `
    CRC码位数对系统的影响
    7 W4 Z* v( [& S9 U9 O* T位数越长的CRC校验码,校验性能越好,但代价是数据包的开销和计算复杂性增大。
    1 c$ P$ N; Q/ g( b- \% `) T
    8 [* W* \7 n. q+ c7 H- h, ^: V典型的实现中:
    ' @0 r$ B- x( W. Z
  • 计算性能:硬件CRC加速器可以显著降低较长CRC的计算延迟。
  • 通信开销:8位CRC增加的传输开销通常较小,但超过16位时,额外开销对低速通信协议影响较大。% H" C4 A2 R0 ~1 M' ]# X3 S( t; s

    + t" s* v1 ^% x; s+ G2 q1 V综合以上分析,为了在实际应用中确定CRC码长度,建议的步骤如下:& }1 `2 M+ n. \8 b5 ]7 W0 z
  • 根据要求的检错概率计算最小位数。
  • 考虑数据帧长度,适当增加1-2位以提高稳健性。
  • 使用标准CRC多项式以确保通用性和可靠性。4 ~* k' T& D  Q( O  W% N" S

    ( u! Q) {5 q. K% c1 |4 H! L

    pa2u5r01uci64044431919.jpg

    pa2u5r01uci64044431919.jpg
    . O+ S' A, f: m. _

    d0vuz2dwazn64044432019.gif

    d0vuz2dwazn64044432019.gif

    0 d. o+ B* N/ w: h% I5 f* ?点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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