1. 引言
單片機(jī)系統(tǒng)以其簡(jiǎn)單、高效的特點(diǎn),在工業(yè)控制和日常生活中應(yīng)用越來越廣泛。目前大多數(shù)單片機(jī)系統(tǒng)是以51 單片機(jī)為核心,與檢測(cè)、伺服、顯示設(shè)備配合起來實(shí)現(xiàn)監(jiān)控功能。
然而,這些監(jiān)控系統(tǒng)的數(shù)據(jù)傳輸多采用RS-232、RS-485 以及各種現(xiàn)場(chǎng)總線,這些方式有些通信速度不夠快,有些距離不夠遠(yuǎn),且各種總線之間難于實(shí)現(xiàn)互連和互操作。以太網(wǎng)作為目前應(yīng)用最為廣泛的局域網(wǎng),在工業(yè)自動(dòng)化和過程控制領(lǐng)域得到了越來越多的應(yīng)用。同時(shí),隨著Internet 的普及,現(xiàn)代通信技術(shù)的進(jìn)步,基于TCP/IP 和Client/Server 架構(gòu)的分布式監(jiān)控技術(shù)也日趨成熟。把嵌入式系統(tǒng)連接到Internet 上,就可以方便、低廉地把信息傳送到世界的任何一個(gè)地方。
傳統(tǒng)的遠(yuǎn)程監(jiān)控系統(tǒng)一般采用C/S 模型的方式,主要針對(duì)大型的設(shè)備進(jìn)行監(jiān)控。對(duì)于如攝像頭圖象監(jiān)控﹑家用儀表﹑門禁控制系統(tǒng)等小型的設(shè)備的監(jiān)控就需要采用低成本的方案。
鑒于此,在低成本的單片機(jī)系統(tǒng)上移植精簡(jiǎn)的TCP/IP 協(xié)議簇,實(shí)現(xiàn)對(duì)于小型設(shè)備遠(yuǎn)程監(jiān)控是最佳選擇。該系統(tǒng)以Web 方式實(shí)現(xiàn),用戶可以在任何一臺(tái)裝有瀏覽器的PC 機(jī)上進(jìn)行遠(yuǎn)程監(jiān)視與控制,具有價(jià)格低廉、操作方便、界面友好等優(yōu)點(diǎn)。傳統(tǒng)的遠(yuǎn)程監(jiān)控系統(tǒng)模型與本系統(tǒng)采用的模型如圖1 和圖2 所示。
圖1 傳統(tǒng)遠(yuǎn)程監(jiān)控系統(tǒng)模型
圖2 單片機(jī)監(jiān)控系統(tǒng)模型
2. 系統(tǒng)硬件設(shè)計(jì)
本系統(tǒng)以 Cygnal 公司的完全集成的混合信號(hào)系統(tǒng)級(jí)芯片(SOC)C8051F020 單片機(jī)為核心,采用Realtek 公司的10M 自適應(yīng)以太網(wǎng)控制器RTL8019AS 實(shí)現(xiàn)系統(tǒng)的網(wǎng)絡(luò)接口部分。
SRAM 部分用于存放大量的數(shù)據(jù)信息。數(shù)據(jù)采集部分用于采集系統(tǒng)需要監(jiān)控的設(shè)備的運(yùn)行情況,由于C8051F020 內(nèi)部帶有真正12 位100 ksps 的8 通道ADC 帶PGA 和模擬多路開關(guān),還有兩個(gè)12 位DAC 可編程更新時(shí)序,可以方便的進(jìn)行模擬信號(hào)采集和對(duì)外設(shè)進(jìn)行控制。
C8051F020 單片機(jī)內(nèi)置64K FLASH 程序存儲(chǔ)器、4K 內(nèi)部SRAM,可以嵌入TCP /IP 協(xié)議, 從而實(shí)現(xiàn)嵌入式Web Sever 的功能。RTL8019AS 集成了介質(zhì)訪問控制子層(MAC)和物理層的性能,與單片機(jī)的接口簡(jiǎn)單,可以方便地用來設(shè)計(jì)基于ISA 總線的系統(tǒng)。另外,它還具有與NE2000 兼容、軟件移植性好以及價(jià)格低廉等優(yōu)點(diǎn),所以特別適合用于嵌入式系統(tǒng)。
圖3 系統(tǒng)框圖
3.系統(tǒng)軟件設(shè)計(jì)
3.1 軟件流圖設(shè)計(jì)
軟件的實(shí)現(xiàn)主要是根據(jù)數(shù)據(jù)在網(wǎng)絡(luò)中傳輸?shù)姆较蚝蛿?shù)據(jù)的流向來實(shí)現(xiàn)的。在本設(shè)計(jì)中數(shù)據(jù)的流向?yàn)椋赫?qǐng)求信息從局域網(wǎng)中來,通過RJ 45 送到RTL80l9AS,處理后的數(shù)據(jù)包送入單片機(jī)系統(tǒng)的協(xié)議棧,由協(xié)議棧對(duì)數(shù)據(jù)包進(jìn)行解析,得到原始請(qǐng)求信息。請(qǐng)求信息再經(jīng)過單片機(jī)系統(tǒng)的處理,產(chǎn)生回復(fù)信息?;貜?fù)信息到局域網(wǎng)的過程與上面正好相反。整個(gè)系統(tǒng)的軟件流程如上圖4 所示。
圖4 軟件框圖
3.2 RTL8019 接收與發(fā)送數(shù)據(jù)
1.RTL8019 芯片初始化主要是將網(wǎng)卡設(shè)置成正常的模式,跟外部網(wǎng)絡(luò)連接。清除所有中斷標(biāo)志位,讓芯片開始工作。
2.對(duì)RTL8019 接收數(shù)據(jù)操作,有查詢和中斷兩種方式。因?yàn)閱纹瑱C(jī)的速度和PC 機(jī)相差太遠(yuǎn),而且還有一些采集任務(wù),本系統(tǒng)不采用中斷方式,用查詢方式。在查詢方式下,通過查詢CURR 和BNRY 兩個(gè)寄存器的值來判斷是否收到一幀數(shù)據(jù)。當(dāng)BNRY+1 與CURR不相等,說明接收緩沖區(qū)接收到了新的數(shù)據(jù)幀。圖5 為RTL8019 報(bào)頭格式,接收部分子程序如下:
UCHAR xdata * rcve_frame(void) //如收到有效數(shù)據(jù)包,返回收到的數(shù)據(jù),否則返回NULL
圖5 RTL8019 報(bào)頭格式
3.數(shù)據(jù)的發(fā)送包含三個(gè)步驟:封裝數(shù)據(jù)包;通過遠(yuǎn)程DMA 將數(shù)據(jù)包送入RTL8019AS的數(shù)據(jù)發(fā)送緩沖區(qū);通過RTL8019 的本地DMA 將數(shù)據(jù)送入FIFO 進(jìn)行發(fā)送。具體過程如下:
(1)包在發(fā)送前應(yīng)該按規(guī)定的格式封裝好,格式如下圖6 所示:
圖6 MAC 幀首部
(2)把上面的數(shù)據(jù)包通過遠(yuǎn)程DMA 寫入RTL8019AS 的數(shù)據(jù)發(fā)送緩沖區(qū);
(3)啟動(dòng)本地DMA,把數(shù)據(jù)發(fā)送出去,數(shù)據(jù)包長(zhǎng)度最小為60 字節(jié),最大1514 字節(jié)。
發(fā)送子程序?yàn)椋簐oid send_frame(UCHAR xdata * outbuf,UINT len)//發(fā)送一個(gè)數(shù)據(jù)包3.3 TCP/IP 協(xié)議棧的實(shí)現(xiàn)。
3.3.1 ARP 協(xié)議的實(shí)現(xiàn)
ARP 地址解析協(xié)議的本質(zhì)是完成網(wǎng)絡(luò)地址到物理地址的映射。物理地址有以太網(wǎng)和令牌環(huán)網(wǎng)兩種基本類型,網(wǎng)絡(luò)地址特指IP 地址。具體到以太網(wǎng),使用的是動(dòng)態(tài)綁定轉(zhuǎn)換的方法,但是會(huì)遇到許多細(xì)節(jié)問題,例如減少?gòu)V播,ARP 包丟失,物理地址變更(更換網(wǎng)卡)、移動(dòng)(移動(dòng)設(shè)備到另一子網(wǎng))、消失(關(guān)機(jī))等。一般是設(shè)置ARP 高速緩存,通過學(xué)習(xí)、老化、更新、溢出算法處理ARP 映射表來解決這些問題。整個(gè)ARP 處理過程,主要用5 個(gè)函數(shù)實(shí)現(xiàn)。
在實(shí)現(xiàn)網(wǎng)卡驅(qū)動(dòng)程序后,所有ARP 處理操作就是填寫ARP 包。主要程序代碼編制如下:
(1)void init_arp(void)//完成ARP 表初始化,概括說就是ARP 表state 字段清0
(2)void arp_send(UCHAR * hwaddr,ULONG ipaddr,UCHAR msg_type)//完成ARP 請(qǐng)求
(3)void arp_rcve(UCHAR xdata * inbuf)// 完成響應(yīng)操作
(4)UCHAR xdata * arp_resolve(ULONG dest_ipaddr) //完成從cache 里面查找對(duì)應(yīng)//IP 地址的物理地址,如果沒有,就發(fā)送ARP 請(qǐng)求
3.3.2 IP 協(xié)議的實(shí)現(xiàn)
網(wǎng)際協(xié)議 IP 是TCP/IP 協(xié)議族中最為核心的協(xié)議,它的主要功能是負(fù)責(zé)把數(shù)據(jù)交付給主機(jī),當(dāng)目標(biāo)主機(jī)與原主機(jī)處于不同的物理網(wǎng)絡(luò)中時(shí),IP 負(fù)責(zé)把數(shù)據(jù)包路由到相應(yīng)的目標(biāo)網(wǎng)絡(luò)上。Internet 上所有的數(shù)據(jù)都以IP 數(shù)據(jù)包格式傳輸。IP 協(xié)議最大的特點(diǎn)是提供不可靠的和無(wú)連接的數(shù)據(jù)包傳送服務(wù)。IP 協(xié)議主要實(shí)現(xiàn)以下兩個(gè)子程序:
(1) void ip_send(UCHAR xdata*outbuf,ULONG ipaddr, UCHAR proto_ id,DINT len)//發(fā)送IP 數(shù)據(jù);該子程序用來創(chuàng)建一個(gè)發(fā)送數(shù)據(jù)報(bào)。
(2) void ip_rcve(UCHAR xdata *inbuf) //接收IP 數(shù)據(jù);該子程序檢測(cè)一個(gè)外來數(shù)據(jù)包,并對(duì)數(shù)據(jù)包作相應(yīng)的處理。
3.3.3 TCP 協(xié)議的實(shí)現(xiàn)
1.使用TCP 狀態(tài)機(jī):TCP 協(xié)議是整個(gè)TCP/IP 協(xié)議的核心,也是傳輸層中最復(fù)雜的協(xié)議。TCP 協(xié)議在兩個(gè)端點(diǎn)之間建立了等效于物理連接的邏輯連接。數(shù)據(jù)沿著這個(gè)連接雙向傳輸。連接的雙方必須對(duì)發(fā)送和接收的數(shù)據(jù)保持跟蹤,以便能夠檢測(cè)出數(shù)據(jù)流中的遺漏和重復(fù)。
2.使用簡(jiǎn)單的確認(rèn)機(jī)制:序列號(hào)和確認(rèn)號(hào)這兩個(gè)字段用于協(xié)同完成TCP 協(xié)議中的確認(rèn)工作。對(duì)于每個(gè)接收到的數(shù)據(jù)包進(jìn)行確認(rèn)號(hào)的計(jì)算,需要從接收到的數(shù)據(jù)包中提取TCP 報(bào)文的數(shù)據(jù)部分長(zhǎng)度,并進(jìn)行計(jì)算,這增加了處理器的運(yùn)算量。但如果每次只對(duì)單個(gè)TCP 報(bào)文進(jìn)行確認(rèn)的話,并沒有太大的難度。TCP 協(xié)議主要包含的程序如下:
(1) init_tcp(void) //初始化TCP 協(xié)議
(1) Tcp_send(UINT flags, DINT hdr_len, UCHAR nr) //發(fā)送TCP
(2) Tcp_retransmit(void) //重發(fā)TCP 數(shù)據(jù)
(3) Tcp_inactivity(void) //停止TCP
(4) Tcp_rcve(UCHAR xdata * inbuf, UINT len) //接收TCP 數(shù)據(jù)
3.3.4 HTTP 協(xié)議簡(jiǎn)介
HTTP 協(xié)議是TCP 協(xié)議的高層協(xié)議,HTTP 的請(qǐng)求和應(yīng)答都是一行或多行文本,它的結(jié)束標(biāo)志是一個(gè)換行符[5]。如果請(qǐng)求成功,數(shù)據(jù)就沿著該連接發(fā)送,直到發(fā)送完為止。HTTP的端口號(hào)為80.HTTP 中的命令稱呼為方法(method),其中GET 語(yǔ)句用來獲取文檔,POST語(yǔ)句用來粘貼文檔。通過判斷GET 和POST 語(yǔ)句后面的文件名來判斷所需要傳遞的文件的位置。
請(qǐng)求:
GET / HTTP/1.1
響應(yīng):
HTTP/1.1 200 OK
Content-type: text/html
……
《html》
《body》
……
《/body》
《/html》
4.應(yīng)用部分
本 WEB 服務(wù)器系統(tǒng)幾乎可以應(yīng)用于所有對(duì)實(shí)時(shí)性要求不是很高的場(chǎng)合,只要對(duì)本系統(tǒng)的相關(guān)部分做些修改或改進(jìn),例如:客戶端的訪問權(quán)限、IP 地址的過濾等,就可應(yīng)用于諸如遠(yuǎn)程抄表、信息家電的遠(yuǎn)程控制等場(chǎng)合。下面圖7 為ping 命令測(cè)試網(wǎng)絡(luò)不通到通的連接狀態(tài),圖8 實(shí)現(xiàn)了局域網(wǎng)內(nèi)任意主機(jī)通過ip 地址形式訪問單片機(jī)內(nèi)部存諸的網(wǎng)頁(yè),從而實(shí)現(xiàn)對(duì)單片機(jī)系統(tǒng)的遠(yuǎn)程監(jiān)控。
圖7 網(wǎng)絡(luò)連接測(cè)試
圖8 遠(yuǎn)程監(jiān)控溫度
5.結(jié)束語(yǔ)
實(shí)現(xiàn)了基于單片機(jī)的 TCP/IP 協(xié)議棧,使單片機(jī)控制的系統(tǒng)具有了WebServer 的功能,這樣可以使用PC 機(jī)通過因特網(wǎng)遠(yuǎn)程訪問單片機(jī)系統(tǒng),也可以使用單片機(jī)系統(tǒng)將有用的信息通過因特網(wǎng)發(fā)送到遠(yuǎn)端的PC 或其它終端上。為嵌入式設(shè)備實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)采集、遠(yuǎn)程監(jiān)控、遠(yuǎn)程診斷、遠(yuǎn)程幫助、遠(yuǎn)程升級(jí)、遠(yuǎn)程重構(gòu)等功能提供了可能,這是嵌入式系統(tǒng)發(fā)展的趨勢(shì)。