8位單片機的多主機通訊方案
在這個(gè)系統中的所有M37546的TxD1與RxD1都接到同一根總線(xiàn)上。所有數據都是在這一根線(xiàn)上傳遞的,一個(gè)主機發(fā)送的數據除了會(huì )被其他主機收到外,也會(huì )被自己的RxD1收到,這也是使用總線(xiàn)沖突檢測功能仲裁的必要條件之一。除此以外還需要將P11/TxD1管腳設置為N溝道開(kāi)路輸出方式,構成N溝開(kāi)漏總線(xiàn)結構。電路見(jiàn)圖1。

本方案使用了CAP0外部中斷對總線(xiàn)進(jìn)行監控,以避免多個(gè)設備同時(shí)發(fā)送的問(wèn)題。M37546的P10/RxD/CAP0管腳既是串口1的輸入RxD1,同時(shí)還是輸入捕捉功能的輸入CAP0。因為UART幀的起始位一定是低電平,所以發(fā)送開(kāi)始時(shí)會(huì )觸發(fā)CAP0中斷。在中斷處理程序中檢查串口1發(fā)送結束標志位,如果發(fā)送結束標志位是“1”,說(shuō)明本機的發(fā)送過(guò)程并沒(méi)有啟動(dòng),必然是其它主機啟動(dòng)的發(fā)送,應該立刻進(jìn)入接收狀態(tài),直到對方發(fā)送結束;如果發(fā)送結束標志是“0”,說(shuō)明本機啟動(dòng)了發(fā)送,可以結束對總線(xiàn)狀態(tài)的監控(禁止CAP0中斷)轉而繼續后面的發(fā)送過(guò)程。這個(gè)監控過(guò)程也是對多個(gè)發(fā)送信號進(jìn)行同步篩選的過(guò)程,因為只有多個(gè)主機同時(shí)或在很短時(shí)間間隔(小于CAP0中斷響應時(shí)間)內發(fā)送起始位時(shí),才能成功啟動(dòng)發(fā)送過(guò)程。只有保證了發(fā)送過(guò)程的同步,才能應用后面的位仲裁方式。
位仲裁是依靠M37546的總線(xiàn)沖突檢測功能完成的,其工作方式為:當串口開(kāi)始接收后,在對每一位接收采樣的同時(shí),比較TxD發(fā)送的與RxD收到的數據,如果兩者不同就會(huì )產(chǎn)生UART1總線(xiàn)沖突檢測(U1BC)中斷。
仲裁過(guò)程利用了帶上拉的N溝開(kāi)漏總線(xiàn)的特點(diǎn)——“線(xiàn)與”。當某一個(gè)主機發(fā)送“1”的時(shí)候,如果其它主機正在發(fā)送“0”,“1”就不會(huì )出現在總線(xiàn)上。而發(fā)送“1”的主機從總線(xiàn)上收到的是“0”,這會(huì )觸發(fā)U1BC中斷。收到中斷后,這個(gè)主機應該立刻停止發(fā)送,轉為接收狀態(tài),以保證其它主機發(fā)送的數據不被破壞。
本方案除了物理層的內容外,還在UART協(xié)議的基礎上加入了數據幀的概念??偩€(xiàn)上的所有設備都會(huì )收到整個(gè)數據幀。如果發(fā)現自己的ID與目的ID相同,那么對后面的數據進(jìn)行接收并校驗,并發(fā)出應答。其它設備收到數據幀后只提取幀的長(cháng)度信息,丟棄后面的數據、校驗和應答段。當后續字節達到數據長(cháng)度+2后,認為此幀正常結束,總線(xiàn)回到空閑狀態(tài),可以啟動(dòng)發(fā)送。數據幀的格式見(jiàn)圖2。

另外,協(xié)議還規定了總線(xiàn)等待時(shí)間。如果在一個(gè)數據幀的過(guò)程中數據中斷時(shí)間超過(guò)等待時(shí)間,可以認為此次發(fā)送為非正常結束??偩€(xiàn)回到空閑狀態(tài)。
發(fā)送方如果收到不正常應答(校驗出錯)或者未收到應答,可以選擇重新發(fā)送,但是重發(fā)的幀有可能會(huì )與其它主機發(fā)送的數據幀競爭。
保留全零ID為廣播地址,以廣播地址為目的ID的幀會(huì )被所有主機接收。并且不需要應答。
以上格式都是針對一般的系統而設計的,用戶(hù)可以根據自己的需要來(lái)調整。比如,對于重要的數據可以用CRC校驗方式代替校驗和;設備較多時(shí)可以增加ID段長(cháng)度等。
評論