0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CRC(循環(huán)冗余校驗(yàn))應(yīng)用舉例

丙丁先生的自學(xué)旅程 ? 來(lái)源:丙丁先生的自學(xué)旅程 ? 作者:丙丁先生的自學(xué)旅 ? 2024-05-16 16:12 ? 次閱讀

CRC(循環(huán)冗余校驗(yàn))是一種常用的數(shù)據(jù)校驗(yàn)方法,用于檢測(cè)數(shù)據(jù)傳輸過(guò)程中可能出現(xiàn)的錯(cuò)誤。在計(jì)算CRC碼時(shí),需要使用一個(gè)固定的生成多項(xiàng)式(例如0x4C11DB7),并將其與給定的數(shù)據(jù)緩沖區(qū)進(jìn)行模2除法運(yùn)算。

下面是一個(gè)使用Python實(shí)現(xiàn)的CRC計(jì)算單元的例子:

[code]

python

def crc32(data):
crc = 0xFFFFFFFF
poly = 0x4C11DB7
for byte in data:
crc ^= byte << 24
for i in range(8):
if crc & 0x80000000:
crc = (crc << 1) ^ poly
else:
crc <<= 1
crc &= 0xFFFFFFFF
return crc ^ 0xFFFFFFFF

[/code]

在這個(gè)例子中,我們首先定義了一個(gè)初始值為0xFFFFFFFF的CRC變量和一個(gè)固定的生成多項(xiàng)式poly。然后,我們遍歷給定的數(shù)據(jù)緩沖區(qū)中的每個(gè)字節(jié),并將其左移24位后與CRC進(jìn)行異或運(yùn)算。接下來(lái),我們使用一個(gè)循環(huán)來(lái)執(zhí)行8次迭代,每次迭代都會(huì)檢查CRC的最高位是否為1。如果是,則將CRC左移一位并與生成多項(xiàng)式進(jìn)行異或運(yùn)算;否則,只將CRC左移一位。最后,我們將CRC與0xFFFFFFFF進(jìn)行與運(yùn)算,以確保結(jié)果是一個(gè)32位無(wú)符號(hào)整數(shù)。最終,我們將CRC與0xFFFFFFFF進(jìn)行異或運(yùn)算,以得到最終的CRC碼。

這個(gè)例子中的CRC計(jì)算單元可以用于獲取給定數(shù)據(jù)緩沖區(qū)的CRC碼,例如:

[code]

python

data = b"Hello, world!"
crc = crc32(data)
print("CRC: {:08X}".format(crc))

[/code]

這將輸出給定數(shù)據(jù)緩沖區(qū)的CRC碼,例如:

[code]

csharp

CRC: 4A17B156

[/code]

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • crc
    crc
    +關(guān)注

    關(guān)注

    0

    文章

    199

    瀏覽量

    29420
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4767

    瀏覽量

    84375
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    TAS5805內(nèi)部的硬件CRC8對(duì)應(yīng)標(biāo)準(zhǔn)的哪種? CRC校驗(yàn)的數(shù)據(jù)是offset和value值嗎?

    TAS5805 內(nèi)部的硬件 CRC8 對(duì)應(yīng)標(biāo)準(zhǔn)的哪種? CRC 校驗(yàn)的數(shù)據(jù)是 offset 和 value 值嗎?用 PPC 加載文件計(jì)算出來(lái)的值和在線CRC計(jì)算工具計(jì)算的值不一樣。
    發(fā)表于 10-12 06:19

    請(qǐng)問(wèn)InDTU IHDMP協(xié)議使用的CRC校驗(yàn)使用的什么參數(shù)模型?

    InDTU IHDMP協(xié)議使用的CRC校驗(yàn)使用的什么參數(shù)模型?
    發(fā)表于 07-25 06:39

    詳解TSMaster CAN 與 CANFD 的 CRC E2E 校驗(yàn)方法

    面對(duì)切換工具鏈的用戶(hù)來(lái)說(shuō),在TSMaster上完成總線通訊中的CRC/E2E校驗(yàn)處理不是特別熟悉,該文章可以協(xié)助客戶(hù)快速使用TSMaster完成CAN/CANFD總線通訊的CRC/E2E校驗(yàn)
    的頭像 發(fā)表于 05-25 08:21 ?1796次閱讀
    詳解TSMaster CAN 與 CANFD 的 <b class='flag-5'>CRC</b> E2E <b class='flag-5'>校驗(yàn)</b>方法

    怎么使用hal accumulate函數(shù)完成crc分塊校驗(yàn)與整體校驗(yàn)crc值相等?

    怎么使用hal accumulate函數(shù)完成crc分塊校驗(yàn)與整體校驗(yàn)crc值相等
    發(fā)表于 03-27 07:46

    淺析MCU通信、存儲(chǔ)常用的簡(jiǎn)單校驗(yàn)算法

    UART有一個(gè)奇偶校驗(yàn),CAN通信有CRC校驗(yàn)。Modbus、MAVlink、USB等通信協(xié)議也有校驗(yàn)信息。
    的頭像 發(fā)表于 03-07 10:56 ?461次閱讀
    淺析MCU通信、存儲(chǔ)常用的簡(jiǎn)單<b class='flag-5'>校驗(yàn)</b>算法

    RA MCU中的CRC模塊和使用方法

    瑞薩RA單片機(jī)硬件CRC計(jì)算單元采用固定的多項(xiàng)式發(fā)生器來(lái)計(jì)算8位或者32位數(shù)據(jù)的CRC校驗(yàn)值,對(duì)數(shù)據(jù)傳輸或數(shù)據(jù)存儲(chǔ)的一致性、完整性進(jìn)行驗(yàn)證。這篇文章重點(diǎn)介紹RA MCU中的CRC模塊和
    發(fā)表于 02-26 11:45 ?804次閱讀
    RA MCU中的<b class='flag-5'>CRC</b>模塊和使用方法

    fpga報(bào)告crc故障是什么意思

    常用的校驗(yàn)方法,用于檢測(cè)和校正數(shù)據(jù)傳輸中的錯(cuò)誤。在FPGA設(shè)計(jì)中,CRC故障指的是與CRC相關(guān)的錯(cuò)誤或問(wèn)題。 首先,讓我們了解CRC是什么以及它在數(shù)據(jù)傳輸中的作用。
    的頭像 發(fā)表于 01-04 11:06 ?1271次閱讀

    虹科技術(shù) | 保障數(shù)據(jù)傳輸穩(wěn)定性:BabyLIN產(chǎn)品的CRC算法實(shí)現(xiàn)

    CRC校驗(yàn)循環(huán)冗余校驗(yàn))是數(shù)據(jù)通訊中最常采用的校驗(yàn)方式。CAN協(xié)議中,總線通信節(jié)點(diǎn)也常采用
    的頭像 發(fā)表于 01-02 17:23 ?488次閱讀
    虹科技術(shù) | 保障數(shù)據(jù)傳輸穩(wěn)定性:BabyLIN產(chǎn)品的<b class='flag-5'>CRC</b>算法實(shí)現(xiàn)

    虹科技術(shù)|保障數(shù)據(jù)傳輸穩(wěn)定性:BabyLIN產(chǎn)品的CRC算法實(shí)現(xiàn)

    導(dǎo)讀: CRC校驗(yàn)循環(huán)冗余校驗(yàn))是數(shù)據(jù)通訊中最常采用的校驗(yàn)方式。CAN協(xié)議中,總線通信節(jié)點(diǎn)也常
    的頭像 發(fā)表于 01-02 10:45 ?446次閱讀
    虹科技術(shù)|保障數(shù)據(jù)傳輸穩(wěn)定性:BabyLIN產(chǎn)品的<b class='flag-5'>CRC</b>算法實(shí)現(xiàn)

    簡(jiǎn)述循環(huán)冗余crc校驗(yàn)方法的工作原理

    循環(huán)冗余碼(CRC校驗(yàn)是一種常用的錯(cuò)誤檢測(cè)和糾正方法,廣泛應(yīng)用于通信和存儲(chǔ)設(shè)備中,用于確定數(shù)據(jù)在傳輸或存儲(chǔ)過(guò)程中是否出現(xiàn)錯(cuò)誤。 CRC
    的頭像 發(fā)表于 12-20 11:27 ?1127次閱讀

    瑞薩RA MCU中CRC模塊的使用方法

    CRC(Cyclic Redundancy Check),即循環(huán)冗余校驗(yàn)碼。CRC是數(shù)據(jù)通信領(lǐng)域中最常用的一種查錯(cuò)
    的頭像 發(fā)表于 12-07 10:23 ?1912次閱讀
    瑞薩RA MCU中<b class='flag-5'>CRC</b>模塊的使用方法

    ADAU1761的SPI配置失敗,請(qǐng)問(wèn)有CRC校驗(yàn)功能嗎?

    節(jié)和配置的字節(jié)不一致,會(huì)是什么原因?如何確定配置的結(jié)果正確。1761有CRC校驗(yàn)功能嗎?保證配置寄存器的值完全正確?
    發(fā)表于 11-28 06:49

    CRC校驗(yàn)原理及其軟件實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《CRC校驗(yàn)原理及其軟件實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 11-16 10:11 ?1次下載
    <b class='flag-5'>CRC</b><b class='flag-5'>校驗(yàn)</b>原理及其軟件實(shí)現(xiàn)

    淺析YTM32的循環(huán)冗余校驗(yàn)CRC外設(shè)模塊

    在串行通信幀中,為了保證數(shù)據(jù)在傳輸過(guò)程中的完整性,通常采用一種指定的算法對(duì)原始數(shù)據(jù)進(jìn)行計(jì)算,得出的一個(gè)校驗(yàn)值。
    的頭像 發(fā)表于 11-15 12:25 ?1027次閱讀
    淺析YTM32的<b class='flag-5'>循環(huán)</b><b class='flag-5'>冗余</b><b class='flag-5'>校驗(yàn)</b><b class='flag-5'>CRC</b>外設(shè)模塊

    CRC校驗(yàn)碼的多種Verilog實(shí)現(xiàn)方式

    CRC-8的生成多項(xiàng)式為G(D)=D8+D2+D+1,對(duì)CRC進(jìn)行簡(jiǎn)化表示時(shí)可以忽略最高位的D8,結(jié)合圖示中三個(gè)異或運(yùn)算的位置更容易理解生成多項(xiàng)式,8位CRC有8個(gè)寄存器C0~C7,根據(jù)多項(xiàng)式,C0、C1和C2的輸入是由異或運(yùn)
    的頭像 發(fā)表于 11-12 09:53 ?5093次閱讀
    <b class='flag-5'>CRC</b><b class='flag-5'>校驗(yàn)</b>碼的多種Verilog實(shí)現(xiàn)方式