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

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

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

CAN通信協(xié)議里一種checksum校驗(yàn)和的方法

冬至子 ? 來(lái)源:知鋰 ? 作者:SW十五 ? 2023-10-31 12:58 ? 次閱讀

看到了一種checksum校驗(yàn)和的方法,分享給大家。

為什么需要checksum

前段時(shí)間分享ISO 11898內(nèi)容的時(shí)候,提到了幀結(jié)構(gòu)里的CRC場(chǎng)。

CAN信號(hào)在傳輸?shù)臅r(shí)候,有可能會(huì)因?yàn)楦蓴_、攻擊之類的原因產(chǎn)生錯(cuò)誤,比如發(fā)送方要發(fā)1,結(jié)果傳輸錯(cuò)誤,到接收方那就成0了。為了避免這種比特錯(cuò)誤,數(shù)據(jù)鏈路層做了CRC(Cyclic Redundancy Check)校驗(yàn)。

但是,CRC并不能檢測(cè)到所有的差錯(cuò),有些方式是可以騙過(guò)去的,就像黑客攻破防火墻一樣。為了盡可能保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確性,我們用的CAN通信里還增加了checksum校驗(yàn)和,checksum在傳輸層。

當(dāng)然,checksum起初被發(fā)明是因?yàn)橛行┩ㄐ诺臄?shù)據(jù)鏈路層沒(méi)有CRC,新出的一種校驗(yàn)方法。

另外,CRC和checksum只能做到無(wú)差錯(cuò)接收,而不是可靠接收。接收方如果發(fā)現(xiàn)了比特錯(cuò)誤,這幀報(bào)文不要了,那必然是少了一幀報(bào)文。為了避免這個(gè)問(wèn)題,CAN有重傳和確認(rèn)機(jī)制,接收方會(huì)發(fā)出信號(hào)告訴發(fā)送方有錯(cuò)誤,那發(fā)送方將重傳該幀報(bào)文,接收方收到后回復(fù)確認(rèn)后結(jié)束。

checksum舉例

我見(jiàn)過(guò)幾種checksum方式,下面以最近看到的一個(gè)為例。僅做分享。

圖片

checksum的計(jì)算方式

從上圖可以看出,這幀報(bào)文里Byte 0是checksum的值。checksum是所有字節(jié)模256的和的反。這里的所有字節(jié)就是Byte 1到Byte 7。

模256就是不考慮大于等于255的進(jìn)位,只做8位以內(nèi)的算術(shù)加法,即求和的值不會(huì)比255(0xFF)更大了。

那怎么做到不比255(0xFF)大呢?求和后超過(guò)255的進(jìn)位(Carry),再去求和(ADD)。這個(gè)進(jìn)位(Carry)是放到LSB(Least Significant Bit,二進(jìn)制的最低位)去求和的。

模256的和是sum,再對(duì)sum取反(inverted),得出checksum。

圖片

checksum的計(jì)算舉例

從圖里的例子可以計(jì)算,Byte 1(0x4A)+Byte 2(0x55)=0x9F,這里進(jìn)位是0。

然后0x9F+Byte 3(0x93)=0x132,這個(gè)0x132就比0xFF大了,進(jìn)位是1,那就把進(jìn)位和該字節(jié)的Bit 0~Bit 7再求和。

圖片

依次計(jì)算,最后求得sum=0x20。再取反,得出checksum=0xDF。

接收方收到數(shù)據(jù)后,算出Byte 1到Byte 7的sum,再與發(fā)送方發(fā)出的checksum(Byte 0)相加,得出0xFF就說(shuō)明該幀報(bào)文數(shù)據(jù)是正確的,可以接收。否則該幀報(bào)文棄之不用。

聲明:本文內(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)投訴
  • CAN通信
    +關(guān)注

    關(guān)注

    5

    文章

    93

    瀏覽量

    17755
  • 接收機(jī)
    +關(guān)注

    關(guān)注

    8

    文章

    1158

    瀏覽量

    53167
  • 二進(jìn)制
    +關(guān)注

    關(guān)注

    2

    文章

    761

    瀏覽量

    41476
  • CRC校驗(yàn)
    +關(guān)注

    關(guān)注

    0

    文章

    84

    瀏覽量

    15147
  • 信號(hào)傳輸
    +關(guān)注

    關(guān)注

    4

    文章

    393

    瀏覽量

    20021
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    CAN總線通信協(xié)議的基礎(chǔ)知識(shí)

    本文將介紹CAN總線通信協(xié)議的基礎(chǔ)知識(shí),目前的內(nèi)容僅為通用的協(xié)議部分,暫不涉及具體的外設(shè)模塊的用法。研究通信協(xié)議的具體內(nèi)容,主要是看建立通信
    的頭像 發(fā)表于 06-16 10:58 ?5854次閱讀
    <b class='flag-5'>CAN</b>總線<b class='flag-5'>通信協(xié)議</b>的基礎(chǔ)知識(shí)

    CAN通信協(xié)議

    CAN通信協(xié)議,需要的看看。
    發(fā)表于 04-19 17:11

    如何去設(shè)計(jì)一種點(diǎn)對(duì)點(diǎn)通信協(xié)議PPPoE模塊?

    如何去設(shè)計(jì)一種點(diǎn)對(duì)點(diǎn)通信協(xié)議PPPoE模塊?
    發(fā)表于 06-03 07:06

    STM32 CAN通信協(xié)議

    CAN 簡(jiǎn)介CAN 是控制器區(qū)域網(wǎng)絡(luò)(Controller Area Network) 的縮寫(xiě)(以下稱為CAN),是ISO國(guó)際標(biāo)準(zhǔn)化的串行通信協(xié)議。在當(dāng)前的汽車產(chǎn)業(yè)中,出于對(duì)安全性、舒
    發(fā)表于 08-19 09:31

    一種支持TTL協(xié)議設(shè)備與CAN協(xié)議設(shè)備通信的電路

    本實(shí)用新型涉及通信電路,尤其是一種支持TTL協(xié)議設(shè)備與CAN協(xié)議設(shè)備通信的電路。背景技術(shù):
    發(fā)表于 08-23 08:31

    一種高效的串行通信協(xié)議的制定及實(shí)現(xiàn)

    一種高效的串行通信協(xié)議的制定及實(shí)現(xiàn)
    發(fā)表于 11-09 18:08 ?56次下載

    基于雙CAN總線的數(shù)字伺服通信協(xié)議

    基于雙CAN總線的數(shù)字伺服通信協(xié)議
    發(fā)表于 09-01 14:25 ?8次下載
    基于雙<b class='flag-5'>CAN</b>總線的數(shù)字伺服<b class='flag-5'>通信協(xié)議</b>

    CAN總線通信協(xié)議的分析和實(shí)現(xiàn) CAN總線通信協(xié)議以及其實(shí)現(xiàn)方法

    CAN總線通信協(xié)議的分析和實(shí)現(xiàn) CAN總線通信協(xié)議以及其實(shí)現(xiàn)方法
    發(fā)表于 09-04 08:45 ?40次下載
    <b class='flag-5'>CAN</b>總線<b class='flag-5'>通信協(xié)議</b>的分析和實(shí)現(xiàn) <b class='flag-5'>CAN</b>總線<b class='flag-5'>通信協(xié)議</b>以及其實(shí)現(xiàn)<b class='flag-5'>方法</b>

    一種輕量級(jí)的通信協(xié)議 - MAVLink

    一種輕量級(jí)的通信協(xié)議 - MAVLink
    的頭像 發(fā)表于 03-12 14:14 ?4422次閱讀
    <b class='flag-5'>一種</b>輕量級(jí)的<b class='flag-5'>通信協(xié)議</b> -  MAVLink

    CAN總線通信協(xié)議

    CAN總線通信協(xié)議詳細(xì)如下。
    發(fā)表于 04-19 16:54 ?77次下載

    CAN入門(mén)書(shū)之中文版CAN通信協(xié)議

    CAN入門(mén)書(shū)之中文版CAN通信協(xié)議
    發(fā)表于 11-18 16:36 ?0次下載

    個(gè)簡(jiǎn)單的基礎(chǔ)通信協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)

    之間的數(shù)據(jù)的穩(wěn)定傳輸,通信協(xié)議的設(shè)計(jì)需要考慮很多的問(wèn)題。當(dāng)然應(yīng)對(duì)不同的應(yīng)用場(chǎng)景,可以有針對(duì)性的設(shè)計(jì)不同的通信協(xié)議。一種常見(jiàn)的通信協(xié)議格式這是一種
    發(fā)表于 12-14 18:38 ?10次下載
    <b class='flag-5'>一</b>個(gè)簡(jiǎn)單的基礎(chǔ)<b class='flag-5'>通信協(xié)議</b>的設(shè)計(jì)與實(shí)現(xiàn)

    can總線的通信協(xié)議有哪些 CAN接口保護(hù)及工作原理

    CAN總線(Controller Area Network)是一種廣泛應(yīng)用于汽車、工業(yè)自動(dòng)化和其他領(lǐng)域的串行通信協(xié)議。以下是幾種常見(jiàn)的CAN總線通信
    的頭像 發(fā)表于 08-18 14:40 ?2.1w次閱讀
    <b class='flag-5'>can</b>總線的<b class='flag-5'>通信協(xié)議</b>有哪些 <b class='flag-5'>CAN</b>接口保護(hù)及工作原理

    CAN通信協(xié)議中有哪幾種幀類型?CAN通信中幀格式的作用

    CAN通信協(xié)議中有四幀類型,分別是數(shù)據(jù)幀、遠(yuǎn)程幀、錯(cuò)誤幀和過(guò)載幀。
    的頭像 發(fā)表于 01-30 09:18 ?4343次閱讀

    can通信協(xié)議主要由什么完成

    CAN(Controller Area Network)是一種基于消息的通信協(xié)議,主要用于汽車和工業(yè)領(lǐng)域。它是一種局域網(wǎng)技術(shù),允許多個(gè)設(shè)備在同
    的頭像 發(fā)表于 06-16 10:29 ?402次閱讀