crc校驗
CRC即循環(huán)冗余校驗碼(Cyclic Redundancy Check):是數(shù)據(jù)通信領(lǐng)域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。循環(huán)冗余檢查(CRC)是一種數(shù)據(jù)傳輸檢錯功能,對數(shù)據(jù)進行多項式計算,并將得到的結(jié)果附在幀的后面,接收設(shè)備也執(zhí)行類似的算法,以保證數(shù)據(jù)傳輸?shù)恼_性和完整性。
在數(shù)據(jù)傳輸過程中,無論傳輸系統(tǒng)的設(shè)計再怎么完美,差錯總會存在,這種差錯可能會導致在鏈路上傳輸?shù)囊粋€或者多個幀被破壞(出現(xiàn)比特差錯,0變?yōu)?,或者1變?yōu)?),從而接受方接收到錯誤的數(shù)據(jù)。為盡量提高接受方收到數(shù)據(jù)的正確率,在接收方接收數(shù)據(jù)之前需要對數(shù)據(jù)進行差錯檢測,當且僅當檢測的結(jié)果為正確時接收方才真正收下數(shù)據(jù)。檢測的方式有多種,常見的有奇偶校驗、因特網(wǎng)校驗和循環(huán)冗余校驗(CRC)等。
CRC-16碼由兩個字節(jié)構(gòu)成,在開始時CRC寄存器的每一位都預置為1,然后把CRC寄存器與8-bit的數(shù)據(jù)進行異或,之后對CRC寄存器從高到低進行移位,在最高位(MSB)的位置補零,而最低位(LSB,移位后已經(jīng)被移出CRC寄存器)如果為1,則把寄存器與預定義的多項式碼進行異或,否則如果LSB為零,則無需進行異或。重復上述的由高至低的移位8次,第一個8-bit數(shù)據(jù)處理完畢,用此時CRC寄存器的值與下一個8-bit數(shù)據(jù)異或并進行如前一個數(shù)據(jù)似的8次移位。所有的字符處理完成后CRC寄存器內(nèi)的值即為最終的CRC值。
看起來CRC生成過程還是有點復雜的,不過不必擔心,CRC已經(jīng)有成熟的程序模塊,大可不必從底層編程,本站也有CRC-16碼生成程序范例下載
CRC校驗碼除了通過程序計算得到,還可以通過查表法得到,速度比較快,深圳飛陽測控公司使用的就是查表法。