新聞中心

EEPW首頁 > 網(wǎng)絡(luò)與存儲 > 設(shè)計應(yīng)用 > SPI接口與CRC算法在雙DSP數(shù)據(jù)通信中的應(yīng)用

SPI接口與CRC算法在雙DSP數(shù)據(jù)通信中的應(yīng)用

作者: 時間:2011-02-27 來源:電子產(chǎn)品世界 收藏

  從機發(fā)送/主機接收的驅(qū)動設(shè)計

本文引用地址:http://butianyuan.cn/article/117273.htm

  (1) 從機發(fā)送數(shù)據(jù)的驅(qū)動設(shè)計。當(dāng)從機的發(fā)送FIFO為空時,將觸發(fā)并進(jìn)入發(fā)送中斷服務(wù)函數(shù), 在此函數(shù)中將待發(fā)送的16字?jǐn)?shù)據(jù)寫入發(fā)送FIFO,然后向主機發(fā)出接收申請。

  (2) 主機接收數(shù)據(jù)的驅(qū)動設(shè)計。在確知從機已將待發(fā)送的數(shù)據(jù)寫入發(fā)送FIFO之后,主機即向從機發(fā)送一幀無效數(shù)據(jù),目的是提供從機發(fā)送數(shù)據(jù)所需的同步時鐘。與此同時,主機可接收到自從機發(fā)出的16字?jǐn)?shù)據(jù),并觸發(fā)接收中斷,在相應(yīng)的中斷服務(wù)函數(shù)中將數(shù)據(jù)讀出即可。

  通信協(xié)議的設(shè)計與實現(xiàn)

  協(xié)議的內(nèi)容與實現(xiàn)

  (1) 數(shù)據(jù)幀格式。主機與從機遵循相同的幀格式。每個數(shù)據(jù)幀長度為32字節(jié),其中前30字節(jié)為有效數(shù)據(jù),后兩字節(jié)為前30字節(jié)的校驗碼。

  (2) 主機的收/發(fā)機制。主機的收/發(fā)流程如圖4所示。在主機中啟動定時器中斷功能,在定時中斷服務(wù)函數(shù)中讀取MRE和SE信號的狀態(tài)。其中SE信號標(biāo)識了從機對前一數(shù)據(jù)幀的校驗結(jié)果,為0表示校驗失敗,當(dāng)主機讀取到此狀態(tài)時,就將前一數(shù)據(jù)幀重發(fā);MRE信號標(biāo)識了從機的待發(fā)數(shù)據(jù)準(zhǔn)備狀態(tài),為0表示從機已將待發(fā)送的一幀數(shù)據(jù)寫入發(fā)送FIFO,主機讀取到此狀態(tài)時,應(yīng)立即啟動接收操作,當(dāng)主機接收到一幀新的數(shù)據(jù)時,應(yīng)立即對齊進(jìn)行校驗,并根據(jù)校驗結(jié)果設(shè)置MCRCE信號的狀態(tài),作為從機是否重發(fā)的依據(jù)。

  (3) 從機的收/發(fā)機制。從機的收/發(fā)流程如圖4所示。在從機中啟動定時器中斷功能,在定時中斷服務(wù)函數(shù)中讀取MCRCE信號的狀態(tài),此信號標(biāo)識了主機對前一數(shù)據(jù)幀的校驗結(jié)果,為0表示校驗失敗,從機讀取到此狀態(tài)時應(yīng)將前一數(shù)據(jù)幀重發(fā)。若不需重發(fā),則繼續(xù)發(fā)送新的數(shù)據(jù)幀。當(dāng)從機將待發(fā)送的數(shù)據(jù)幀寫入發(fā)送FIFO后,立即將MRE信號置為0,請求主機接收;當(dāng)從機接收到新的數(shù)據(jù)幀后,立即進(jìn)行校驗,若校驗失敗,則將SCRCE信號置為0,請求主機將前一數(shù)據(jù)幀重發(fā)。

  基于CRC算法的校驗機制

  協(xié)議將數(shù)據(jù)幀全部視作有效數(shù)據(jù),使用同步時鐘協(xié)調(diào)雙方的發(fā)送/接收,實現(xiàn)數(shù)據(jù)的正確傳輸。為進(jìn)一步提高通信雙方的差錯檢測能力,帶來更高的可靠性保障,在接收方引入了數(shù)據(jù)校驗機制??紤]到CRC (Cyclic Redundancy Check) 算法誤碼檢測能力強且易于實現(xiàn)[5],本系統(tǒng)使用CRC算法實現(xiàn)接收方的數(shù)據(jù)幀校驗。

  CRC校驗的原理可概括如下:被校驗的n位數(shù)據(jù)塊可看作是n階二進(jìn)制多項式m(x)=an-1xn-1 + an-2xn-2 + ? + a1x + a0,發(fā)送方和接收方約定一個r階的生成多項式g(x),發(fā)送方以xrm(x)為被除數(shù),以g(x)為除數(shù),做除法運算,得到余數(shù)多項式y(tǒng)(x)即為m(x)的校驗碼,將該校驗碼附在n位數(shù)據(jù)塊之后一并發(fā)送至接收方。接收方以接收到的數(shù)據(jù)多項式為被除數(shù),以g(x)為除數(shù),做除法運算,若余數(shù)為0,證明校驗成功,否則校驗失敗。

  為提高計算效率,本系統(tǒng)采用一種基于查表機制的并行處理方法。

  首先選擇生成多項式g(x),考慮到CRC-16國際標(biāo)準(zhǔn)工程實用價值較高,此處也采用該標(biāo)準(zhǔn),此時g(x)=x16 + x15 + x2 + 1。將所有單字節(jié)數(shù)據(jù)的CRC-16校驗碼提前計算出來,存于表中待查。

  將待校驗的數(shù)據(jù)塊(長度為30字節(jié))看作是多字節(jié)序列,取第一個字節(jié)B30并查表得其兩字節(jié)余式,將此余式的高字節(jié)與B29做模2加運算,低字節(jié)與B28做模2加運算,分別得結(jié)果B*29和B*28,并得到新的多字節(jié)序列< B*29 B*28?B3B2B1>,再取B*29重復(fù)進(jìn)行上述操作,得新的多字節(jié)序列< B**28B*27?B3B2B1>,如此往復(fù),直到最后多字節(jié)序列變?yōu)?lt; B*2B1>,將此序列左移16位得< B*2B100>,取B*2并查表得其兩字節(jié)余式,將此余式的高字節(jié)與B1做模2加運算,低字節(jié)與0做模2加運算,分別得結(jié)果B*1和C*2,得新的序列< B*1C*20>,再重復(fù)此操作,可得雙字節(jié)序列< C**2C1>,此即序列的CRC-16校驗碼。

  將此校驗碼附于之后,一并發(fā)送至接收方;接收方對全部32字節(jié)的數(shù)據(jù)序列進(jìn)行上述CRC-16編碼運算,若余式為0則認(rèn)為校驗成功,否則證明傳輸過程中有丟碼或誤碼。

通信相關(guān)文章:通信原理




關(guān)鍵詞: SPI CRC 201102

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉