單片機典型案例開發(fā)(四)
然而,這些監(jiān)控系統(tǒng)的數(shù)據(jù)傳輸多采用RS-232、RS-485 以及各種現(xiàn)場總線,這些方式有些通信速度不夠快,有些距離不夠遠,且各種總線之間難于實現(xiàn)互連和互操作。以太網作為目前應用最為廣泛的局域網,在工業(yè)自動化和過程控制領域得到了越來越多的應用。同時,隨著Internet 的普及,現(xiàn)代通信技術的進步,基于TCP/IP 和Client/Server 架構的分布式監(jiān)控技術也日趨成熟。把嵌入式系統(tǒng)連接到Internet 上,就可以方便、低廉地把信息傳送到世界的任何一個地方。
傳統(tǒng)的遠程監(jiān)控系統(tǒng)一般采用C/S 模型的方式,主要針對大型的設備進行監(jiān)控。對于如攝像頭圖象監(jiān)控p家用儀表p門禁控制系統(tǒng)等小型的設備的監(jiān)控就需要采用低成本的方案。
鑒于此,在低成本的單片機系統(tǒng)上移植精簡的TCP/IP 協(xié)議簇,實現(xiàn)對于小型設備遠程監(jiān)控是最佳選擇。該系統(tǒng)以Web 方式實現(xiàn),用戶可以在任何一臺裝有瀏覽器的PC 機上進行遠程監(jiān)視與控制,具有價格低廉、操作方便、界面友好等優(yōu)點。傳統(tǒng)的遠程監(jiān)控系統(tǒng)模型與本系統(tǒng)采用的模型如圖1 和圖2 所示。
圖1 傳統(tǒng)遠程監(jiān)控系統(tǒng)模型
圖2 單片機監(jiān)控系統(tǒng)模型
2. 系統(tǒng)硬件設計
本系統(tǒng)以 Cygnal 公司的完全集成的混合信號系統(tǒng)級芯片(SOC)C8051F020 單片機為核心,采用Realtek 公司的10M 自適應以太網控制器RTL8019AS 實現(xiàn)系統(tǒng)的網絡接口部分。
SRAM 部分用于存放大量的數(shù)據(jù)信息。數(shù)據(jù)采集部分用于采集系統(tǒng)需要監(jiān)控的設備的運行情況,由于C8051F020 內部帶有真正12 位100 ksps 的8 通道ADC 帶PGA 和模擬多路開關,還有兩個12 位DAC 可編程更新時序,可以方便的進行模擬信號采集和對外設進行控制。
C8051F020 單片機內置64K FLASH 程序存儲器、4K 內部SRAM,可以嵌入TCP /IP 協(xié)議, 從而實現(xiàn)嵌入式Web Sever 的功能。RTL8019AS 集成了介質訪問控制子層(MAC)和物理層的性能,與單片機的接口簡單,可以方便地用來設計基于ISA 總線的系統(tǒng)。另外,它還具有與NE2000 兼容、軟件移植性好以及價格低廉等優(yōu)點,所以特別適合用于嵌入式系統(tǒng)。
圖3 系統(tǒng)框圖
3.系統(tǒng)軟件設計
3.1 軟件流圖設計
軟件的實現(xiàn)主要是根據(jù)數(shù)據(jù)在網絡中傳輸?shù)姆较蚝蛿?shù)據(jù)的流向來實現(xiàn)的。在本設計中數(shù)據(jù)的流向為:請求信息從局域網中來,通過RJ 45 送到RTL80l9AS,處理后的數(shù)據(jù)包送入單片機系統(tǒng)的協(xié)議棧,由協(xié)議棧對數(shù)據(jù)包進行解析,得到原始請求信息。請求信息再經過單片機系統(tǒng)的處理,產生回復信息?;貜托畔⒌骄钟蚓W的過程與上面正好相反。整個系統(tǒng)的軟件流程如上圖4 所示。
圖4 軟件框圖
3.2 RTL8019 接收與發(fā)送數(shù)據(jù)
1.RTL8019 芯片初始化主要是將網卡設置成正常的模式,跟外部網絡連接。清除所有中斷標志位,讓芯片開始工作。
2.對RTL8019 接收數(shù)據(jù)操作,有查詢和中斷兩種方式。因為單片機的速度和PC 機相差太遠,而且還有一些采集任務,本系統(tǒng)不采用中斷方式,用查詢方式。在查詢方式下,通過查詢CURR 和BNRY 兩個寄存器的值來判斷是否收到一幀數(shù)據(jù)。當BNRY+1 與CURR不相等,說明接收緩沖區(qū)接收到了新的數(shù)據(jù)幀。圖5 為RTL8019 報頭格式,接收部分子程序如下:
UCHAR xdata * rcve_frame(void) //如收到有效數(shù)據(jù)包,返回收到的數(shù)據(jù),否則返回NULL
圖5 RTL8019 報頭格式
3.數(shù)據(jù)的發(fā)送包含三個步驟:封裝數(shù)據(jù)包;通過遠程DMA 將數(shù)據(jù)包送入RTL8019AS的數(shù)據(jù)發(fā)送緩沖區(qū);通過RTL8019 的本地DMA 將數(shù)據(jù)送入FIFO 進行發(fā)送。具體過程如下:
?。?)包在發(fā)送前應該按規(guī)定的格式封裝好,格式如下圖6 所示:
圖6 MAC 幀首部
(2)把上面的數(shù)據(jù)包通過遠程DMA 寫入RTL8019AS 的數(shù)據(jù)發(fā)送緩沖區(qū);
(3)啟動本地DMA,把數(shù)據(jù)發(fā)送出去,數(shù)據(jù)包長度最小為60 字節(jié),最大1514 字節(jié)。
發(fā)送子程序為:void send_frame(UCHAR xdata * outbuf,UINT len)//發(fā)送一個數(shù)據(jù)包3.3 TCP/IP 協(xié)議棧的實現(xiàn)。
3.3.1 ARP 協(xié)議的實現(xiàn)
ARP 地址解析協(xié)議的本質是完成網絡地址到物理地址的映射。物理地址有以太網和令牌環(huán)網兩種基本類型,網絡地址特指IP 地址。具體到以太網,使用的是動態(tài)綁定轉換的方法,但是會遇到許多細節(jié)問題,例如減少廣播,ARP 包丟失,物理地址變更(更換網卡)、移動(移動設備到另一子網)、消失(關機)等。一般是設置ARP 高速緩存,通過學習、老化、更新、溢出算法處理ARP 映射表來解決這些問題。整個ARP 處理過程,主要用5 個函數(shù)實現(xiàn)。
在實現(xiàn)網卡驅動程序后,所有ARP 處理操作就是填寫ARP 包。主要程序代碼編制如下:
(1)void init_arp(void)//完成ARP 表初始化,概括說就是ARP 表state 字段清0
(2)void arp_send(UCHAR * hwaddr,ULONG ipaddr,UCHAR msg_type)//完成ARP 請求
?。?)void arp_rcve(UCHAR xdata * inbuf)// 完成響應操作
(4)UCHAR xdata * arp_resolve(ULONG dest_ipaddr) //完成從cache 里面查找對應//IP 地址的物理地址,如果沒有,就發(fā)送ARP 請求
3.3.2 IP 協(xié)議的實現(xiàn)
網際協(xié)議 IP 是TCP/IP 協(xié)議族中最為核心的協(xié)議,它的主要功能是負責把數(shù)據(jù)交付給主機,當目標主機與原主機處于不同的物理網絡中時,IP 負責把數(shù)據(jù)包路由到相應的目標網絡上。Internet 上所有的數(shù)據(jù)都以IP 數(shù)據(jù)包格式傳輸。IP 協(xié)議最大的特點是提供不可靠的和無連接的數(shù)據(jù)包傳送服務。IP 協(xié)議主要實現(xiàn)以下兩個子程序:
手機電池相關文章:手機電池修復
單片機相關文章:單片機教程
單片機相關文章:單片機視頻教程
單片機相關文章:單片機工作原理
晶振相關文章:晶振原理
評論