《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > 兩種MCU間的串行通信協(xié)議設計
兩種MCU間的串行通信協(xié)議設計
林漢成,胡方明,王群澤,吳圣陶,熊 鑫
摘要: Cortex-M3是ARM公司推出的32位處理器,使用了最新一代的ARMv7架構,具有高性能、低功耗和低成本的優(yōu)點。對那些對功耗與成本敏感、但又要求較高性能的嵌入式應用來說,Correx-M3無疑是最佳解決方案;而對成本要求苛刻、運算能力要求不高的設備來說,嵌入成熟穩(wěn)定的8051處理器,已經成為了業(yè)內的流行做法。目前,越來越多的嵌入式系統(tǒng)同時使用了上述兩種MCU,因此如何使Cortex-M3與8051之間可以高效地進行信息交互,是實現(xiàn)設計目標的關鍵。
關鍵詞: 接口IC 通信 串行 MCU
Abstract:
Key words :

引言
    Cortex-M3是ARM公司推出的32位處理器,使用了最新一代的ARMv7架構,具有高性能、低功耗和低成本的優(yōu)點。對那些對功耗與成本敏感、但又要求較高性能的嵌入式應用來說,Correx-M3無疑是最佳解決方案;而對成本要求苛刻、運算能力要求不高的設備來說,嵌入成熟穩(wěn)定的8051處理器,已經成為了業(yè)內的流行做法。目前,越來越多的嵌入式系統(tǒng)同時使用了上述兩種MCU,因此如何使Cortex-M3與8051之間可以高效地進行信息交互,是實現(xiàn)設計目標的關鍵。

1 方案設計
    要進行信息交互,離不開物理接口。在嵌入式應用中,目前常用的接口有UART、SPI和I2C等串行接口。UART接口只需兩根數(shù)據線就可以工作,時序控制簡單,大部分設備都整合了這種接口。而且,經過電平轉換后UART的TTL電平可以轉換成RS232電平,RS232接口是計算機標準配置的通信接口,可以通過超級終端查看串口的數(shù)據,便于使用PC機對線路進行檢測分析。因此,本設計采用UART接口作為Cortex-M3與C51之間的通信接口。
    考慮到各種需求,本文設計了一種基于UART接口的,用于Cortex-M3和C51之間的通信協(xié)議,使Cortex-M3與C51之間可以高效地進行信息交互。當兩個MCU之間需要進行通信的時候,發(fā)送方把原始數(shù)據下放給通信協(xié)議,通信協(xié)議按照特定格式把數(shù)據打包,通過UART接口發(fā)送給對方。接收方收到數(shù)據時,MCU運行相應的通信協(xié)議,把數(shù)據解包,就可以得到發(fā)送方的原始數(shù)據,將其交付給上層程序。體系結構如圖1所示。

a.jpg


    如果使用其他串行接口,原理大體相同,只需對硬件作相應改動,即對接口控制模塊稍作修改即可投入使用。
    下面以實際工程中某種多媒體系統(tǒng)為例詳細說明。該系統(tǒng)采用了以Cortex-M3為內核的STM32處理器和嵌入了C51核的MST776視頻處理芯片,使用UART接口進行通信。

2 具體實現(xiàn)
2.1 硬件設置
    具體的器件不同,UART的工作方式也有所區(qū)別,主要表現(xiàn)在波特率、停止位、數(shù)據字長度等參數(shù)上。當兩個器件用UART連接時,所有參數(shù)必須完全一致,否則通信很容易出錯。在此,要特別注意波特率的設置:當線路質量好的時候,波特率可以設置得高點,以獲得較高的傳輸速率;線路質量差的時候,就要減小波特率,以降低誤碼率。
    本設計中,STM32與MST776都整合了UART接口,只需配置少量電阻;同時,線纜長度不超過20 cm,使用環(huán)境的電磁干擾小,波特率可以設置為38 400bps,甚至更高。另外,考慮到C51的處理速度較低,因此波特率不應設置得太高,避免造成C51側數(shù)據溢出,進而造成死機。
    本設計只需使用兩根數(shù)據線來實現(xiàn)兩個MCU之間的互連,把STM32上選定的UART接口的TX與對端的UART接口的RX相連,把RX與對端的UART接口的TX相連。
2.2 軟件設計
2.2.1數(shù)據幀解析
    Cortex-M3側和C51側采用同樣的數(shù)據幀格式,以簡化編程的難度,增強程序的可移植性。數(shù)據幀由起始標識符、數(shù)據長度、類型ID、通信內容、循環(huán)冗余校驗碼構成,如圖2所示。

b.jpg


    (1)起始標識符
    起始標識符的作用主要是用于定界,把不同的數(shù)據幀在一連串的數(shù)據中分離開來。起始標識符內的數(shù)據不能與數(shù)據幀中可能出現(xiàn)的任何數(shù)據相同,否則會引起歧義,導致定界失敗,造成數(shù)據錯誤。在本例中,為2個字節(jié),選用0xFF+0xAA,因為該組合與其他數(shù)據具有排他性,不會引起歧義。
    (2)數(shù)據長度
    數(shù)據長度的計算方法為,從該位開始,到最后一個數(shù)據位結束,也就是CRC校驗位之前的一個字節(jié)。雖然使用Length位可以表示很長的數(shù)據幀,但在應用中應盡量采用短幀,以避免各種干擾因素造成少數(shù)數(shù)據位出錯,導致大量數(shù)據無效,影響通信效率。同時,應該設置一個最大發(fā)送長度,以便設置超時重傳計時器的值。本例采用1個字節(jié),最大幀長為260個字節(jié)。
    (3)類型ID
    根據實際需要,類型ID可以采用1個或多個字節(jié),用于表示該數(shù)據幀的作用類型。本例中,采用1個字節(jié),可以表示256種作用類型,例如設備參數(shù)幀(如音量)、線路探測幀或應答幀。
    (4)通信內容
    通信內容與類型ID結合,表達特定意義。相同的Data,但ID不同的話,表達的信息不一樣。根據不同的ID,Data的長度可能會有所不同。
    (5)循環(huán)冗余校驗碼
    循環(huán)冗余校驗碼用于校驗接收到的數(shù)據是否在傳輸過程中出錯。本例中采用CRC-16算法,占2個字節(jié),對從起始標識符開始到最后一個通信內容位的所有數(shù)據進行運算,把得到的結果附在最后。
2.2.2 收發(fā)流程
    發(fā)送流程:將要發(fā)送的數(shù)據添加起始標識符和長度后,計算CRC-16校驗碼,附在最后,形成一個完整的數(shù)據幀,然后通過UART發(fā)送出去。發(fā)送完畢后啟動超時重傳計時器。
    接收流程:當接收到一個字節(jié)的數(shù)據時,根據系統(tǒng)狀態(tài)采取不同的操作。當數(shù)據上交后,上層程序根據類型ID和通信內容來作出相應的響應。具體流程如圖3所示。

c.jpg


2.2.3 線路檢測機制
    雖然本例中的UART接口是一種有線通信,而且線纜長度不超過20 cm,但仍有可能出現(xiàn)插口松脫、線纜銅芯斷裂等情況,造成線路中斷。對于轉換成RS232電平的應用,雖然RS232的最大傳輸距離不超過15 m,但如果在惡劣的環(huán)境中使用,仍無法完全避免線路發(fā)生中斷。因
此,有效的線路檢測機制是必需的。
    本設計中,當本端系統(tǒng)狀態(tài)為Null時,每間隔1 s就發(fā)送一個線路探測幀,類型ID=0x00,通信內容=0x55。同時,如果本端在5 s內收不到任何新數(shù)據或者線路探測幀,則表明線路中斷,向上層程序發(fā)送線路中斷報告。對于需要交互秒時間信息的應用,線路探測幀可以省略,只檢測秒時間信息就可以達到線路探測的目的。
2.2.4 校正機制
    因為串行通信普遍存在誤碼的問題,因此簡單有效的校正機制是必須的。由于采用的是點到點的串行接口,數(shù)據幀都是按照發(fā)送的先后順序到達接收端,不會出現(xiàn)后一幀比前一幀早到的情況,只需要采用CRC-16和簡單的ARQ機制,再加上超時重傳機制,就可以提供高可靠的數(shù)據傳輸。
    接收方收到一個完整的數(shù)據幀之后,必須給發(fā)送方返回一個ACK幀,該幀的類型ID=0xFF。通信內容根據校驗的結果有所不同:校驗正確的,Data=1;校驗失敗的,Data=0。
    發(fā)送方發(fā)送完一個完整的數(shù)據幀之后,啟動超時重傳計時器。如果在計時器超時之前沒有收到ACK幀,或者收到的ACK幀的Data為0,就重發(fā)上一個數(shù)據幀;當收到ACK幀之后,計時器歸零。發(fā)送方只有在收到Data為1的ACK幀后,才能發(fā)送下一個數(shù)據幀。當連續(xù)超時5次時,表明線路中斷,向上層程序發(fā)送線路中斷報告。
    ACK幀和線路檢測幀無須應答。發(fā)送這兩種幀之后,無須設置超時重傳計時器。
2.2.5 接口控制
    接口控制主要管理UART接口的收發(fā),在此采用中斷的方式來實現(xiàn)。若有數(shù)據需要發(fā)送,則必須等發(fā)送緩存為空時,才能把數(shù)據寫入到發(fā)送緩存,否則會把舊的數(shù)據覆蓋掉,造成數(shù)據丟失。當數(shù)據寫入結束后,產生一個發(fā)送中斷,通知MCU把數(shù)據通過UART接口發(fā)送出去。當收到一個數(shù)據時,UART產生一個中斷信號,通知MCU把數(shù)據放入接收緩存,保存完成后清除中斷信號,等待接收下一個數(shù)據。只需修改接口控制部
分,就可以適用于不同的硬件接口。

3 實驗結果以及分析
    為了驗證本串行通信協(xié)議的有效性,連接STM32和MST776的UART接口,在這兩個MCU上運行本通信協(xié)議,并在線纜上引出兩個探測點,使用MAX232芯片進行電平轉換,然后接到PC機的RS232接口上,進行數(shù)據檢測。通過Windows的超級終端,可以在PC機上看到UART接口收發(fā)數(shù)據的狀況。同時,通過JTAG接口可以看到通信協(xié)議向上層程序交付的數(shù)據。
    實驗結果表明,本通信協(xié)議工作正常,收發(fā)數(shù)據正確,校正機制和線路檢測機制都工作良好。運行本通信協(xié)議后,兩個MCU都沒有出現(xiàn)數(shù)據溢出、死機等情況。這表明本文設計的串口通信協(xié)議能夠實現(xiàn)預期的功能,令Cortex-M3與C51之間可以有效地進行信息交互。

結語
    本文基于Cortex-M3與C51之間的通信需求,設計了一種基于數(shù)據幀的通信協(xié)議,使得兩個MCU間可以進行有效的信息交互。本設計已經在某型多媒體系統(tǒng)上得到應用,使用效果很好,表現(xiàn)非常穩(wěn)定。本設計具有良好的可移植性和通用性,在另一個嵌入式項目中,經過對程序的少量修改,也在SPI接口上得到了應用。

此內容為AET網站原創(chuàng),未經授權禁止轉載。