www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]通用可靠的串口/以太網(wǎng)網(wǎng)關(guān)設(shè)計

摘要:介紹了一種串口以太網(wǎng)嵌入式網(wǎng)關(guān)的設(shè)計方案,詳細討論了串口可靠通信的實現(xiàn)方法,并在開源操作系統(tǒng)RTThread和微處理器S3C2 440開發(fā)板的軟硬件平臺上實現(xiàn)。網(wǎng)關(guān)實際應(yīng)用于一個無線傳感器網(wǎng)絡(luò)項目,實驗表明該網(wǎng)關(guān)能實現(xiàn)可靠的數(shù)據(jù)通信。
關(guān)鍵詞:串口/以太網(wǎng)網(wǎng)關(guān);可靠串口通信;RT-Thread;S3C2440

引言
    隨著物聯(lián)網(wǎng)的蓬勃發(fā)展,越來越多的傳統(tǒng)本地設(shè)備或網(wǎng)絡(luò)有接入計算機網(wǎng)絡(luò)的需求,而這些傳統(tǒng)沒備一般都是不具備網(wǎng)絡(luò)接口的非IP設(shè)備。最常用的通信接口是串口,不能直接接入計算機網(wǎng)絡(luò),在不改變這些原有設(shè)備的基礎(chǔ)上,使用串口/以太網(wǎng)網(wǎng)關(guān)來接入計算機網(wǎng)絡(luò)的方式不失為一種比較好的解決方案。


    基于此需求,設(shè)計和實現(xiàn)了串口/以太網(wǎng)網(wǎng)關(guān),網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。實現(xiàn)了非IP設(shè)備與IP設(shè)備間的數(shù)據(jù)通信,并特別考慮了串口通信的可靠性,從軟件和硬件兩方面詳細討論了保證串口通信可靠性的方法。IP端通信的可靠性由TCP/IP協(xié)議保證,這樣就保證了串口設(shè)備與IP設(shè)備間通信的可靠性。

1 網(wǎng)關(guān)工作原理
1.1 概 述
    網(wǎng)關(guān)實現(xiàn)串口設(shè)備和以太網(wǎng)之間的協(xié)議轉(zhuǎn)換,具體表現(xiàn)為幀格式的轉(zhuǎn)換,可表示為:
    Socket幀←→凈荷數(shù)據(jù)←→串口幀
    其中Socket(套接字)幀和串口幀郜是為實現(xiàn)網(wǎng)關(guān)可靠通信而自定義格式的幀,凈荷數(shù)據(jù)為真正需要傳送的應(yīng)用數(shù)據(jù)。
    網(wǎng)關(guān)的數(shù)據(jù)通信可分為兩部分:網(wǎng)絡(luò)端和串口端,要保證整個網(wǎng)關(guān)通信的可靠性,那么就要分別保證網(wǎng)絡(luò)端和串口端通信的可靠性。
    在網(wǎng)絡(luò)端,網(wǎng)關(guān)使用了流式套接字。流式套接字使用TCP協(xié)議,而TCP協(xié)議是面向連接的,保證了數(shù)據(jù)傳輸?shù)恼_性和順序性。所以,流式的套接字可以提供可靠的、面向連接的通信流。但是,流式數(shù)據(jù)對應(yīng)用來說不易使用,所以Socket數(shù)據(jù)傳送都是基于幀格式的。
    在串口端,串口數(shù)據(jù)傳送本質(zhì)上也是字節(jié)流式的,在硬件層次是不可靠的,而且不能保證數(shù)據(jù)的完整性,需要在軟件上有一些其他機制來保證可靠性。所以,網(wǎng)關(guān)串口的數(shù)據(jù)傳送同樣基于幀格式,并且使用了接收確認、超時重發(fā)、差錯校驗等機制來保證可靠性。


    圖2為網(wǎng)關(guān)工作時的數(shù)據(jù)流示意圖。圖中3個帶箭頭的橢圓表示3個線程,圖中未畫出建立Socket連接、串口初始化和線程啟動等過程。[!--empirenews.page--]
1.2 串口數(shù)據(jù)傳送
    串口數(shù)據(jù)傳送的幀格式如下:


    其中各個字段的意義如下:
    ◆SFD:幀首定界符;
    ◆EFD:幀尾定界符,SFD和EFD為確定的特定值;
    ◆Seq:幀序號;
    ◆Type:幀類型,其值見表1;
    ◆LEN:Data字段的字節(jié)數(shù);
    ◆Data:實際要傳送的數(shù)據(jù);
    ◆FCS:幀校驗,是一個簡單校驗,為Seq.至Data字段中所有字節(jié)按位異或運算的結(jié)果。


1.2.1 串口發(fā)送
    串口發(fā)送隊列示意圖如圖3所示。網(wǎng)關(guān)使用FIFO(先入先出)隊列緩沖發(fā)送幀,包括待發(fā)送隊列和待確認隊列兩個隊列,每個隊列為一個雙向循環(huán)鏈表,節(jié)點從尾部插入,頭部讀出。


    當(dāng)有數(shù)據(jù)需要從串口發(fā)送時,首先將要發(fā)送的數(shù)據(jù)按幀格式加上一些附加的字段組成一個完整的幀,然后插入待發(fā)送隊列尾。插入待發(fā)送隊列的幀并不一定會被立即發(fā)送,但只要待發(fā)送隊列中緩沖有需要發(fā)送的幀,串口就會從隊列頭逐個的讀取待發(fā)送幀以中斷的方式發(fā)送,直到待發(fā)送隊列為空。
    每一幀發(fā)送完畢后,如果是確認幀,便會被立即從待發(fā)送隊列中刪除并釋放掉內(nèi)存,該幀的發(fā)送過程結(jié)束;如果是非確認幀,即數(shù)據(jù)幀或命令幀,那么該幀不會被立即釋放,而是從待發(fā)送隊列刪除而插入待確認隊列尾,等待串口另一端的設(shè)備發(fā)送對應(yīng)的確認幀。
    若在超時時間內(nèi)收到對應(yīng)的確認幀,則將該幀從待確認隊列刪除釋放,該幀的發(fā)送過程結(jié)束;若等待超時,則將該幀從待確認刪除并重新插入待發(fā)送隊列尾,以重發(fā)此幀。當(dāng)然有重發(fā)次數(shù)限制,若達到了最大重發(fā)次數(shù)仍然未收到對應(yīng)的確認幀,則丟棄該幀,該幀的發(fā)送過程結(jié)束。[!--empirenews.page--]
1.2.2 串口接收
    串口接收使用中斷方式,從串口接收到的字節(jié)數(shù)據(jù)并不直接處理,而是先存入一個環(huán)形緩沖,環(huán)形緩沖示意圖如圖4所示。從頭偏移處寫入,從尾偏移處讀出,每寫入或讀出一字節(jié)頭或尾都將模遞增,且頭偏移處為空,尾偏移處為滿。


    只要串口接收到數(shù)據(jù),就將其從頭偏移處寫入串口的環(huán)形緩沖。如果緩沖滿了,則用新數(shù)據(jù)覆蓋未處理的舊數(shù)據(jù)。
    在將一個字節(jié)數(shù)據(jù)寫入緩沖的同時,判斷其是否等于幀結(jié)束定界符EFD,如果等于,則表示緩沖中可能存在一個完整的幀(只是可能,并不能完全確定,因為一個普通的字節(jié)數(shù)據(jù)完全有可能正好等于EFD),此時便可從環(huán)形緩沖中按幀格式解析數(shù)據(jù)。若解析到完整的幀,則做相應(yīng)的處理:首先,根據(jù)幀中FCS字段做差錯校驗,如果校驗正確,則從串口回送一個同序號的確認幀;然后從幀中取出凈荷數(shù)據(jù)從Socket發(fā)送。
    從緩沖中解析數(shù)據(jù)的過程簡述如下:從環(huán)形緩沖的尾偏移處開始讀字節(jié)數(shù)據(jù),查驗是否等于幀開始定界符SFD,若不等于則丟棄并繼續(xù)讀下一字節(jié),若等于則向后偏移讀取長度域LEN,根據(jù)長度值,便能確定幀結(jié)束定界符EFD的位置。查驗此位置的字節(jié)數(shù)據(jù),若不等于EFD,則認為之前等于SFD的字節(jié)只是個普通數(shù)據(jù),并不是幀開始定界符,將其丟棄并繼續(xù)讀取查驗下一字節(jié);若等于EFD,則認為SFD到FFD之間為一個完整的幀。
1.3 Socket數(shù)據(jù)傳送
    Socket數(shù)據(jù)傳送的幀格式如下:


    相比串口幀格式,少了Seq.、Type和FCS字段。這三個字段在串口數(shù)據(jù)傳送中是用來保證可靠性的,而網(wǎng)關(guān)使用TCP Socket,下層的TCP協(xié)議會保證通信的可靠性,應(yīng)用層只需要保證數(shù)據(jù)的完整性,所以不需要這些字段。其他字段相同,意義也分別相同。
1 3.1 Socket發(fā)送
    Socket接收過程同串口接收類似,接收的數(shù)據(jù)并不直接處理,而是先存入環(huán)形緩沖。然后,按Socket幀格式,解析環(huán)形緩沖中的數(shù)據(jù)。解析到的數(shù)據(jù)幀插入串口發(fā)送隊列,從串口轉(zhuǎn)發(fā)。
1.3.2 Socket接收
    Socket發(fā)送相比串口發(fā)送操作更簡單,因為下層的TCP協(xié)議會保證通信的可靠性,所以不需要再另外實現(xiàn)確認、重發(fā)等機制,發(fā)送隊列中只需要一個待發(fā)送隊列即可,不需要待確認隊列。而且在具體實現(xiàn)中,并沒有真的構(gòu)造一個Socket發(fā)送隊列,而是利用了操作系統(tǒng)提供的線程間通信機制中的郵箱通信方式,需要從Socket發(fā)送數(shù)據(jù)時,只需將數(shù)據(jù)的首地址以郵件的方式發(fā)送到Socket發(fā)送線程指定的郵箱中。

2 網(wǎng)關(guān)實現(xiàn)
2.1 軟硬件平臺
    網(wǎng)關(guān)軟硬件平臺包括操作系統(tǒng)RT-Thread和ARM9開發(fā)板Mini2440。[!--empirenews.page--]
2. 1. 1 RT-Thread實時操作系統(tǒng)
    為實現(xiàn)網(wǎng)關(guān),選用了實時操作系統(tǒng)RT-Thread。RT-Thread是一款國內(nèi)的開源實時操作系統(tǒng),并且商業(yè)許可證非常寬松,由國內(nèi)一些專業(yè)開發(fā)人員開發(fā)、維護。RT-Thrcad不僅是一款高效、穩(wěn)定的實時核心,也是一套面向嵌入式系統(tǒng)的軟件平臺,覆蓋了全搶占的實時操作系統(tǒng)內(nèi)核小巧的文件系統(tǒng)、輕型的TCP/IP協(xié)議棧以及輕型的圖形用戶界面。


    圖5是RT-Thread及外圍組件的基本框架圖。RT-Thread的使用范圍極為靈活,可以從資源極度緊張的小型系統(tǒng)到帶內(nèi)存管理單元、網(wǎng)絡(luò)功能的基本計算單元。RT-Thread有著高度可配置、易裁減、可擴展性好和可靠性高等特點,適用于嵌入式實時系統(tǒng)。
2. 1.2 Mini2440開發(fā)板
    硬件平臺使用了Mini2440開發(fā)板,Mini2440是一款A(yù)RM9開發(fā)板,微處理器采用三星公司的S3C2440芯片,具有64 MB SDRAM、128 MB/256 MB/1 GB大小可選的NAND F1ash和2 MB NOR Flash,外設(shè)包括1個100M以太網(wǎng)RJ-45口(采用DM9000網(wǎng)卡)和3個串口等。
2.2 網(wǎng)關(guān)實現(xiàn)
2. 2.1 軟件相關(guān)
    如圖2所示,系統(tǒng)使用了3個線程:串口接收線程、Socket發(fā)送線程和Socket接收線程,下面對這3個線程作具體介紹:
    ①串口接收線程。以阻塞的方式接收“UART_RX_IRQ_EVENT”事件,接收到此事件后,從串口環(huán)形接收緩沖中解析串口幀,當(dāng)有數(shù)據(jù)幀需要向以太網(wǎng)發(fā)送時,便將該數(shù)據(jù)幀的首地址以郵件的方式給Socket發(fā)送線程。而在RT_Thread中,郵件的存儲方式本質(zhì)是雙向循環(huán)隊列。
    ②Socket發(fā)送線程。以阻塞的方式接收來自串口接收線程的指針郵件,接收到此類郵件后,Socket發(fā)送線程將指針指向的數(shù)據(jù)封裝成Socket幀發(fā)送。
    ③Socket接收線程。用于從以太網(wǎng)接收數(shù)據(jù),并緩存解析數(shù)據(jù)幀,調(diào)用串口發(fā)送接口函數(shù),將收到的數(shù)據(jù)幀封裝成串口幀并插入串口發(fā)送隊列。
    串口收/發(fā)工作于中斷方式,可以連續(xù)發(fā)送串口發(fā)送隊列中緩存的待發(fā)送幀和從串口接收字節(jié)數(shù)據(jù)并寫入串口的環(huán)形接收緩存。在接收到等于EFD的字節(jié)時,向串口接收線程發(fā)送一個“UART_RX_IRQ_EVENT”事件,通知串口接收線程環(huán)形緩存中可能存在一個完整的幀。
    串口幀發(fā)送完畢后等待確認幀的時間計時使用了RT-Thrcad提供的定時器,并且在定時器的超時函數(shù)中處理幀重發(fā)問題。
    在軟件實現(xiàn)過程中遇到了一個問題:在RT-Thread操作系統(tǒng)的中斷程序中不能申請和釋放動態(tài)內(nèi)存,而串口中斷發(fā)送程序往發(fā)送完一個幀后,如果該幀是確認幀或非確認幀但達到了最大發(fā)送次數(shù),那么需要從待發(fā)送隊列刪除該幀并釋放對應(yīng)的動態(tài)內(nèi)存。這就存在矛盾,系統(tǒng)小能提供中斷程序釋放內(nèi)存的功能,但實際應(yīng)用又需要此功能。
    為此,程序中專門設(shè)置了一個刪除隊列,當(dāng)中斷程序需要釋放發(fā)送幀時,將對應(yīng)幀插入刪除隊列,并向串口接收線程發(fā)送一個刪除事件“UART_TX_DEL_EVENT”,在串口接收線程中接收到此事件后再來釋放隊列中的幀,這就避免了在串口發(fā)送中斷程序中直接釋放動態(tài)內(nèi)存。
2.2.2 硬件相關(guān)
    在硬件方面,為提高串口通信的可靠性,也做了相應(yīng)處理。
    S3C2440微處理器的串口具有兩種工作模式:非FIFO模式和FIFO模式。在FIFO模式中,串口發(fā)送和接收分別具有64字節(jié)的硬件FIFO緩沖,使用硬件緩沖,能顯著地減少串口發(fā)送和接收中斷產(chǎn)生的次數(shù),進而減小止常程序被中斷的頻率,提高系統(tǒng)性能。并且使用接收FIFO后,在處理器不能及時跳轉(zhuǎn)到串口接收中斷程序的情況下,由于硬件FIFO的存在,使得串口數(shù)據(jù)丟失的可能性減小。所以,網(wǎng)關(guān)中S3C2440微處理器的串口使用了FIFO模式。
    另外,S3C2440微處理器的串口還具有硬件自動流控制功能,當(dāng)與網(wǎng)關(guān)相連的串口設(shè)備也具有硬件自動流控制功能時,開啟此功能。在開啟此功能的情況下,當(dāng)通信的某一端不能及時讀取接收緩沖中的數(shù)據(jù)時,硬件自動流控制能自動暫停另一端串口的數(shù)據(jù)發(fā)送,以防止數(shù)據(jù)的丟失。
    在網(wǎng)關(guān)的軟件實現(xiàn)中,確認機制的開關(guān)、確認超時時間、重發(fā)次數(shù)、隊列容量、緩沖的大小、串口的FIFO設(shè)置和硬件流控制的開關(guān)等都是可配置的,針塒不同的應(yīng)用可以非常容易地做出合適的裁剪和設(shè)置。

結(jié)語
    目前該網(wǎng)關(guān)被用于一個無線體溫監(jiān)測項目,以連接本地?zé)o線傳感網(wǎng)絡(luò)和遠程數(shù)據(jù)庫服務(wù)器,實現(xiàn)本地設(shè)備對遠程數(shù)據(jù)庫服務(wù)器的訪問,通過實際運行實驗,網(wǎng)關(guān)能很好地實現(xiàn)本文講述的功能。當(dāng)然,網(wǎng)關(guān)仍然有不盡完善之處,比如對有些公共資源的訪問沒有提供競爭保護機制,可能會影響網(wǎng)關(guān)運行的穩(wěn)定性和可靠性,有待今后進一步完善。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉