多主機通訊方案使用了瑞薩的8位單片機M37546,該單片機具有兩個獨立的串口,可以配置為同步或異步串口使用。使用了N溝道漏極開路總線結構與UART通訊協議,在同一根電纜上完成數據的發送和接收;同時加入了沖突檢測功能,可以保證在不丟失信息的情況下,完成仲裁,實現多主機通訊。 在這個系統中的所有M37546的TxD1與RxD1都接到同一根總線上。所有數據都是在這一根線上傳遞的,一個主機發送的數據除了會被其他主機收到外,也會被自己的RxD1收到,這也是使用總線沖突檢測功能仲裁的必要條件之一。除此以外還需要將P11/TxD1管腳設置為N溝道開路輸出方式,構成N溝開漏總線結構。電路見圖1。 本方案使用了CAP0外部中斷對總線進行監控,以避免多個設備同時發送的問題。M37546的P10/RxD/CAP0管腳既是串口1的輸入RxD1,同時還是輸入捕捉功能的輸入CAP0。因為UART幀的起始位一定是低電平,所以發送開始時會觸發CAP0中斷。在中斷處理程序中檢查串口1發送結束標志位,如果發送結束標志位是“1”,說明本機的發送過程并沒有啟動,必然是其它主機啟動的發送,應該立刻進入接收狀態,直到對方發送結束;如果發送結束標志是“0”,說明本機啟動了發送,可以結束對總線狀態的監控(禁止CAP0中斷)轉而繼續后面的發送過程。這個監控過程也是對多個發送信號進行同步篩選的過程,因為只有多個主機同時或在很短時間間隔(小于CAP0中斷響應時間)內發送起始位時,才能成功啟動發送過程。只有保證了發送過程的同步,才能應用后面的位仲裁方式。 位仲裁是依靠M37546的總線沖突檢測功能完成的,其工作方式為:當串口開始接收后,在對每一位接收采樣的同時,比較TxD發送的與RxD收到的數據,如果兩者不同就會產生UART1總線沖突檢測(U1BC)中斷。 仲裁過程利用了帶上拉的N溝開漏總線的特點——“線與”。當某一個主機發送“1”的時候,如果其它主機正在發送“0”,“1”就不會出現在總線上。而發送“1”的主機從總線上收到的是“0”,這會觸發U1BC中斷。收到中斷后,這個主機應該立刻停止發送,轉為接收狀態,以保證其它主機發送的數據不被破壞。 本方案除了物理層的內容外,還在UART協議的基礎上加入了數據幀的概念。總線上的所有設備都會收到整個數據幀。如果發現自己的ID與目的ID相同,那么對后面的數據進行接收并校驗,并發出應答。其它設備收到數據幀后只提取幀的長度信息,丟棄后面的數據、校驗和應答段。當后續字節達到數據長度+2后,認為此幀正常結束,總線回到空閑狀態,可以啟動發送。數據幀的格式見圖2。 另外,協議還規定了總線等待時間。如果在一個數據幀的過程中數據中斷時間超過等待時間,可以認為此次發送為非正常結束。總線回到空閑狀態。 發送方如果收到不正常應答(校驗出錯)或者未收到應答,可以選擇重新發送,但是重發的幀有可能會與其它主機發送的數據幀競爭。 保留全零ID為廣播地址,以廣播地址為目的ID的幀會被所有主機接收。并且不需要應答。 以上格式都是針對一般的系統而設計的,用戶可以根據自己的需要來調整。比如,對于重要的數據可以用CRC校驗方式代替校驗和;設備較多時可以增加ID段長度等。 |