兩種MCU間的串行通信協(xié)議設(shè)計
2.2 軟件設(shè)計
2.2.1數(shù)據(jù)幀解析
Cortex-M3側(cè)和C51側(cè)采用同樣的數(shù)據(jù)幀格式,以簡化編程的難度,增強程序的可移植性。數(shù)據(jù)幀由起始標識符、數(shù)據(jù)長度、類型ID、通信內(nèi)容、循環(huán)冗余校驗碼構(gòu)成,如圖2所示。本文引用地址:http://m.butianyuan.cn/article/156421.htm
(1)起始標識符
起始標識符的作用主要是用于定界,把不同的數(shù)據(jù)幀在一連串的數(shù)據(jù)中分離開來。起始標識符內(nèi)的數(shù)據(jù)不能與數(shù)據(jù)幀中可能出現(xiàn)的任何數(shù)據(jù)相同,否則會引起歧義,導致定界失敗,造成數(shù)據(jù)錯誤。在本例中,為2個字節(jié),選用0xFF+0xAA,因為該組合與其他數(shù)據(jù)具有排他性,不會引起歧義。
(2)數(shù)據(jù)長度
數(shù)據(jù)長度的計算方法為,從該位開始,到最后一個數(shù)據(jù)位結(jié)束,也就是CRC校驗位之前的一個字節(jié)。雖然使用Length位可以表示很長的數(shù)據(jù)幀,但在應(yīng)用中應(yīng)盡量采用短幀,以避免各種干擾因素造成少數(shù)數(shù)據(jù)位出錯,導致大量數(shù)據(jù)無效,影響通信效率。同時,應(yīng)該設(shè)置一個最大發(fā)送長度,以便設(shè)置超時重傳計時器的值。本例采用1個字節(jié),最大幀長為260個字節(jié)。
(3)類型ID
根據(jù)實際需要,類型ID可以采用1個或多個字節(jié),用于表示該數(shù)據(jù)幀的作用類型。本例中,采用1個字節(jié),可以表示256種作用類型,例如設(shè)備參數(shù)幀(如音量)、線路探測幀或應(yīng)答幀。
(4)通信內(nèi)容
通信內(nèi)容與類型ID結(jié)合,表達特定意義。相同的Data,但ID不同的話,表達的信息不一樣。根據(jù)不同的ID,Data的長度可能會有所不同。
(5)循環(huán)冗余校驗碼
循環(huán)冗余校驗碼用于校驗接收到的數(shù)據(jù)是否在傳輸過程中出錯。本例中采用CRC-16算法,占2個字節(jié),對從起始標識符開始到最后一個通信內(nèi)容位的所有數(shù)據(jù)進行運算,把得到的結(jié)果附在最后。
評論