久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1472|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

CRC校驗原理及程序代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:417200 發(fā)表于 2018-10-29 13:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
通信協(xié)議里有CRC校驗碼,計算從報文的起始字節(jié)到報文內(nèi)容最后一個字節(jié)的crc16的值。
舉個例子:
遠(yuǎn)程控制命令集
5B 20 00 0A 00 01 0A 01 FE 00 01 00 AB 89
CRC校驗碼為:AB 89
一、RTU 檢查碼(CRC)計算器
第一種:
參看:RTU 檢查碼(CRC)計算器
大小端轉(zhuǎn)換后,CRC檢查碼為:AB 89
說明,這個計算器還是可以用的。
第二種:
參看:On-line CRC calculation and free library
二、運算規(guī)則
RTU檢查碼(CRC)計算,運算規(guī)則如下:
步驟1:令16位暫存器(CRC暫存器)= 0xFFFF
步驟2:異或第一個8位字節(jié)的消息指令與低位元16CRC暫存器,做異或?qū)⒔Y(jié)果存入CRC暫存器內(nèi)。
步驟3:右移一位CRC暫存器,將0填入高位元處。
步驟4:檢查右移的值,如果是0將步驟3的新值存入CRC暫存器內(nèi),否則異或0xA001CRC暫存器,將結(jié)果存入CRC暫存器內(nèi)。
步驟5:重復(fù)步驟3步驟4,將8位全部運算完成。
步驟6:重復(fù)步驟2步驟5,取下一個8位的消息指令,直到所有消息指令運算完成。最后,得到的CRC緩存器的值,即CRC的檢查碼。值得注意的是CRC的檢查碼必須交換放置于訊息指令的檢查碼中。
三、相關(guān)代碼
擴展參看:C語言再學(xué)習(xí) 位操作
int16_t factory_crc16 ( uint8_t *bufData,uint16_t buflen)
{
   uint16_t TCPCRC = 0xffff;
   uint16_t POLYNOMIAL = 0xa001;
   uint8_t i, j;
   for (i = 0; i < buflen; i++)
    {
       TCPCRC ^= bufData;
       for (j = 0; j < 8; j++)
       {
           if ((TCPCRC & 0x0001) != 0)
           {
                TCPCRC >>= 1;
               TCPCRC ^= POLYNOMIAL;
           }
           else
           {
                TCPCRC >>= 1;
           }
       }
    }
   return TCPCRC;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
四、CRC校驗原理及步驟
參看:CRC校驗原理及步驟
1、什么是CRC校驗?
CRC即循環(huán)冗余校驗碼:是數(shù)據(jù)通信領(lǐng)域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。循環(huán)冗余檢查(CRC)是一種數(shù)據(jù)傳輸檢錯功能,對數(shù)據(jù)進(jìn)行多項式計算,并將得到的結(jié)果附在幀的后面,接收設(shè)備也執(zhí)行類似的算法,以保證數(shù)據(jù)傳輸?shù)恼_性和完整性。
2、CRC校驗原理:
其根本思想就是先在要發(fā)送的幀后面附加一個數(shù)(這個就是用來校驗的校驗碼,但要注意,這里的數(shù)也是二進(jìn)制序列的,下同),生成一個新幀發(fā)送給接收端。當(dāng)然,這個附加的數(shù)不是隨意的,它要使所生成的新幀能與發(fā)送端和接收端共同選定的某個特定數(shù)整除(注意,這里不是直接采用二進(jìn)制除法,而是采用一種稱之為模2除法。到達(dá)接收端后,再把接收到的新幀除以(同樣采用“模2除法”)這個選定的除數(shù)。因為在發(fā)送端發(fā)送數(shù)據(jù)幀之前就已通過附加一個數(shù),做了“去余”處理(也就已經(jīng)能整除了),所以結(jié)果應(yīng)該是沒有余數(shù)。如果有余數(shù),則表明該幀在傳輸過程中出現(xiàn)了差錯。
2除法:
2除法與算術(shù)除法類似,但每一位除的結(jié)果不影響其它位,即不向上一位借位,所以實際上就是異或。在循環(huán)冗余校驗碼(CRC)的計算中有應(yīng)用到模2除法。
例:
3CRC校驗步驟:
CRC校驗中有兩個關(guān)鍵點,一是預(yù)先確定一個發(fā)送送端和接收端都用來作為除數(shù)的二進(jìn)制比特串(或多項式),可以隨機選擇,也可以使用國際標(biāo)準(zhǔn),但是最高位和最低位必須為1;二是把原始幀與上面計算出的除數(shù)進(jìn)行模2除法運算,計算出CRC碼。
4、具體步驟:
選擇合適的除數(shù)
看選定除數(shù)的二進(jìn)制位數(shù),然后再要發(fā)送的數(shù)據(jù)幀上面加上這個位數(shù)-1位的0,然后用新生成的幀以模2除法的方式除上面的除數(shù),得到的余數(shù)就是該幀的CRC校驗碼。注意,余數(shù)的位數(shù)一定只比除數(shù)位數(shù)少一位,也就是CRC校驗碼位數(shù)比除數(shù)位數(shù)少一位,如果前面位是0也不能省略。
將計算出來的CRC校驗碼附加在原數(shù)據(jù)幀后面,構(gòu)建成一個新的數(shù)據(jù)幀進(jìn)行發(fā)送;最后接收端在以模2除法方式除以前面選擇的除數(shù),如果沒有余數(shù),則說明數(shù)據(jù)幀在傳輸?shù)倪^程中沒有出錯。
5、CRC校驗碼計算示例:
現(xiàn)假設(shè)選擇的CRC生成多項式為GX = X4 + X3 + 1,要求出二進(jìn)制序列10110011CRC校驗碼。下面是具體的計算過程:
①將多項式轉(zhuǎn)化為二進(jìn)制序列,由GX = X4 + X3 + 1可知二進(jìn)制一種有五位,第4位、第三位和第零位分別為1,則序列為11001
②多項式的位數(shù)位5,則在數(shù)據(jù)幀的后面加上5-10,數(shù)據(jù)幀變?yōu)?/font>101100110000,然后使用模2除法除以除數(shù)11001,得到余數(shù)。
③將計算出來的CRC校驗碼添加在原始幀的后面,真正的數(shù)據(jù)幀為101100110100,再把這個數(shù)據(jù)幀發(fā)送到接收端。
④接收端收到數(shù)據(jù)幀后,用上面選定的除數(shù),用模2除法除去,驗證余數(shù)是否為0,如果為0,則說明數(shù)據(jù)幀沒有出錯。
---------------------
作者:聚優(yōu)致成
來源:CSDN
原文:https://blog.csdn.net/qq_29350001/article/details/79518638
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲人人 | 精品久久久久久久久久久下田 | 日韩av在线不卡 | 怡红院怡春院一级毛片 | 性做久久久久久免费观看欧美 | 国产在线播| 在线观看黄免费 | 成人三级影院 | 免费a国产 | 男女羞羞视频在线免费观看 | 天天色天天 | 免费的av网站 | 国产精品久久久久久久免费观看 | 免费视频中文字幕 | 久久精品a| 精品久久久久久久人人人人传媒 | 中文字幕三区 | 欧美日韩久久 | 日韩中文字幕一区二区 | 欧美成人a | 国产精品一区二区三区在线播放 | 日韩精品一区二区三区在线观看 | 久久丁香| 成人av网站在线观看 | 中文字幕av在线 | 久久精品小视频 | 在线视频h | 亚洲精品中文字幕在线观看 | 国产成在线观看免费视频 | 久久午夜视频 | 欧美一级片在线看 | 欧美一区在线视频 | 青青草一区| 黑人精品欧美一区二区蜜桃 | 日韩欧美在线观看 | 国产精品一区在线 | 色婷婷综合网 | 成人免费淫片aa视频免费 | 久久综合久久自在自线精品自 | 九色 在线 | 亚洲狠狠丁香婷婷综合久久久 |