本發(fā)明涉及串口通信技術(shù)領(lǐng)域,特別是指一種串口數(shù)據(jù)交換的方法。
背景技術(shù):
傳統(tǒng)的串行現(xiàn)場總線的特點是1)主從式結(jié)構(gòu);2)在任何時刻最多只有兩個接入點有總線控制權(quán);3)通信有較大延遲。這種總線從結(jié)構(gòu)上看就不穩(wěn)定且不安全。因為,一旦主機故障,從機就無法工作,整個系統(tǒng)可能癱瘓。另外,由于這種主從總線通信協(xié)議帶有一定復雜性,通信軟件的開發(fā)難度較大,通信軟件的安全難以保障,因此導致系統(tǒng)不安全性增加。而在工業(yè)控制場合,通信吞吐量不大,滿足通信吞吐量要求的難度不大,穩(wěn)定性和安全性顯得更加重要。
現(xiàn)有的交換式網(wǎng)絡(luò),如星形和多星形網(wǎng)絡(luò),與主從式的現(xiàn)場總線相比具有很大的優(yōu)越性。因為,星形連接的交換機保證了每一個總線接入點之間的通信都是主對主通信。接入點故障不會引起其它不相干點通信故障,保障系統(tǒng)的安全性。另外,主對主的通信協(xié)議可以非常簡單,因此開發(fā)出安全可靠的通信軟件模塊變得容易,保障了系統(tǒng)的安全性。再次,交換式的總線的通信是多路并發(fā),點對點數(shù)據(jù)吞吐能力和接入設(shè)備數(shù)量無關(guān),打破了“共享帶寬”的瓶頸。最后一點,通信延遲可以得到控制。對于高實時要求的控制系統(tǒng),星形連接是低成本的方法。
遵循標準EIA/TIA-485(232)的串口總線的替代方法是帶串口網(wǎng)橋的多星形連接串口網(wǎng)絡(luò)(見圖1)。但是由于串口網(wǎng)絡(luò)在長距離(大于10米)傳輸時不能將通信波特率調(diào)得太高,一般小于115200bps,因此要實現(xiàn)長距離高通信速率(如1Mbps以上)的星形串口網(wǎng)絡(luò)就必須借助其它方案。已有實現(xiàn)串口交換機的文獻【帶路由選擇的星型連接多串口通信】使用CPLD實現(xiàn)串口交換機,但是不具備遠距離高速串口傳輸?shù)哪芰?,且由CPLD硬件實現(xiàn),不支持復雜的通訊協(xié)議。文獻【采用RTL8305SB實現(xiàn)串口交換機】實現(xiàn)的機理是將各路串口數(shù)據(jù)包打包成以太包,交換后恢復數(shù)據(jù)包,實現(xiàn)通訊。這種結(jié)構(gòu)不能實現(xiàn)高實時性。另外,串口間的數(shù)據(jù)交換都需要由以太網(wǎng)交換機實現(xiàn),在與同一單片機連接的串口間數(shù)據(jù)傳輸并沒有采用交換的模式,而是采用串口-以太網(wǎng)轉(zhuǎn)換的方式,實時性不能被保證,并且交換機還接出至PC機,安全性弱化,不適合工業(yè)控制場合。
已有的串口交換機是非實時的,至今未見有支持高實時串口通訊協(xié)議的串口交換機。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明提出一種支持星形串口網(wǎng)絡(luò),高實時性且傳輸速率快的串口數(shù)據(jù)交換的方法,以克服現(xiàn)有串口交換機實時性差且者不能高速遠距離傳送串口信號的問題。
基于上述目的,本發(fā)明提供一種串口數(shù)據(jù)交換的方法,包括:
提取串口或者以太網(wǎng)端口接收到的數(shù)據(jù)幀,
根據(jù)數(shù)據(jù)幀的目標地址將數(shù)據(jù)幀轉(zhuǎn)移至相應端口進行發(fā)送,
連接于同一交換機上的串口數(shù)據(jù)交換時,數(shù)據(jù)由處理器控制DMA實現(xiàn)中轉(zhuǎn),連接于不同交換機上的串口數(shù)據(jù)交換時,數(shù)據(jù)要經(jīng)過以太網(wǎng)端口中轉(zhuǎn),在串口數(shù)據(jù)的交換時單片機的處理器只做簡單的判斷和控制,很少干預數(shù)據(jù)收發(fā),數(shù)據(jù)收發(fā)由DMA控制完成。
實現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā)的方法是:
單片機實時掃描各串口接收數(shù)據(jù),一旦收到數(shù)據(jù),則立刻在端口編號列表中查找數(shù)據(jù)的目的端口的物理地址,若目的端口對應于本串口交換機的串口,判斷數(shù)據(jù)的長度之后,不必等待整幀數(shù)據(jù)全部接收,可立刻啟動轉(zhuǎn)發(fā)已接收的字節(jié),轉(zhuǎn)發(fā)由DMA控制完成,而幀剩余的數(shù)據(jù)部分在幀轉(zhuǎn)發(fā)結(jié)束之前保持同一個轉(zhuǎn)發(fā)目的通道;若目的端口不能對應于本串口交換機的串口,則選擇以太網(wǎng)端口進行轉(zhuǎn)發(fā),選擇的以太網(wǎng)端口是根據(jù)設(shè)備所連接的交換機的MAC地址來確定的,數(shù)據(jù)封裝于以太網(wǎng)數(shù)據(jù)幀中,轉(zhuǎn)發(fā)由DMA控制完成。
單片機實時掃描以太網(wǎng)物理端口接收數(shù)據(jù),一旦收到數(shù)據(jù)包,則提取此數(shù)據(jù)包目標地址,并在端口編號列表中查找數(shù)據(jù)的目的端口的物理地址,若目的端口對應于本串口交換機的串口,則將此數(shù)據(jù)包轉(zhuǎn)移至待轉(zhuǎn)發(fā)緩存,之后立即向目的端口進行轉(zhuǎn)發(fā),否則忽略此數(shù)據(jù)包,轉(zhuǎn)發(fā)由DMA控制完成。
如果同時有多個數(shù)據(jù)幀要通過以太網(wǎng)端口發(fā)送,則把這幾個數(shù)據(jù)幀放在一個數(shù)據(jù)包發(fā)送,如果這些數(shù)據(jù)幀長度大于以太網(wǎng)數(shù)據(jù)幀最大長度,則分開發(fā)送;如果數(shù)據(jù)幀長度過短,小于以太網(wǎng)最短數(shù)據(jù)幀長度,則在發(fā)送的數(shù)據(jù)幀之后補充8個為0的字節(jié)的空指令幀;就緒的以太網(wǎng)數(shù)據(jù)幀放在以太網(wǎng)的發(fā)送緩存中。
本發(fā)明的有益效果是:由于借用了以太網(wǎng)的物理通道,使遠距離高速率的串口通訊成為可行,最高的通信速率可以到達10Mbps,區(qū)別于專用硬件電路串口數(shù)據(jù)交換功能,使用單片機和DMA功能實現(xiàn)實時的串口數(shù)據(jù)交換功能,大大降低串口交換機的復雜程度,從而降低了成本;此外,由于采用了單片機,通過單片機編程,使復雜度高的通信協(xié)議和安全保障機制直接得以支持,這個性能上的提高是采用專用硬件電路無法實現(xiàn)的。
附圖說明
圖1為本發(fā)明實施例實現(xiàn)的星形串口網(wǎng)絡(luò);
圖2為本發(fā)明實施例硬件結(jié)構(gòu)示意圖;
圖3為串口交換機單片機模塊圖。
圖4為8字節(jié)指令幀示意圖;
圖5為數(shù)據(jù)包擴展幀的格式示意圖;
圖6為FIFO收發(fā)數(shù)據(jù)緩存示意圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,以下結(jié)合具體實施例,并參照附圖,對本發(fā)明進一步詳細說明。
本發(fā)明提供一種串口數(shù)據(jù)交換的方法,包括:
提取串口或者以太網(wǎng)端口接收到的數(shù)據(jù)幀,根據(jù)所述數(shù)據(jù)幀的目標地址將所述數(shù)據(jù)幀轉(zhuǎn)移至相應端口進行發(fā)送,連接于同一交換機上的串口數(shù)據(jù)交換時,數(shù)據(jù)由處理器控制DMA實現(xiàn)中轉(zhuǎn),連接于不同交換機上的串口數(shù)據(jù)交換時,數(shù)據(jù)要經(jīng)過以太網(wǎng)端口中轉(zhuǎn);在串口數(shù)據(jù)的交換時單片機的處理器只做簡單的判斷和控制,很少干預數(shù)據(jù)收發(fā),數(shù)據(jù)收發(fā)由DMA控制完成。
本發(fā)明的有益效果是:由于借用了以太網(wǎng)的物理通道,使遠距離高速率的串口通訊成為可行,最高的通信速率可以到達10Mbps,區(qū)別于專用硬件電路串口數(shù)據(jù)交換功能,使用單片機和DMA功能實現(xiàn)實時的串口數(shù)據(jù)交換功能,大大降低串口交換機的復雜程度,從而降低了成本;此外,由于采用了單片機,通過單片機編程,使復雜度高的通信協(xié)議和安全保障機制直接得以支持,這個性能上的提高是采用專用硬件電路無法實現(xiàn)的。
作為本發(fā)明的一個實施例,所述數(shù)據(jù)收發(fā)的過程具體為:
所述單片機實時掃描各串口接收數(shù)據(jù),當收到數(shù)據(jù)時,在端口編號列表中查找數(shù)據(jù)的目的端口的物理地址,若目的端口對應于本串口交換機的串口,判斷數(shù)據(jù)的長度之后,不必等待整幀數(shù)據(jù)全部接收,可立刻啟動轉(zhuǎn)發(fā)已接收的字節(jié),轉(zhuǎn)發(fā)由DMA控制完成,而幀剩余的數(shù)據(jù)部分在幀轉(zhuǎn)發(fā)結(jié)束之前保持同一個轉(zhuǎn)發(fā)目的通道;若目的端口不能對應于本串口交換機的串口,則選擇以太網(wǎng)端口進行轉(zhuǎn)發(fā),選擇的以太網(wǎng)端口是根據(jù)設(shè)備所連接的交換機的MAC地址來確定的,數(shù)據(jù)封裝于以太網(wǎng)數(shù)據(jù)幀中,轉(zhuǎn)發(fā)由DMA控制完成。
單片機實時掃描以太網(wǎng)物理端口接收數(shù)據(jù),一旦收到數(shù)據(jù)包,則提取此數(shù)據(jù)包目標地址,并在端口編號列表中查找數(shù)據(jù)的目的端口的物理地址,若目的端口對應于本串口交換機的串口,則將此數(shù)據(jù)包轉(zhuǎn)移至待轉(zhuǎn)發(fā)緩存,之后立即向目的端口進行轉(zhuǎn)發(fā),否則忽略此數(shù)據(jù)包,轉(zhuǎn)發(fā)由DMA控制完成。
如果同時有多個數(shù)據(jù)幀要通過以太網(wǎng)端口發(fā)送,則把這幾個數(shù)據(jù)幀放在一個數(shù)據(jù)包發(fā)送,如果這些數(shù)據(jù)幀長度大于以太網(wǎng)數(shù)據(jù)幀最大長度,則分開發(fā)送;如果數(shù)據(jù)幀長度過短,小于以太網(wǎng)最短數(shù)據(jù)幀長度,則在發(fā)送的數(shù)據(jù)幀之后補充8個為0的字節(jié)的空指令幀;就緒的以太網(wǎng)數(shù)據(jù)幀放在以太網(wǎng)的發(fā)送緩存中。
為了使本發(fā)明的技術(shù)方案更容易被理解,以下結(jié)合具體實施例對本發(fā)明的技術(shù)方案進行詳細說明。
圖2為本發(fā)明實施例硬件結(jié)構(gòu)示意圖。從圖2中可以看出,實現(xiàn)本發(fā)明的串口數(shù)據(jù)交換方法的串口交換機的一個實施例包括:單片機201、串口物理端口203、以太網(wǎng)物理端口202。
所述單片機201帶多路串口和一路以太網(wǎng)物理接口,并支持DMA功能,實現(xiàn)了串口數(shù)據(jù)的交換功能;所述的串口物理端口203用于實現(xiàn)串口交換機與設(shè)備的串口連接,一種實施例為標準的RS485接口;所述的以太網(wǎng)物理端口202用于實現(xiàn)將串口交換機與以太網(wǎng)交換機的連接,為標準的以太網(wǎng)接口;
在上述實施例中,所述交換機實現(xiàn)6路RS485全雙工通信接入,1路以太網(wǎng)接入的串口交換機,技術(shù)要點如下:1)采用帶6路通用異步收發(fā)傳輸器(UART)接口和帶10M/100M以太網(wǎng)控制器以及支持多路DMA的ARM Cortex-M4芯片作為單片機;2)6路UART連接至6路RS485串口物理端口;3)以太網(wǎng)控制器連接以太網(wǎng)物理端口。
圖3為串口交換機單片機模塊圖。所述串口交換機單片機內(nèi)部模塊中所有通訊接口均通過DMA與緩存連接,其中串口緩存為環(huán)形FIFO結(jié)構(gòu)。如圖6所示,為FIFO收發(fā)數(shù)據(jù)緩存示意圖。
以此串口交換機構(gòu)建的典型星型網(wǎng)絡(luò)如圖1所示。如圖1所示,為本發(fā)明實施例實現(xiàn)的星形串口網(wǎng)絡(luò)。圖1中的以太網(wǎng)交換機可以為普通的以太網(wǎng)交換機。
串口交換機作為數(shù)據(jù)鏈路層的實現(xiàn)設(shè)備,支持如下優(yōu)選的數(shù)據(jù)幀格式。以太網(wǎng)物理接口數(shù)據(jù)幀中MAC控制器會自動加入目的MAC地址和源MAC地址。
數(shù)據(jù)幀分為2種。
一種數(shù)據(jù)幀為固定長度8字節(jié)指令幀,一種數(shù)據(jù)幀為以8字節(jié)指令幀格式開頭尾加總長度小于248的數(shù)據(jù)包擴展幀的數(shù)據(jù)包幀。
3)指令幀(圖4)的格式為:
DST:目標地址字節(jié)
SRC:發(fā)送地址字節(jié)
CTR:幀數(shù)據(jù)類型字節(jié),包含了數(shù)據(jù)處理優(yōu)先級信息
ID:幀編號字節(jié)
D3-D0:數(shù)據(jù)4字節(jié)
CRC:檢驗字節(jié),此檢驗字節(jié)是前7個字節(jié)的校驗計算的結(jié)果,如果數(shù)據(jù)在傳送過程中被破壞,接收方根據(jù)接收到的前7個字節(jié)的校驗計算的CRC結(jié)果和發(fā)送過來的CRC會不一致,這樣就可以檢測出錯誤的發(fā)生。下文的4字節(jié)的檢驗字節(jié)也是一樣的原理。
4)數(shù)據(jù)包擴展幀(圖5)的格式為:
DN-D0:數(shù)據(jù),長度為數(shù)據(jù)包幀開頭的8字節(jié)指令幀中的D3字節(jié)值,數(shù)據(jù)包幀總長度小于256
CRC1-CRC4:檢驗字節(jié)
為實現(xiàn)根據(jù)目標地址的數(shù)據(jù)交換功能,單片機必須記憶各接入設(shè)備的編號,此編號為0-255。單片機實現(xiàn)記憶端口設(shè)備編號的方法是:
系統(tǒng)啟動時,串口交換機單片機發(fā)送指令查詢各接入端口的設(shè)備編號;
隨后,交換機將各端口編號制成列表,以廣播形式(目標地址為0x00)發(fā)送至以太網(wǎng)交換機;
之后,各交換機以太網(wǎng)端口接收到設(shè)備編號列表數(shù)據(jù)包,提取列表信息,并記憶此數(shù)據(jù)包的MAC地址;MAC地址對應交換機,每臺交換機的MAC地址都不一樣;這樣設(shè)備連接于哪臺交換機,可以由MAC地址判斷出來;因此設(shè)備的物理地址由設(shè)備編號和交換機的MAC地址共同構(gòu)成;
之后,單片機周期性檢測接入串口端口編號是否改動,并更改端口編號列表;
提取串口或者以太網(wǎng)端口接收到的數(shù)據(jù)幀并實現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā)的方法是:
單片機實時掃描各串口接收數(shù)據(jù),一旦收到數(shù)據(jù),則立刻在端口編號列表中查找數(shù)據(jù)的目的端口的物理地址,若目的端口對應于本串口交換機的串口(圖1,本串口交換機鏈路),判斷數(shù)據(jù)的長度之后,不必等待整幀數(shù)據(jù)全部接收,可立刻啟動轉(zhuǎn)發(fā)已接收的字節(jié),轉(zhuǎn)發(fā)由DMA控制完成,而幀剩余的數(shù)據(jù)部分在幀轉(zhuǎn)發(fā)結(jié)束之前保持同一個轉(zhuǎn)發(fā)目的通道;若目的端口不能對應于本串口交換機的串口(圖1,跨串口交換機鏈路),則選擇以太網(wǎng)端口進行轉(zhuǎn)發(fā),選擇的以太網(wǎng)端口是根據(jù)設(shè)備所連接的交換機的MAC地址來確定的,此時需要提取完整數(shù)據(jù)幀并將此數(shù)據(jù)封裝于以太網(wǎng)數(shù)據(jù)幀中,轉(zhuǎn)發(fā)由DMA控制完成。
因為以太網(wǎng)端口一旦接收到數(shù)據(jù)包,則必包含完整的數(shù)據(jù)幀,所以單片機實時掃描太網(wǎng)物理端口接收數(shù)據(jù),一旦收到數(shù)據(jù)包,則提取此數(shù)據(jù)包目標地址,并在端口編號列表中查找數(shù)據(jù)的目的端口的物理地址,若目的端口對應于本串口交換機的串口,則將此數(shù)據(jù)包轉(zhuǎn)移至待轉(zhuǎn)發(fā)緩存,之后立即向目的端口進行轉(zhuǎn)發(fā),否則忽略此數(shù)據(jù)包,轉(zhuǎn)發(fā)由DMA控制完成。
從串口接收FIFO緩存中提取完整的數(shù)據(jù)幀的方法是:讀取FIFO讀取指針指向的首8字節(jié),判斷是否構(gòu)成一指令幀,如否,放棄已接收的數(shù)據(jù),將FIFO讀取指針指向接收指針;若是,則讀取是否為擴展幀,若為擴展幀則立即讀取擴展幀,否則等待接收下一數(shù)據(jù)幀;提取出數(shù)據(jù)幀之后,單片機將數(shù)據(jù)幀的大小和所在的位置記錄下來。
從以太網(wǎng)端口接收緩存中提取的數(shù)據(jù)幀的方法是:根據(jù)MAC數(shù)據(jù)幀格式去掉MAC首尾,并忽略空指令幀,剩下的步驟同從串口接收FIFO緩存中提取完整的數(shù)據(jù)幀的方法。
前面所述的將完整數(shù)據(jù)幀封裝于以太網(wǎng)數(shù)據(jù)幀的方法是:如果同時有多個數(shù)據(jù)幀要通過以太網(wǎng)端口發(fā)送,則把這幾個數(shù)據(jù)幀盡可能放在一個數(shù)據(jù)包發(fā)送,如果這些數(shù)據(jù)幀長度大于以太網(wǎng)數(shù)據(jù)幀最大長度,則分開發(fā)送;如果數(shù)據(jù)幀長度過短,小于以太網(wǎng)最短數(shù)據(jù)幀長度,則在發(fā)送的數(shù)據(jù)幀之后補充8個為0的字節(jié)的空指令幀,直到長度大于最短要求;就緒的以太網(wǎng)數(shù)據(jù)幀放在以太網(wǎng)的發(fā)送緩存中。
對于串口,DMA控制完成轉(zhuǎn)發(fā)的方法是,將DMA的發(fā)送指針指向要發(fā)送的數(shù)據(jù)的首字節(jié),并設(shè)定發(fā)送長度,隨后啟動DMA進行發(fā)送。如(圖3)串口1的接收環(huán)形FIFO中有一數(shù)據(jù)幀要轉(zhuǎn)發(fā)至串口3,則串口3的DMA發(fā)送指針指向串口1的接收環(huán)形FIFO的中數(shù)據(jù)幀的首字節(jié),DMA的發(fā)送長度等于要發(fā)送的數(shù)據(jù)幀長度。
對于以太網(wǎng)端口,DMA控制完成轉(zhuǎn)發(fā)的方法是,將DMA的發(fā)送指針指向以太網(wǎng)端口發(fā)送緩存的首字節(jié),并設(shè)定發(fā)送長度,隨后啟動DMA進行發(fā)送。
單片機根據(jù)數(shù)據(jù)幀目標地址轉(zhuǎn)發(fā)實現(xiàn)了各串口間的數(shù)據(jù)交換,相當于接入網(wǎng)絡(luò)的所有串口都是連接直通的。(圖1)所示的網(wǎng)絡(luò)中,根據(jù)本發(fā)明的方法,接入同一個交換機的串口之間的通訊,單片機處理器很少干預數(shù)據(jù)收發(fā),收發(fā)由DMA負責,因此可以獲得很高的實時性,通訊延遲可以在1us以內(nèi),也正是如此,一個單片機處理器就能完成6路串口的數(shù)據(jù)交換任務(wù)。而接入不同的交換機之間的串口通訊,因為以太網(wǎng)的傳輸速率為100Mbps且可以遠距離傳輸(10-100米),這種方法實現(xiàn)了遠距離高實時性高速率。
單片機置監(jiān)視運行環(huán)節(jié),一旦檢測到故障發(fā)生,系統(tǒng)可在5us以內(nèi)重啟;重啟會短暫中斷通訊,小于5us,但是由于數(shù)據(jù)幀帶有校驗字節(jié),接入設(shè)備會檢測到數(shù)據(jù)流故障,重新發(fā)送數(shù)據(jù)包,由于整個系統(tǒng)高實時性,不會對系統(tǒng)產(chǎn)生破壞性影響。
需要說明的是,本發(fā)明實施例中所有使用“第一”和“第二”的表述均是為了區(qū)分兩個相同名稱非相同的實體或者非相同的參量,可見“第一”“第二”僅為了表述的方便,不應理解為對本發(fā)明實施例的限定,后續(xù)實施例對此不再一一說明。
所屬領(lǐng)域的普通技術(shù)人員應當理解:以上任何實施例的討論僅為示例性的,并非旨在暗示本公開的范圍(包括權(quán)利要求)被限于這些例子;在本發(fā)明的思路下,以上實施例或者不同實施例中的技術(shù)特征之間也可以進行組合,步驟可以以任意順序?qū)崿F(xiàn),并存在如上所述的本發(fā)明的不同方面的許多其它變化,為了簡明它們沒有在細節(jié)中提供。
另外,為簡化說明和討論,并且為了不會使本發(fā)明難以理解,在所提供的附圖中可以示出或可以不示出與集成電路(IC)芯片和其它部件的公知的電源/接地連接。此外,可以以框圖的形式示出裝置,以便避免使本發(fā)明難以理解,并且這也考慮了以下事實,即關(guān)于這些框圖裝置的實施方式的細節(jié)是高度取決于將要實施本發(fā)明的平臺的(即,這些細節(jié)應當完全處于本領(lǐng)域技術(shù)人員的理解范圍內(nèi))。在闡述了具體細節(jié)(例如,電路)以描述本發(fā)明的示例性實施例的情況下,對本領(lǐng)域技術(shù)人員來說顯而易見的是,可以在沒有這些具體細節(jié)的情況下或者這些具體細節(jié)有變化的情況下實施本發(fā)明。因此,這些描述應被認為是說明性的而不是限制性的。
盡管已經(jīng)結(jié)合了本發(fā)明的具體實施例對本發(fā)明進行了描述,但是根據(jù)前面的描述,這些實施例的很多替換、修改和變型對本領(lǐng)域普通技術(shù)人員來說將是顯而易見的。例如,其它存儲器架構(gòu)(例如,動態(tài)RAM(DRAM))可以使用所討論的實施例。
本發(fā)明的實施例旨在涵蓋落入所附權(quán)利要求的寬泛范圍之內(nèi)的所有這樣的替換、修改和變型。因此,凡在本發(fā)明的精神和原則之內(nèi),所做的任何省略、修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。