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

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

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

CAPL編程的進(jìn)階應(yīng)用 | Checksum算法的實(shí)現(xiàn)

北匯信息POLELINK ? 2022-10-11 09:29 ? 次閱讀

作者:北城舊巷
小編:吃不飽

CRC與Checksum區(qū)別

相信大家在CAN Msg或者ETH PDU中經(jīng)常會看到Checksum這種信號。提到Checksum,就必須要說明一下CRC校驗(yàn),很多工程師會概念混淆,認(rèn)為兩者是同一個(gè)東西,實(shí)則它們有很大的區(qū)別。

01

兩者存放位置不同

CRC校驗(yàn):循環(huán)冗余檢查(CRC)是一種數(shù)據(jù)傳輸檢錯(cuò)功能,對數(shù)據(jù)進(jìn)行多項(xiàng)式計(jì)算,并將得到的結(jié)果附在幀的后面,接收設(shè)備也執(zhí)行類似的算法,以保證數(shù)據(jù)傳輸?shù)恼_性和完整性。通過CRC概念可以得知,CRC存放在CRC場,而Checksum存放在數(shù)據(jù)場之中,一般在數(shù)據(jù)場的第一個(gè)字節(jié)或者最后一個(gè)字節(jié)。
28fc3230-486e-11ed-b116-dac502259ad0.png圖1 標(biāo)準(zhǔn)數(shù)據(jù)幀格式

02

兩者應(yīng)用場景不同

在CAN報(bào)文幀中,CRC校驗(yàn)是發(fā)送器根據(jù)發(fā)送的bit進(jìn)行多項(xiàng)式計(jì)算校驗(yàn),結(jié)果放在15bit長度的CRC位。接收器也是用相同的多項(xiàng)式計(jì)算總線上的數(shù)據(jù),與接收到的校驗(yàn)值進(jìn)行比較,相同則表示幀正確接收,并在ACK時(shí)隙中發(fā)送顯性狀態(tài),覆蓋發(fā)送器的隱性位;如果不同接收節(jié)點(diǎn)在ACK界定符之后發(fā)送錯(cuò)誤幀。
292be750-486e-11ed-b116-dac502259ad0.png圖2 CRC校驗(yàn)原理CRC校驗(yàn)是為了保證數(shù)據(jù)從一個(gè)CAN收發(fā)器發(fā)送到另外一個(gè)收發(fā)器的信號完整性,而數(shù)據(jù)場中Checksum校驗(yàn)算法是為了校驗(yàn)數(shù)據(jù)被正確的打包與解包,并且Checksum算法是可以自行制定的,計(jì)算規(guī)則的靈活度高。

Checksum的應(yīng)用場景

對于Checksum而言,它的應(yīng)用場景有以下三點(diǎn):

01

確保數(shù)據(jù)正確打包

有些ECU內(nèi)部的變量在傳遞到CAN收發(fā)器之前就有可能發(fā)生錯(cuò)誤,這種類型的錯(cuò)誤CAN收發(fā)器是無法檢測到的。報(bào)文中的信號和Checksum校驗(yàn)是在應(yīng)用層完成的,將報(bào)文中的各個(gè)字節(jié)進(jìn)行校驗(yàn),報(bào)文和Checksum一起發(fā)送,并且在接收節(jié)點(diǎn)進(jìn)行解析,從而確保數(shù)據(jù)鏈路完整和數(shù)據(jù)正確打包。

01

實(shí)現(xiàn)數(shù)據(jù)加密

CAN網(wǎng)絡(luò)是開放性的,CAN節(jié)點(diǎn)可以隨時(shí)加入到總線當(dāng)中,為了保證通信的安全性,ECU傳輸?shù)年P(guān)鍵控制信號需要進(jìn)行加密,報(bào)文的發(fā)送方和接收方使用相同的Checksum算法作為數(shù)據(jù)加密的密鑰。接收方對比秘鑰,如果不同,此條報(bào)文的數(shù)據(jù)不被使用,從而避免被其他節(jié)點(diǎn)的數(shù)據(jù)影響。Checksum算法不在DBC等數(shù)據(jù)庫文件中說明,可以單獨(dú)保密,從而確保了數(shù)據(jù)的加密。

03

提高數(shù)據(jù)的可信度

一幀報(bào)文在多個(gè)字節(jié)中可能出現(xiàn)位錯(cuò)誤,一般情況下CRC8校驗(yàn)的錯(cuò)誤率為1/256,crc16校驗(yàn)的錯(cuò)誤率為1/65536,crc32校驗(yàn)的錯(cuò)誤率為1/(65536*65536)。通過Checksum校驗(yàn)可以提高數(shù)據(jù)的可信度。由于Checksum的作用,其也常應(yīng)用在車載以太網(wǎng)當(dāng)中。

在CAPL中Checksum信號實(shí)現(xiàn)

通常情況下,Checksum和LiveCounter信號是成對出現(xiàn)的。在CANoe中使用仿真節(jié)點(diǎn)與真實(shí)控制器交互,需要將LiveCounter和Checksum信號仿真,這樣才能成功通信。LiveCounter長度為4bit,它是用于報(bào)文發(fā)送計(jì)數(shù)的生命信號,每發(fā)送一幀報(bào)文后就對該LiveCounter位加1,會在0~15之間循環(huán)增加。在報(bào)文其他信號沒有改變時(shí),LiveCounter實(shí)時(shí)更新使得Checksum信號跟著更新,提高校驗(yàn)的準(zhǔn)確性。那么LiveCounter信號該如何仿真呢?下面以CAN總線DBC為例,介紹在CAPL中實(shí)現(xiàn)LiveCounter和Checksum校驗(yàn)仿真。

CAPL是CANoe和CANalyzer中可用的類C的編程語言。CAPL中程序塊的執(zhí)行由事件控制,在專用的編譯器中開發(fā)和編譯,這樣可以訪問數(shù)據(jù)庫中的所有對象以及系統(tǒng)變量,被汽車電子工程師們廣泛使用。

下圖為LiveCounter計(jì)算的代碼,為了保證數(shù)據(jù)的準(zhǔn)確性,進(jìn)行一次Checksum計(jì)算,這樣就可以實(shí)現(xiàn)LiveCounter信號的仿真。
294e6bfe-486e-11ed-b116-dac502259ad0.png圖3 LiveCounter計(jì)算代碼下圖為示例報(bào)文中各個(gè)信號位置排布關(guān)系,在此報(bào)文中,Checksum校驗(yàn)方式為前七個(gè)字節(jié)異或運(yùn)算,將運(yùn)算結(jié)果存放到最后一個(gè)字節(jié)。排布圖中共有8個(gè)信號,它們的格式為Motorola格式,也就是俗稱的大端模式。
296dd994-486e-11ed-b116-dac502259ad0.png圖4 報(bào)文中信號排布

CAPL只能訪問到報(bào)文中的信號,無法訪問到報(bào)文中的每個(gè)字節(jié),要進(jìn)行Checksum計(jì)算,需要根據(jù)信號排布把前七個(gè)字節(jié)的真實(shí)值重新組合存放在一個(gè)byte類型的數(shù)組當(dāng)中,然后對這個(gè)數(shù)組異或運(yùn)算獲取的結(jié)果為該報(bào)文中Checksum信號值。

對于不同長度的信號,需要聲明不同類型的數(shù)組來存放不同的信號。byte類型長度為1字節(jié),聲明兩個(gè)byte *[8]類型的數(shù)組(*為省略的數(shù)組名稱)分別存放長度小于一字節(jié)的信號和重組后每個(gè)字節(jié)的真實(shí)值;int類型長度為2字節(jié),聲明int *[8]類型的數(shù)組存放長度為1-2字節(jié)的信號;long類型長度為4字節(jié),聲明long *[8]類型的數(shù)組存放長度為2-4字節(jié)的信號。下圖為Checksum中信號長度小于1字節(jié)的字節(jié)重組示例代碼。
29a81b4a-486e-11ed-b116-dac502259ad0.png圖5 Checksum字節(jié)重組示例代碼另外,參與Checksum計(jì)算的是信號的真實(shí)值而不是物理值,如果信號中有偏移量和比例因子,在賦值時(shí)需要將信號加上偏移量,并除以比例因子以獲得真實(shí)值。
2a24616e-486e-11ed-b116-dac502259ad0.png圖6 信號描述為了保證和真實(shí)控制器通信正常,Checksum數(shù)據(jù)必須準(zhǔn)確,Checksum計(jì)算步驟一般寫成無返回值函數(shù)(void),在LiveCounter信號改變或者其他信號改變時(shí)調(diào)用計(jì)算。正確計(jì)算的LiveCounter和Checksum信號曲線如下圖所示。
2a3c4aea-486e-11ed-b116-dac502259ad0.png圖7 LiveCounter和Checksum信號曲線

總結(jié)

本文重點(diǎn)描述了CRC和Checksum信號的區(qū)別以及Checksum信號在CAPL中實(shí)現(xiàn)的方法。CAPL編程作為CANoe的靈魂,使CANoe滿足仿真、分析、測試和診斷的各種復(fù)雜的要求,同時(shí)使CANoe的功能得以不斷擴(kuò)展。
北匯信息作為Vector中國的合作伙伴,致力于為中國汽車客戶提供優(yōu)質(zhì)的工具支持、解決方案以及測試服務(wù)。

注:圖片來自于Vector。

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

    關(guān)注

    88

    文章

    3649

    瀏覽量

    94312
收藏 人收藏

    評論

    相關(guān)推薦

    FOC 算法實(shí)現(xiàn)永磁同步電機(jī)調(diào)整指南

    本文檔介紹了使用 FOC 算法實(shí)現(xiàn)永磁同步電機(jī) (Permanent Magnet SynchronousMotor,PMSM)調(diào)整所需的步驟和設(shè)置,該算法如 AN1078《PMSM 電機(jī)的無傳感器
    發(fā)表于 03-03 01:53

    PID控制算法的C語言實(shí)現(xiàn):PID算法原理

    在工業(yè)應(yīng)用中 PID 及其衍生算法是應(yīng)用最廣泛的算法之一,是當(dāng)之無愧的萬能算法,如果能夠熟練掌握 PID 算法的設(shè)計(jì)與實(shí)現(xiàn)過程,對于一般的研
    發(fā)表于 02-26 15:24

    請問ads1292算法支持實(shí)現(xiàn)疲勞監(jiān)測嗎?

    請問ads1292算法支持實(shí)現(xiàn)疲勞監(jiān)測么,或者有什么更好的電極式其它方案來實(shí)現(xiàn)
    發(fā)表于 12-03 06:19

    Vector推出一套基于Visual Studio Code的免費(fèi)插件

    在汽車軟件開發(fā)過程中,除使用MATLAB開發(fā)算法外,專業(yè)開發(fā)者也偏向使用Visual Studio Code來開發(fā)代碼,其中軟件測試用例的編寫是確保系統(tǒng)穩(wěn)定性和可靠性的重要環(huán)節(jié)。傳統(tǒng)的CAPL腳本
    的頭像 發(fā)表于 11-24 14:15 ?893次閱讀
    Vector推出一套基于Visual Studio Code的免費(fèi)插件

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+內(nèi)容簡介

    內(nèi)容簡介這是一本深入解讀基礎(chǔ)算法及其電路設(shè)計(jì),以打通算法研發(fā)到數(shù)字IC設(shè)計(jì)的實(shí)現(xiàn)屏障,以及指導(dǎo)芯片設(shè)計(jì)工程師從底層掌握復(fù)雜電路設(shè)計(jì)與優(yōu)化方法為目標(biāo)的專業(yè)技術(shù)書。任何芯片(如WiFi芯片、5G芯片
    發(fā)表于 11-21 17:14

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+介紹基礎(chǔ)硬件算法模塊

    作為嵌入式開發(fā)者往往比較關(guān)注硬件和軟件的協(xié)調(diào)。本書介紹了除法器,信號發(fā)生器,濾波器,分頻器等基本算法的電路實(shí)現(xiàn),雖然都是基礎(chǔ)內(nèi)容,但是也是最常用到的基本模塊。 隨著逆全球化趨勢的出現(xiàn),過去的研發(fā)
    發(fā)表于 11-21 17:05

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+一本介紹基礎(chǔ)硬件算法模塊實(shí)現(xiàn)的好書

    作為嵌入式開發(fā)者往往比較關(guān)注硬件和軟件的協(xié)調(diào)。本書介紹了除法器,信號發(fā)生器,濾波器,分頻器等基本算法的電路實(shí)現(xiàn),雖然都是基礎(chǔ)內(nèi)容,但是也是最常用到的基本模塊,本書的內(nèi)容比較對本人胃口。 我們先來
    發(fā)表于 11-20 13:42

    名單公布!【書籍評測活動NO.46】從算法到電路 | 數(shù)字芯片算法的電路實(shí)現(xiàn)

    :elecfans123)領(lǐng)取書籍進(jìn)行評測,如在5個(gè)工作日內(nèi)未聯(lián)系,視為放棄本次試用評測資格! 《從算法到電路——數(shù)字芯片算法的電路實(shí)現(xiàn)》 是一本深入解讀基礎(chǔ)算法及其電路設(shè)計(jì),以打通
    發(fā)表于 10-09 13:43

    C加密算法實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《C加密算法實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 09-20 11:10 ?1次下載
    C加密<b class='flag-5'>算法</b>的<b class='flag-5'>實(shí)現(xiàn)</b>

    TI電量計(jì)Checksum功能的介紹

    電子發(fā)燒友網(wǎng)站提供《TI電量計(jì)Checksum功能的介紹.pdf》資料免費(fèi)下載
    發(fā)表于 09-05 11:19 ?0次下載
    TI電量計(jì)<b class='flag-5'>Checksum</b>功能的介紹

    神經(jīng)網(wǎng)絡(luò)的基本原理及Python編程實(shí)現(xiàn)

    神經(jīng)網(wǎng)絡(luò)作為深度學(xué)習(xí)算法的基本構(gòu)建模塊,模擬了人腦的行為,通過互相連接的節(jié)點(diǎn)(也稱為“神經(jīng)元”)實(shí)現(xiàn)對輸入數(shù)據(jù)的處理、模式識別和結(jié)果預(yù)測等功能。本文將深入探討神經(jīng)網(wǎng)絡(luò)的基本原理,并結(jié)合Python編程
    的頭像 發(fā)表于 07-03 16:11 ?928次閱讀

    FPGA能實(shí)現(xiàn)什么樣的算法?

    FPGA功能如此強(qiáng)大,請問用FPGA能實(shí)現(xiàn)或者比較適合實(shí)現(xiàn)什么樣的算法
    發(fā)表于 05-26 20:18

    UM0560手冊上說明發(fā)送數(shù)據(jù)時(shí)的checksum XOR (N,[N+1 data bytes])是什么意思?

    想用STM8S自帶的bootloader 通過CAN升級軟件,有誰知道UM0560手冊上說明發(fā)送數(shù)據(jù)時(shí)的checksum XOR (N,[N+1 data bytes])是什么意思?如果發(fā)送128個(gè)數(shù)據(jù)這個(gè)checksum=XOR(127^128),還是最后2個(gè)數(shù)據(jù)異或?
    發(fā)表于 04-07 07:40

    CAPL腳本使用介紹

    CAPL中也有類似于C語言中的回調(diào)函數(shù)的機(jī)制,如檢測報(bào)文周期和錯(cuò)誤幀的函數(shù)中就可以使用,當(dāng)周期超界或者總線出現(xiàn)錯(cuò)誤幀就會自動調(diào)用回調(diào)函數(shù)執(zhí)行一些操作
    的頭像 發(fā)表于 04-01 11:23 ?2817次閱讀

    使用ST-LINK Utility進(jìn)行編程勾選Full Flash Memory Checksum和設(shè)置讀出保護(hù)后LSE不起振的原因?

    使用ST-LINK Utility對F105RB進(jìn)行編程,在編程中勾選了Full Flash Memory Checksum,最后操作OP字節(jié)設(shè)置讀出保護(hù),發(fā)現(xiàn)LSE晶振不起振了,而沒有勾選的全部
    發(fā)表于 03-12 06:35

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品