新聞中心

EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > 兩種MCU間的串行通信協(xié)議設(shè)計(jì)

兩種MCU間的串行通信協(xié)議設(shè)計(jì)

作者: 時(shí)間:2011-04-12 來源:網(wǎng)絡(luò) 收藏

2.2.2 收發(fā)流程
發(fā)送流程:將要發(fā)送的數(shù)據(jù)添加起始標(biāo)識符和長度后,計(jì)算CRC-16校驗(yàn)碼,附在最后,形成一個(gè)完整的數(shù)據(jù)幀,然后通過UART發(fā)送出去。發(fā)送完畢后啟動超時(shí)重傳計(jì)時(shí)器。
接收流程:當(dāng)接收到一個(gè)字節(jié)的數(shù)據(jù)時(shí),根據(jù)系統(tǒng)狀態(tài)采取不同的操作。當(dāng)數(shù)據(jù)上交后,上層程序根據(jù)類型ID和內(nèi)容來作出相應(yīng)的響應(yīng)。具體流程如圖3所示。

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

c.jpg


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

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

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


上一頁 1 2 3 下一頁

評論


相關(guān)推薦

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

關(guān)閉