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

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

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

CRC-16公式是什么?如何利用單片機(jī)去驗證呢

通信工程師專輯 ? 來源:通信工程師專輯 ? 作者:了凡三訓(xùn) ? 2022-11-09 10:14 ? 次閱讀

一、實驗?zāi)康?/p>

1、完成CRC-16的程序編寫

2、根據(jù)模板整改,實現(xiàn)函數(shù)調(diào)用

3、在程序中不可以出現(xiàn)長數(shù)組

4、利用單片機(jī)驗證

二、CRC-16校驗

CRC-16公式是什么?

94e074a0-5f59-11ed-8abf-dac502259ad0.png

上堂課提到了哦!

再來看看框圖是什么樣子?

94f535e8-5f59-11ed-8abf-dac502259ad0.png


每個小框都是一個寄存器

CRC即循環(huán)冗余校驗碼(Cyclic Redundancy Check):是數(shù)據(jù)通信領(lǐng)域中最常用的一種差錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。

生成步驟如下:

1、將x的最高次冪為R的生成多項式G(x)轉(zhuǎn)換成對應(yīng)的R+1位二進(jìn)制數(shù)。

2、將信息碼左移R位,相當(dāng)于對應(yīng)的信息多項式C(x)*x的R次方。

3、用生成多項式(二進(jìn)制數(shù))對信息碼做除,得到R位的余數(shù)。

4、將余數(shù)拼到信息碼左移后空出的位置,得到完整的CRC碼。

三、實驗程序

1、調(diào)用函數(shù)

這里完成的是寄存器生成法,同樣的根據(jù)模板,主要的是調(diào)用函數(shù)的編寫。

調(diào)用函數(shù)首先要進(jìn)行調(diào)用函數(shù)名的定義

function z = crc16(message)

接下來是寄存器的編寫,一開始寄存器的初始值都為0,為了程序的簡明,根據(jù)實驗要求不可以出現(xiàn)長數(shù)組,只能出現(xiàn)一個數(shù)組。

a=zeros(1,16)

zeros函數(shù)是全零矩陣,所以滿足要求。

根據(jù)公式和框圖就可直接寫出每個寄存器的等式,這時候就要注意框圖中的箭頭方向,最重要的是要在最前面先定義第一個寄存器。

第一個寄存器里的數(shù)據(jù)是第十六個寄存器和輸入數(shù)據(jù)的第一個值的異或,尤為關(guān)鍵。后面的編寫就比較簡單,只要注意一一對應(yīng)就好。同時crc是一個循環(huán)碼,這里就要使用for循環(huán)。循環(huán)的次數(shù)由輸入比特數(shù)決定。

函數(shù)的最后還要把完整的寄存器寫上。

z=[a(16),a(15),a(14),a(13),a(12),a(11),a(10),a(9),a(8),a(7),a(6),a(5),a(4),a(3),a(2),a(1)];

2、主函數(shù)

在寫主函數(shù)之前先要把調(diào)用的函數(shù)寫上,后面的程序才能夠使用。

在這里應(yīng)用的是randi函數(shù)

randi是matlab中能產(chǎn)生均勻分布的偽隨機(jī)整數(shù)的新函數(shù)。

主要語法:

randi(iMax)在開區(qū)間(0,iMax)生成均勻分布的偽隨機(jī)整數(shù)
randi(iMax,m,n)在開區(qū)間(0,iMax)生成m*n型隨機(jī)矩陣
randi([iMin,iMax],m,n)在開區(qū)間(iMin,iMax)生成m*n型隨機(jī)矩陣

相似的還有rand函數(shù)和randn。

rand 生成均勻分布的偽隨機(jī)數(shù)。分布在(0~1)之間

主要語法:

rand(m,n)生成m行n列的均勻分布的偽隨機(jī)數(shù)
rand(m,n,'double')生成指定精度的均勻分布的偽隨機(jī)數(shù),參數(shù)還可以是'single'
rand(RandStream,m,n)利用指定的RandStream(我理解為隨機(jī)種子)生成偽隨機(jī)數(shù)
randn 生成標(biāo)準(zhǔn)正態(tài)分布的偽隨機(jī)數(shù)(均值為0,方差為1)主要語法和rand函數(shù)一致。

dec2hex函數(shù)

功能:把一個十進(jìn)制數(shù)轉(zhuǎn)換成一個字符串形式表示的十六進(jìn)制數(shù)。

語法格式:

str = dec2hex(d)把十進(jìn)制整數(shù)d轉(zhuǎn)換成16進(jìn)制形式表示, 并存在一個字符串中。d必須是一個非負(fù)的比2^52次方小的整數(shù)。

str = dec2hex(d, n)指定十六進(jìn)制數(shù)的位數(shù),n就是指定的位數(shù)例如:dec2hex(255)ans =FF;dec2hex(255, 6)ans =0000FF

之后的程序就是將生成的數(shù)據(jù)寫入指定的文件里面。

data_hex = dec2hex(data_16);

fid = fopen('data_hex.txt', 'wt');

fprintf(fid, '%s ', data_hex);

fclose(fid);

data_binary1=dec2bin(data_binary);

fid = fopen('data_bin.txt', 'wt');

fprintf(fid, '%s ', data_binary1);

fclose(fid);

result_hex = dec2hex(result_16);

fid = fopen('result_hex.txt', 'wt');

fprintf(fid, '%s ', result_hex);

fclose(fid);

3、單片機(jī)驗證

單片機(jī)是利用串口接收數(shù)據(jù),處理后回傳給電腦

在MATLAB里直接寫入1011001001011010,則有data_bin文件的1011001001011010,data_hex文件的B25A,result_hex文件的83D0。

傳入單片機(jī)的數(shù)據(jù)是data_bin文件中的,相關(guān)的數(shù)據(jù)在單片機(jī)里進(jìn)行運算,得到的如下圖所示。

952c3070-5f59-11ed-8abf-dac502259ad0.jpg

MATLAB數(shù)據(jù)結(jié)果!

955426d4-5f59-11ed-8abf-dac502259ad0.png

兩者的數(shù)據(jù)相同,也就驗證了CRC校驗程序正確。

小結(jié):現(xiàn)在MATLAB程序已經(jīng)能夠熟練應(yīng)用了,就是要多做才能熟練。但是單片機(jī)這塊還是挺薄弱的,能夠讀懂程序但是不能完整的獨立編寫。單片機(jī)比MATLAB復(fù)雜多了,這是現(xiàn)在最大的感觸。但是我想至少能讀懂,能寫一些,然后每次多會一點知識就好。還是要加油。


審核編輯:劉清

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

    關(guān)注

    6023

    文章

    44377

    瀏覽量

    628505
  • matlab
    +關(guān)注

    關(guān)注

    179

    文章

    2946

    瀏覽量

    229482
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5253

    瀏覽量

    119213
  • CRC-16
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    7521

原文標(biāo)題:計算機(jī)通信與網(wǎng)絡(luò)v2 實驗課程(9)

文章出處:【微信號:gh_30373fc74387,微信公眾號:通信工程師專輯】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    單片機(jī)學(xué)到什么程度可以找工作?

    這個話題老生常談了,找工作需要具備一定的技術(shù)實力,但是究竟學(xué)到什么程度就可以單片機(jī)作為嵌入系統(tǒng)的核心,具有廣泛的應(yīng)用場景,因此掌握單片機(jī)編程技能確實能為您打開就業(yè)之門。然而,要想
    的頭像 發(fā)表于 03-28 08:04 ?1153次閱讀
    <b class='flag-5'>單片機(jī)</b>學(xué)到什么程度可以找工作?

    如何系統(tǒng)、科學(xué)地自學(xué)單片機(jī)

    的自學(xué)單片機(jī)?自學(xué)單片機(jī)需要一定的計劃和方法,以下是具體的步驟和建議。如何系統(tǒng)、科學(xué)地自學(xué)單片機(jī)?學(xué)習(xí)電子基礎(chǔ)知識:理解電路原理、數(shù)字電子技術(shù)、模擬電子技術(shù)等基礎(chǔ)
    的頭像 發(fā)表于 03-28 08:03 ?822次閱讀
    如何系統(tǒng)、科學(xué)地自學(xué)<b class='flag-5'>單片機(jī)</b>?

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

    瑞薩RA單片機(jī)硬件CRC計算單元采用固定的多項發(fā)生器來計算8位或者32位數(shù)據(jù)的CRC校驗值,對數(shù)據(jù)傳輸或數(shù)據(jù)存儲的一致性、完整性進(jìn)行驗證
    發(fā)表于 02-26 11:45 ?646次閱讀
    RA MCU中的<b class='flag-5'>CRC</b>模塊和使用方法

    基于單片機(jī)控制的交通燈設(shè)計

    本課程設(shè)計是在學(xué)完單片機(jī)原理及課程之后綜合利用所學(xué)單片機(jī)知識完成一個單片機(jī)應(yīng)用系統(tǒng)設(shè)計并在實驗室實現(xiàn)。
    的頭像 發(fā)表于 01-22 15:31 ?1700次閱讀
    基于<b class='flag-5'>單片機(jī)</b>控制的交通燈設(shè)計

    16單片機(jī)S1C17153

    16單片機(jī)單片機(jī).16KB ROM / 2KB內(nèi)存* S1C17653對于程序開發(fā)很有用。.產(chǎn)生具有內(nèi)置振蕩器的操作時鐘。- OSC3B振蕩器電路:2MHz/1MHz/500kHz(
    發(fā)表于 01-15 15:36 ?0次下載

    單片機(jī)怎么能夠與手機(jī)實現(xiàn)遠(yuǎn)程通訊

    單片機(jī)怎么能夠與手機(jī)實現(xiàn)遠(yuǎn)程通訊? 隨著物聯(lián)網(wǎng)的快速發(fā)展,單片機(jī)作為物聯(lián)網(wǎng)應(yīng)用中最常見的控制器,與手機(jī)實現(xiàn)遠(yuǎn)程通訊已成為一種趨勢。通過單片機(jī)與手機(jī)的遠(yuǎn)程通訊,可以實現(xiàn)智能家居、智能農(nóng)
    的頭像 發(fā)表于 01-15 14:59 ?2084次閱讀

    單片機(jī)的燒寫次數(shù)是不是無限的?單片機(jī)能燒錄多少次?

    單片機(jī)的燒寫次數(shù)是不是無限的?單片機(jī)能燒錄多少次? 單片機(jī)的燒寫次數(shù)是有限的,每款單片機(jī)都有一個特定的擦寫次數(shù)限制。當(dāng)燒寫次數(shù)達(dá)到限制時,
    的頭像 發(fā)表于 12-07 13:46 ?3411次閱讀

    單片機(jī)的GPIO如何實現(xiàn)觸摸按鍵的功能

    單片機(jī)的GPIO如何實現(xiàn)觸摸按鍵的功能? 觸摸按鍵是一種使用觸摸電容技術(shù)實現(xiàn)的按鍵,它通過利用人體的電容來實現(xiàn)按鍵的檢測和觸發(fā)。在單片機(jī)中實現(xiàn)觸摸按鍵功能需要使用特定的引腳和軟件算法
    的頭像 發(fā)表于 12-07 11:43 ?3226次閱讀

    單片機(jī)學(xué)的是什么

    單片機(jī),對于每一個硬件行業(yè)的從業(yè)者或者在校電子類專業(yè)的學(xué)生,相信對于這個名詞都不陌生,但是掌沒掌握就另說了。 那單片機(jī)到底學(xué)的是什么? 其實單片機(jī)在生活中就非常常見,目前市面上主流的
    的頭像 發(fā)表于 11-07 10:38 ?1043次閱讀
    <b class='flag-5'>單片機(jī)</b>學(xué)的是什么

    單片機(jī)解密失敗有哪幾點原因

    單片機(jī)解密失敗有哪幾點原因? 單片機(jī)解密失敗的原因有很多,下面將詳細(xì)列舉可能的原因,并逐一進(jìn)行解釋,以期為您提供一個詳盡、詳實、細(xì)致的文章。 1. 芯片廠商實施的硬件保護(hù)機(jī)制 現(xiàn)代單片機(jī)
    的頭像 發(fā)表于 11-07 10:17 ?733次閱讀

    單片機(jī)Keil開發(fā)環(huán)境的搭建

    歡迎大家來到C語言單片機(jī)編程課堂。前面一課我們了解了單片機(jī)編程與嵌入開發(fā)內(nèi)容,這節(jié)課我們來學(xué)習(xí)單片機(jī)開發(fā)環(huán)境Keil,并使用keil完成單片機(jī)
    的頭像 發(fā)表于 11-01 09:17 ?1483次閱讀
    <b class='flag-5'>單片機(jī)</b>Keil開發(fā)環(huán)境的搭建

    基于PIC單片機(jī)的便攜氣體測漏儀

    電子發(fā)燒友網(wǎng)站提供《基于PIC單片機(jī)的便攜氣體測漏儀.pdf》資料免費下載
    發(fā)表于 10-30 09:45 ?0次下載
    基于PIC<b class='flag-5'>單片機(jī)</b>的便攜<b class='flag-5'>式</b>氣體測漏儀

    單片機(jī)解密失敗的原因

    單片機(jī)解密存在失敗的概率,從我們解密的經(jīng)驗來看,按概率來講,大概存在1%單片機(jī)解密的失敗概率,存在0.3%的損壞母片的概率。所以我們不保證100%解密成功,也不保證100%不破壞母片,那么,單片機(jī)解密失敗有那幾點原因
    發(fā)表于 10-25 09:49 ?446次閱讀

    分享16單片機(jī)常用模塊電路

    分享16單片機(jī)常用模塊電路
    的頭像 發(fā)表于 10-24 17:16 ?782次閱讀
    分享<b class='flag-5'>16</b>個<b class='flag-5'>單片機(jī)</b>常用模塊電路

    單片機(jī)CRC原理及應(yīng)用

    單片機(jī)CRC原理及應(yīng)用
    的頭像 發(fā)表于 09-27 16:02 ?1640次閱讀
    <b class='flag-5'>單片機(jī)</b>中<b class='flag-5'>CRC</b>原理及應(yīng)用