电子产业一站式赋能平台

PCB联盟网

帖子
查看: 145|回复: 0
收起左侧

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

[复制链接]

960

主题

960

帖子

7967

积分

高级会员

Rank: 5Rank: 5

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

vtpp4vvsgfj64044431419.gif

vtpp4vvsgfj64044431419.gif

& J0 r5 C: G7 h% }) W4 E% u9 T$ d点击上方蓝色字体,关注我们
" M9 _* [6 M! f. k9 u# T
3 h6 G; ]& W$ j0 Z5 B2 X, i$ k# {选择CRC校验码的长度时确实需要在检错能力和系统开销之间做出权衡。CRC码的长度(通常是4、8、16、32位)直接影响到能检测到的错误类型和概率。
8 h5 i, u, w4 m2 J% w3 i$ ^' G/ f2 `) e' |# _# [

0tnvlapkqrq64044431519.png

0tnvlapkqrq64044431519.png

, S) Y) Y5 N+ V. G. b要确定在一定检错概率 p 下的最小CRC长度,可以从几个方面入手,包括信息长度 n、错误检测概率需求 p、以及CRC多项式的选择。
4 j" f4 n$ b! h; _: b3 s4 R7 T1 D6 c* h& Q  j* Q) J
下面从理论背景、实用方法以及计算步骤等方面详细解释。
$ |" A& C1 y9 Z6 O1 {9 b11 n+ [% n% M. w0 X4 p& Y1 {
理论背景:CRC的检错原理
4 d' w. j8 E1 X* a( O, p2 X; rCRC(Cyclic Redundancy Check)使用一个特定的生成多项式对数据帧进行余数计算,产生一个校验码。
7 }$ d* q9 k4 B  r
5 q$ M1 \' E, f接收端利用相同的多项式重算余数,如果余数为零则判定无误差,否则判定出错。
4 S% v' I/ @- }& B8 R5 O# D1 A
0 ~, z3 G. T4 d对于不同长度的CRC码,其生成多项式能探测不同类型的错误:+ y' r  k$ P/ R) h0 f3 d
  • 单比特错误:任何CRC都能检测单比特错误。
  • 连续位翻转的突发错误:长度为 k 位的CRC最多可以检测到长度不超过 k 位的突发错误。
  • 随机错误:概率与CRC码的位数有关。$ m1 X6 c$ X( {1 @+ m* E9 o
    ; _: [+ B+ d: w7 N
    24 f6 H# d$ q  v" ^7 D/ b: k1 v
    检错概率的数学模型9 h& K, C" A4 ]7 y. h
    CRC的检错概率可以近似通过以下公式进行估算:
    $ F" X0 J: p! K3 d3 O0 U

    vkrxvwac1xd64044431619.jpg

    vkrxvwac1xd64044431619.jpg
    + ?, A  t: f! Q' P0 B5 ?
    其中 k为CRC校验码的位数。
    # C" v! G, R  Z' `. C5 z) {" S5 C* m) C2 Z  x# d, E; I
    例如,对于一个8位的CRC码,理论上可检测到的错误概率约为 1?1/256=0.996。从公式中可以看出,位数越多,检错概率越高。
    4 `3 V: O8 u$ K* X: K' C9 g/ ]5 X3
    6 Z9 R. j2 n! p6 M5 r" Y/ E* _4 @根据信息长度 n 和所需检错概率 p 计算CRC位数, a7 [. b0 l' m; D. U1 `
    在实际应用中,我们可以通过以下步骤来确定CRC的位数:确定目标检错概率:假设我们要求的检错概率 Pdetect≥p。1 I" s# a# ^7 F' o
    % g, e, s: S# ^9 F( V4 a
    代入公式并求出位数:我们可以重新排列公式来得到最小的CRC位数:( C" u' L! c! }) K

    5hnnjxxd4il64044431719.jpg

    5hnnjxxd4il64044431719.jpg

      H5 P; B* B" B1 F例如,若我们希望检错概率 p=0.999,则:
    * w7 K8 b3 W: R8 J4 _

    33vw2bzldje64044431819.jpg

    33vw2bzldje64044431819.jpg
    : y1 B2 }- F3 K. g+ t
    这意味着至少需要10位的CRC才能满足这个检错概率。/ ]8 D  r2 ]9 ]& G

    8 y2 G5 C4 V5 i* O4 M% R6 f% r考虑信息长度 n:虽然理论上,CRC的检错能力与信息长度 n 不直接相关,但在极长的帧中,可能会遇到极端情况。
    6 {6 p' B9 y3 p! ?( l5 j
    1 y& m+ ]7 T2 n# z: H; s因此,当 n 非常大(如数百甚至上千位)时,建议增加1-2位以提高稳健性。
    . ?$ k2 a' Q0 g2 ], ?" d4
    + o. q! `/ q6 M, CCRC位数选择的经验法则
    " |  t% n& S4 k6 \
  • 短数据帧(如10-100比特):通常8位的CRC码已经可以提供很高的检错概率,适合普通通信应用。
  • 中等数据帧(100-1000比特):16位的CRC是更合适的选择,适合要求较高检错概率的协议。
  • 长数据帧(1000比特以上):32位CRC可以提供极高的检错能力,多用于高可靠性的工业、通信或存储系统中。; h/ p7 U( ]* `: G, w

    # s0 v5 e. `6 j$ S假设你设计的协议需要保证检错概率不低于 p=0.999,且每帧数据为 n=500 比特。) a. O: r6 n! V

    % Y9 C' X6 X4 G; w/ Y0 Q根据上面的公式,我们计算得到的最小位数约为10位;结合数据帧长度,实际应用中推荐至少选择12位甚至16位的CRC,以确保满足高检错需求。
    6 Z+ {/ W$ ^+ U- p- i9 e0 e- R# _- T
    进一步的,标准CRC多项式(如CRC-16或CRC-32)经过广泛验证,在通信和存储应用中可靠性高,通常推荐直接采用这些标准多项式。
    9 o; |) }' l$ x3 ?7 ?5% t6 q. h+ d0 g1 x  J3 q5 Z
    CRC码位数对系统的影响) g" O3 V1 _6 x0 `0 Z4 _
    位数越长的CRC校验码,校验性能越好,但代价是数据包的开销和计算复杂性增大。
    8 Z7 _: N: @+ K8 g: _% Y9 [6 ^& y% Q! H5 N: z* q
    典型的实现中:
    " n$ y; Q5 U  {# E( @1 f% I" w
  • 计算性能:硬件CRC加速器可以显著降低较长CRC的计算延迟。
  • 通信开销:8位CRC增加的传输开销通常较小,但超过16位时,额外开销对低速通信协议影响较大。
    6 t9 Z4 r8 A& M: s2 b

    - w" u1 i! s7 p# T6 v& q综合以上分析,为了在实际应用中确定CRC码长度,建议的步骤如下:
    9 e$ \1 O+ F5 J: u% G0 R2 H+ F
  • 根据要求的检错概率计算最小位数。
  • 考虑数据帧长度,适当增加1-2位以提高稳健性。
  • 使用标准CRC多项式以确保通用性和可靠性。2 Y: T4 q8 o3 y" q0 O
    ) M7 V/ a/ Z  L( _. @0 X

    pa2u5r01uci64044431919.jpg

    pa2u5r01uci64044431919.jpg

    / B% I/ R5 D- {% g

    d0vuz2dwazn64044432019.gif

    d0vuz2dwazn64044432019.gif

    , `* A; c, W3 e) Z* W点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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