串行數(shù)據(jù)在傳輸過程中,由于干擾可能引起信息的出錯,例如,傳輸字符‘E’,其各位為:
0100,0101=45H
D7D0
由于干擾,可能使位變?yōu)?,這種情況,我們稱為出現(xiàn)了“誤碼”。我們把如何發(fā)現(xiàn)傳輸中的錯誤,叫“檢錯”。發(fā)現(xiàn)錯誤后,如何消除錯誤,叫“糾錯”。
最簡單的檢錯方法是“奇偶校驗”,即在傳送字符的各位之外,再傳送1位奇/偶校驗位?刹捎闷嫘r灮蚺夹r。
奇校驗:所有傳送的數(shù)位(含字符的各數(shù)位和校驗位)中,“1”的個數(shù)為奇數(shù),如:
10110,0101
00110,0001
偶校驗:所有傳送的數(shù)位(含字符的各數(shù)位和校驗位)中,“1”的個數(shù)為偶數(shù),如:
10100,0101
00100,0001
奇偶校驗?zāi)軌驒z測出信息傳輸過程中的部分誤碼(1位誤碼能檢出,2位及2位以上誤碼不能檢出),同時,它不能糾錯。在發(fā)現(xiàn)錯誤后,只能要求重發(fā)。但由于其實現(xiàn)簡單,仍得到了廣泛使用。
為了能檢測和糾正內(nèi)存軟錯誤,首先出現(xiàn)的是內(nèi)存“奇偶校驗”。內(nèi)存中最小的單位是比特,也稱為“位”,位有只有兩種狀態(tài)分別以1和0來標(biāo)示,每8個連續(xù)的比特叫做一個字節(jié)(byte)。不帶奇偶校驗的內(nèi)存每個字節(jié)只有8位,如果其某一位存儲了錯誤的值,就會導(dǎo)致其存儲的相應(yīng)數(shù)據(jù)發(fā)生變化,進(jìn)而導(dǎo)致應(yīng)用程序發(fā)生錯誤。而奇偶校驗就是在每一字節(jié)(8位)之外又增加了一位作為錯誤檢測位。在某字節(jié)中存儲數(shù)據(jù)之后,在其8個位上存儲的數(shù)據(jù)是固定的,因為位只能有兩種狀態(tài)1或0,假設(shè)存儲的數(shù)據(jù)用位標(biāo)示為1、1、1、0、0、1、0、1,那么把每個位相加(1+1+1+0+0+1+0+1=5),結(jié)果是奇數(shù)。對于偶校驗,校驗位就定義為1,反之則為0;對于奇校驗,則相反。當(dāng)CPU讀取存儲的數(shù)據(jù)時,它會再次把前8位中存儲的數(shù)據(jù)相加,計算結(jié)果是否與校驗位相一致。從而一定程度上能檢測出內(nèi)存錯誤,奇偶校驗只能檢測出錯誤而無法對其進(jìn)行修正,同時雖然雙位同時發(fā)生錯誤的概率相當(dāng)?shù),但奇偶校驗卻無法檢測出雙位錯誤。
奇偶監(jiān)督碼是一種增加二進(jìn)制傳輸系統(tǒng)最小距離的簡單和廣泛采用的方法。例如,單個的奇偶監(jiān)督將使碼的最小距離由一增加到二。
一個二進(jìn)碼字,如果它的碼元有奇數(shù)個1,就稱為具有奇性。例如,碼字“1011010111”有七個1,因此,這個碼字具有奇性。同樣,偶性碼字具有偶數(shù)個1。注意奇性檢測等效于所有碼元的模二加,并能夠由所有碼元的異或運算來確定。對于一個n位字,奇性由式(8-1)給出:
奇性=a0