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