軟件工程師有一個(gè)非常樂觀的壞習(xí)慣。這種樂觀情緒通常不僅包括他們對(duì)完成特定任務(wù)需要多長時(shí)間的計(jì)算,還包括他們系統(tǒng)的潛在故障模式。如果它在工作臺(tái)上工作,假設(shè)它也將在現(xiàn)場工作,無論該現(xiàn)場是在嘈雜的制造車間還是繞地球運(yùn)行。不幸的是,這些假設(shè)是樂觀的,其中最大的假設(shè)之一是數(shù)據(jù)始終有效。我曾經(jīng)參與過一個(gè)項(xiàng)目,其中來自傳感器的數(shù)據(jù)被破壞,無法驗(yàn)證傳感器數(shù)據(jù)是否正確。今天的文章將探討嵌入式開發(fā)人員在數(shù)據(jù)完整性方面幾種方法。
提示 #1 – 至少使用奇偶校驗(yàn)
奇偶校驗(yàn)是一種數(shù)據(jù)完整性機(jī)制,它查看數(shù)據(jù)流中 1 的數(shù)量,然后調(diào)整奇偶校驗(yàn)位以使 1
的總數(shù)為奇數(shù)或偶數(shù)。例如,假設(shè)傳感器傳輸 16 位寬且奇校驗(yàn)的數(shù)據(jù)消息。其中一位,通常是最低有效位 (LSB)
將用于設(shè)置奇偶校驗(yàn)。如果要發(fā)送的數(shù)據(jù)是:
1000 1000 1000 100x
然后為了奇校驗(yàn),將 x 設(shè)置為 1,這樣數(shù)據(jù)中有五個(gè) 1。如果奇偶校驗(yàn)是偶數(shù),那么 x 將被設(shè)置為 0,因?yàn)閿?shù)據(jù)中已經(jīng)有四個(gè)
1。
奇偶校驗(yàn)適用于檢測單個(gè)位翻轉(zhuǎn)。如果零變成一或一變成零,則可以檢測到奇偶校驗(yàn)錯(cuò)誤。但是,如果兩個(gè)或更多位翻轉(zhuǎn),則可能無法檢測到錯(cuò)誤。對(duì)于這種情況,需要更強(qiáng)大的技術(shù)。
提示 #2 – 使用校驗(yàn)和
校驗(yàn)和是一種算法,旨在檢測數(shù)據(jù)集中自然或隨機(jī)發(fā)生的錯(cuò)誤。通常在一組數(shù)據(jù)上計(jì)算校驗(yàn)和,然后得出數(shù)據(jù)的校驗(yàn)和。數(shù)據(jù)集通常包含數(shù)據(jù)中的校驗(yàn)和,因此在計(jì)算校驗(yàn)和時(shí)會(huì)忽略這些字節(jié)。然后將計(jì)算出的校驗(yàn)和與數(shù)據(jù)附帶的校驗(yàn)和進(jìn)行比較,以查看它們是否匹配。
重要的是要認(rèn)識(shí)到并非所有校驗(yàn)和都相同,并且可以檢測到不同的錯(cuò)誤。例如,一個(gè)校驗(yàn)和可能能夠檢測到單個(gè)位已經(jīng)改變,但不同的校驗(yàn)和可能能夠檢測幾個(gè)位是否同時(shí)改變。僅僅因?yàn)榘l(fā)現(xiàn)校驗(yàn)和匹配并不能保證數(shù)據(jù)中沒有錯(cuò)誤!校驗(yàn)和也擅長檢測隨機(jī)錯(cuò)誤,但不一定會(huì)檢測到故意更改,例如有人試圖破壞系統(tǒng)。嵌入式開發(fā)人員需要仔細(xì)選擇他們選擇用于其應(yīng)用程序的校驗(yàn)和。
提示 #3 – 使用循環(huán)冗余校驗(yàn) (CRC)
CRC實(shí)際上是一個(gè)校驗(yàn)和,但它是一種非常特殊的校驗(yàn)和。CRC
是使用多項(xiàng)式除法計(jì)算校驗(yàn)和的校驗(yàn)和??梢韵胂螅谇度胧较到y(tǒng)上,尤其是基于微控制器的嵌入式系統(tǒng)上,執(zhí)行多項(xiàng)式除法的計(jì)算成本很高!不過,還有一些額外的好處,即
CRC 可以檢測到比簡單校驗(yàn)和更大范圍的錯(cuò)誤。CRC 非常有效,以至于許多微控制器供應(yīng)商將包括一個(gè)基于硬件的 CRC 計(jì)算器,以允許開發(fā)人員有效地使用
CRC。不幸的是,它是否包含在內(nèi)是非常偶然的,因此開發(fā)人員需要仔細(xì)閱讀他們的微控制器數(shù)據(jù)表。
結(jié)論
在數(shù)據(jù)收集和分析不斷增長的世界中,嵌入式開發(fā)人員要意識(shí)到我們的系統(tǒng)無法信任總線上的每一點(diǎn)數(shù)據(jù)。電磁干擾、宇宙射線和其他來源可能導(dǎo)致位翻轉(zhuǎn)并損壞。如果沒有某種機(jī)制來檢測這些位翻轉(zhuǎn),則可能會(huì)對(duì)數(shù)據(jù)采取行動(dòng),雖然在許多情況下這沒什么大不了的,但有時(shí)它可能對(duì)系統(tǒng)造成災(zāi)難性影響。我們今天討論的三種技術(shù)簡單且易于實(shí)施,并且可以對(duì)進(jìn)出系統(tǒng)的所有數(shù)據(jù)進(jìn)行簡單的完整性檢查。