兩種MCU間的串行通信協(xié)議設計
2.2.2 收發(fā)流程
發(fā)送流程:將要發(fā)送的數據添加起始標識符和長(cháng)度后,計算CRC-16校驗碼,附在最后,形成一個(gè)完整的數據幀,然后通過(guò)UART發(fā)送出去。發(fā)送完畢后啟動(dòng)超時(shí)重傳計時(shí)器。
接收流程:當接收到一個(gè)字節的數據時(shí),根據系統狀態(tài)采取不同的操作。當數據上交后,上層程序根據類(lèi)型ID和通信內容來(lái)作出相應的響應。具體流程如圖3所示。本文引用地址:http://dyxdggzs.com/article/156421.htm
2.2.3 線(xiàn)路檢測機制
雖然本例中的UART接口是一種有線(xiàn)通信,而且線(xiàn)纜長(cháng)度不超過(guò)20 cm,但仍有可能出現插口松脫、線(xiàn)纜銅芯斷裂等情況,造成線(xiàn)路中斷。對于轉換成RS232電平的應用,雖然RS232的最大傳輸距離不超過(guò)15 m,但如果在惡劣的環(huán)境中使用,仍無(wú)法完全避免線(xiàn)路發(fā)生中斷。因
此,有效的線(xiàn)路檢測機制是必需的。
本設計中,當本端系統狀態(tài)為Null時(shí),每間隔1 s就發(fā)送一個(gè)線(xiàn)路探測幀,類(lèi)型ID=0x00,通信內容=0x55。同時(shí),如果本端在5 s內收不到任何新數據或者線(xiàn)路探測幀,則表明線(xiàn)路中斷,向上層程序發(fā)送線(xiàn)路中斷報告。對于需要交互秒時(shí)間信息的應用,線(xiàn)路探測幀可以省略,只檢測秒時(shí)間信息就可以達到線(xiàn)路探測的目的。
2.2.4 校正機制
因為串行通信普遍存在誤碼的問(wèn)題,因此簡(jiǎn)單有效的校正機制是必須的。由于采用的是點(diǎn)到點(diǎn)的串行接口,數據幀都是按照發(fā)送的先后順序到達接收端,不會(huì )出現后一幀比前一幀早到的情況,只需要采用CRC-16和簡(jiǎn)單的ARQ機制,再加上超時(shí)重傳機制,就可以提供高可靠的數據傳輸。
接收方收到一個(gè)完整的數據幀之后,必須給發(fā)送方返回一個(gè)ACK幀,該幀的類(lèi)型ID=0xFF。通信內容根據校驗的結果有所不同:校驗正確的,Data=1;校驗失敗的,Data=0。
發(fā)送方發(fā)送完一個(gè)完整的數據幀之后,啟動(dòng)超時(shí)重傳計時(shí)器。如果在計時(shí)器超時(shí)之前沒(méi)有收到ACK幀,或者收到的ACK幀的Data為0,就重發(fā)上一個(gè)數據幀;當收到ACK幀之后,計時(shí)器歸零。發(fā)送方只有在收到Data為1的ACK幀后,才能發(fā)送下一個(gè)數據幀。當連續超時(shí)5次時(shí),表明線(xiàn)路中斷,向上層程序發(fā)送線(xiàn)路中斷報告。
ACK幀和線(xiàn)路檢測幀無(wú)須應答。發(fā)送這兩種幀之后,無(wú)須設置超時(shí)重傳計時(shí)器。
2.2.5 接口控制
接口控制主要管理UART接口的收發(fā),在此采用中斷的方式來(lái)實(shí)現。若有數據需要發(fā)送,則必須等發(fā)送緩存為空時(shí),才能把數據寫(xiě)入到發(fā)送緩存,否則會(huì )把舊的數據覆蓋掉,造成數據丟失。當數據寫(xiě)入結束后,產(chǎn)生一個(gè)發(fā)送中斷,通知MCU把數據通過(guò)UART接口發(fā)送出去。當收到一個(gè)數據時(shí),UART產(chǎn)生一個(gè)中斷信號,通知MCU把數據放入接收緩存,保存完成后清除中斷信號,等待接收下一個(gè)數據。只需修改接口控制部
分,就可以適用于不同的硬件接口。
3 實(shí)驗結果以及分析
為了驗證本串行通信協(xié)議的有效性,連接STM32和MST776的UART接口,在這兩個(gè)MCU上運行本通信協(xié)議,并在線(xiàn)纜上引出兩個(gè)探測點(diǎn),使用MAX232芯片進(jìn)行電平轉換,然后接到PC機的RS232接口上,進(jìn)行數據檢測。通過(guò)Windows的超級終端,可以在PC機上看到UART接口收發(fā)數據的狀況。同時(shí),通過(guò)JTAG接口可以看到通信協(xié)議向上層程序交付的數據。
實(shí)驗結果表明,本通信協(xié)議工作正常,收發(fā)數據正確,校正機制和線(xiàn)路檢測機制都工作良好。運行本通信協(xié)議后,兩個(gè)MCU都沒(méi)有出現數據溢出、死機等情況。這表明本文設計的串口通信協(xié)議能夠實(shí)現預期的功能,令Cortex-M3與C51之間可以有效地進(jìn)行信息交互。
結語(yǔ)
本文基于Cortex-M3與C51之間的通信需求,設計了一種基于數據幀的通信協(xié)議,使得兩個(gè)MCU間可以進(jìn)行有效的信息交互。本設計已經(jīng)在某型多媒體系統上得到應用,使用效果很好,表現非常穩定。本設計具有良好的可移植性和通用性,在另一個(gè)嵌入式項目中,經(jīng)過(guò)對程序的少量修改,也在SPI接口上得到了應用。
評論