《電子技術應用》
您所在的位置:首頁 > 通信與網(wǎng)絡 > 設計應用 > 基于單片機的嵌入式系統(tǒng)網(wǎng)絡接入方案
基于單片機的嵌入式系統(tǒng)網(wǎng)絡接入方案
來源:中電網(wǎng)
摘要: 在網(wǎng)絡技術應用日益廣泛的今天,,網(wǎng)絡傳輸是最經(jīng)濟有效的數(shù)據(jù)傳輸方式,。如何利用廉價的51單片機來控制網(wǎng)卡芯片進行數(shù)據(jù)傳輸,加載TCP/IP協(xié)議連接到互聯(lián)網(wǎng),,實現(xiàn)網(wǎng)絡通信成了眾多設計者的目標,。但由于指令及資源的限制,,實施過程會有許多困難。我們在設計方案中舍棄了耗費資源的高級協(xié)議,,采用發(fā)送小數(shù)據(jù)包的方式以避免分段,,來簡化TCP協(xié)議和UDP協(xié)議,實現(xiàn)互聯(lián)接入,。
Abstract:
Key words :

引言

在網(wǎng)絡技術應用日益廣泛的今天,,網(wǎng)絡傳輸是最經(jīng)濟有效的數(shù)據(jù)傳輸方式。如何利用廉價的51單片機來控制網(wǎng)卡芯片進行數(shù)據(jù)傳輸,,加載TCP/IP協(xié)議連接到互聯(lián)網(wǎng),,實現(xiàn)網(wǎng)絡通信成了眾多設計者的目標。但由于指令及資源的限制,,實施過程會有許多困難,。我們在設計方案中舍棄了耗費資源的高級協(xié)議,采用發(fā)送小數(shù)據(jù)包的方式以避免分段,,來簡化TCP協(xié)議和UDP協(xié)議,,實現(xiàn)互聯(lián)接入。

硬件設計與實現(xiàn)

系統(tǒng)的硬件結(jié)構(gòu)框圖如圖1所示,。本系統(tǒng)的微控制器是Winbond公司的78E58,,網(wǎng)絡接口芯片是與NE2000系列兼容的Realtek公司的RTL8019AS。RTL8019AS內(nèi)置了10BASE-T收發(fā)器,,外接一個隔離LPF濾波器,經(jīng)RJ-45接口輸出,。外部RAM是62256,,24C02是I2C總線的 EEPROM。

嵌入式協(xié)議轉(zhuǎn)換硬件框圖

圖1 嵌入式協(xié)議轉(zhuǎn)換硬件框圖

系統(tǒng)的軟件設計與實現(xiàn)

為適應上網(wǎng)的需求,,系統(tǒng)軟件設計主要包括兩部分內(nèi)容:一是要執(zhí)行對RTL8019AS等的控制功能,,二是要執(zhí)行與連接Internet相關的功能,實現(xiàn)TCP/IP協(xié)議,。本文著重介紹第二部分,,主程序采用C51語言編寫。

RTL8019AS初始化

要將嵌入式系統(tǒng)接入以太網(wǎng),首先要設置RTL8019AS的工作方式和工作狀態(tài),,分配收發(fā)數(shù)據(jù)的緩沖區(qū),,通過對地址及數(shù)據(jù)口的讀寫來完成以太網(wǎng)幀的接收與發(fā)送。然后設置RTL8019AS的工作參數(shù),,亦即設置內(nèi)部控制寄存器,。對RTL8019AS的工作參數(shù)進行設置完畢后,進入正常工作狀態(tài),,接下來就讀寫RTL8019AS的RAM以完成數(shù)據(jù)包的接收和發(fā)送,。由于篇幅有限,這里就不再詳述,。

TCP/IP模型

TCP/IP協(xié)議是一套把Internet上的各種系統(tǒng)互連起來的協(xié)議族,,保證Internet上數(shù)據(jù)的準確快速傳輸。TCP/IP通常采用一種簡化的四層模型:應用層,、傳輸層,、網(wǎng)絡層、鏈路層,。

本系統(tǒng)中,,應用層傳遞來自以太網(wǎng)和數(shù)據(jù)終端的數(shù)據(jù),并對數(shù)據(jù)報作打包拆包處理,。傳輸層采用傳輸控制協(xié)議TCP或用戶數(shù)據(jù)協(xié)議UDP,。網(wǎng)絡層實現(xiàn)IP協(xié)議,還要實現(xiàn)能報告數(shù)據(jù)傳輸差錯等情況的ICMP協(xié)議,。鏈路層部分由RTL8019AS完成,,鏈路層由控制同一物理網(wǎng)絡上的不同機器間數(shù)據(jù)傳送的底層協(xié)議組成。

在單片機里只實現(xiàn)與需要有關的部分,,而不使用的協(xié)議則一概不支持,。單片機應用的TCP/IP協(xié)議大多是為了完成數(shù)據(jù)采集和數(shù)據(jù)傳輸,而不需要網(wǎng)頁瀏覽,、文件傳輸這些功能,。

ARP協(xié)議(地址解析協(xié)議)

以太網(wǎng)是TCP/IP協(xié)議主要采用的局域網(wǎng)技術,是系統(tǒng)接入Internet的基礎,。ARP本質(zhì)是完成網(wǎng)絡地址到以太網(wǎng)物理地址的動態(tài)映射,。UNIX系統(tǒng)的ARP協(xié)議支持以太網(wǎng)、令牌環(huán)等網(wǎng)絡,,但我們的單片機系統(tǒng)里只支持以太網(wǎng),。

IP協(xié)議(網(wǎng)際協(xié)議)

IP是TCP/IP協(xié)議族中最為核心的協(xié)議。所有的TCP,、UDP,、ICMP及IGMP數(shù)據(jù)都以IP數(shù)據(jù)報格式傳輸,。就對某些協(xié)議而言,IP包最大可以為65K,,可以分段傳輸,,而在單片機里根本無法容納如此大的數(shù)據(jù)包,因此一般是不支持分段的,。我們的設計中采用發(fā)送小數(shù)據(jù)包的方式,,以避免分段。

TCP協(xié)議(傳輸控制協(xié)議)

TCP數(shù)據(jù)封裝在一個IP數(shù)據(jù)報中,,并具有自己的TCP首部,, TCP協(xié)議定義十分復雜,鑒于51單片機的片內(nèi)資源十分有限,,本系統(tǒng)對TCP協(xié)議進行了一定的簡化處理,。標準的TCP協(xié)議使用慢啟動的滑動窗口機制,如果只使用單個窗口,,就變成了一種簡單確認的處理方法,。即只需對單個數(shù)據(jù)報發(fā)送和確認,節(jié)約了系統(tǒng)資源,,也使維護更加方便,。

編程實現(xiàn)TCP協(xié)議的另一個難點在于TCP建立連接和終止連接的具體過程的實現(xiàn)。TCP協(xié)議是一個面向連接的協(xié)議,,連接的雙方無論是哪一方向另一方發(fā)送數(shù)據(jù),,都必須先通過“三次握手”過程在雙方之間建立一條連接,和通過“四次握手”終止連接,。

連接建立后,,TCP就可以發(fā)送數(shù)據(jù)塊,稱為數(shù)據(jù)段,。當TCP發(fā)出一個段后,,它啟動一個定時器,等待目的端確認收到這個報文段,。如果不能及時收到一個確認,,將重發(fā)這個報文段。另外,,TCP將保持它首部和數(shù)據(jù)的檢驗和,。

系統(tǒng)主應用程序的實現(xiàn)

系統(tǒng)初始化后,進入主程序循環(huán)的兩部分:一是對接收到的以太網(wǎng)數(shù)據(jù)幀進行解包,,供應用程序使用,一是對發(fā)送的數(shù)據(jù)進行封裝并發(fā)送,,使采用TCP/IP協(xié)議的以太網(wǎng)內(nèi)的所有計算機都能收到此數(shù)據(jù)幀,。圖2是系統(tǒng)的主應用程序的流程圖,。

系統(tǒng)的主應用程序的流程圖

圖3 系統(tǒng)的主應用程序的流程圖

單片機實現(xiàn)TCP/IP協(xié)議的難點

51單片機的程序空間、可用的內(nèi)存RAM,、運算速度,、指令集等原因,在UNIX或Windows上實現(xiàn)的TCP/IP協(xié)議的源代碼并不能夠直接移植到8位的單片機上,。在51單片機上編寫代碼會受許多限制,,特別是實現(xiàn)TCP/IP協(xié)議這樣關系復雜的程序,我們必須根據(jù)實際情況盡可能挖掘51單片機的性能,。綜合來說,,單片機實現(xiàn)與UNIX實現(xiàn)TCP/IP有如下區(qū)別:

(1)操作系統(tǒng):Windows或UNIX都是多任務操作系統(tǒng),這使得代碼編寫簡單化,,在單片機只能是單任務系統(tǒng),,代碼結(jié)構(gòu)為順序執(zhí)行+硬件中斷的方式,無法并發(fā)執(zhí)行,。

(2)內(nèi)存分配:Windows或UNIX的內(nèi)存分配是動態(tài)的,。而一般單片機只有外接的一塊32K字節(jié)的RAM,并同時被各個協(xié)議使用,。一個最大的以太網(wǎng)數(shù)據(jù)包有1.5K字節(jié),,分配一包的緩沖區(qū)就要1.5K字節(jié)。為此,,我們分配一個256×6=1536個字節(jié)的固定的RAM來存放收到的以太網(wǎng)數(shù)據(jù)包,。收到一包就處理一包。

(3)指針:在PC里所有程序都必須先放在RAM里才能運行,,所以它的指針都指向RAM,。而單片機的結(jié)構(gòu)和PC的結(jié)構(gòu)有很大差別,指針類型很多,,各指針運算的速度也不一樣,,特別是“一般指針”運算很慢,還會占用很多程序空間,。UNIX實現(xiàn)TCP/IP的源代碼中,,用得最多的就是指針,而在單片機里一般要求少用指針,,或使用特定類型的指針,。對使用UNIX的源代碼需要作很多的改動。

(4)參數(shù)傳遞:在UNIX實現(xiàn)的TCP/IP源代碼中,,一般有很多的參數(shù)傳遞,,而在單片機里允許傳遞的參數(shù)是有限的(因為受到內(nèi)部RAM的限制),同時參數(shù)傳遞的過程要浪費程序代碼空間,,也降低單片機執(zhí)行速度,。所以在單片機的實現(xiàn)里,,一般不要做太多的參數(shù)傳遞,而多使用公共的全局變量來實現(xiàn)調(diào)用的過程,。

(5)硬件接口:在UNIX或Windows里,,對網(wǎng)卡驅(qū)動無一例外都是采用中斷方式,因為PC的處理速度快,,一次中斷的處理時間也很短,,不會影響系統(tǒng)內(nèi)的其它中斷。而在單片機的應用中,,大部分的方案都是查詢式的,。PC的NE2000的網(wǎng)卡,一般都是用16位DMA的方式,,而在單片機里卻只能用8位DMA方式,。這也使UNIX對網(wǎng)卡驅(qū)動的代碼不能直接移植。

結(jié)語

本文設計的嵌入式網(wǎng)絡接入方案,,采用廉價的8位51單片機實現(xiàn)了簡化TCP協(xié)議和UDP協(xié)議,,并支持主動和被動連接、跨越網(wǎng)關,,實現(xiàn)互聯(lián)網(wǎng)接入,,在被控設備與上位控制機之間提供了一條透明的傳輸通道,用戶不需對原有串口設備或其他數(shù)字設備做任何修改,,就可享受到網(wǎng)絡的好處,。目前,本文的系統(tǒng)已被成功使用在網(wǎng)絡化的數(shù)據(jù)采集器中,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權禁止轉(zhuǎn)載。