基於ARM9的嵌入式網關的研究

基於ARM9的嵌入式網關的研究

技術分類: 嵌入式系統  | 2007-11-05 來源:低壓電器 | 作者:張麗萍 繆希仁 程秀華

  引 言

  無所不在的網絡給網絡接入設備帶來了巨大的發展機遇。而隨着網絡接入市場的迅速增長,嵌入式網絡接入開始成爲嵌入式系統技術中最令人關注的一個領域。在嵌入式網絡技術的推動下將會形成這樣一個局面:在網絡上傳輸的信息中,將有70%的信息來自嵌入式系統,也許將有數以億計的汽車、通信設備、家用電氣以及工廠系統接入到不同網絡中,然後再組成一個龐大的Internet互聯網。爲此,本文研究了一種基於ARM芯片和嵌入式操作系統Linux,在以太網與RS -485總線之間的進行數據交換的嵌入式網關,以滿足嵌入式設備的網絡化功能需求。

  硬件平臺設計

  設計的嵌入式網關以ARM920T爲核心的S3C2410微處理器,通過外擴存儲器、以太網口、串口、JTAG調試接口等構建硬件平臺,其硬件結構框圖如圖1所示。

硬件結構框圖

  CPU設計

  CPU是整個嵌入式系統的實時控制核心,它在工業以太網中作爲智能節點的主控制器,是整個嵌入式網關的核心。本文選用以ARM920T爲核心的 S3C2410微處理器,S3C2410是32bit的RISC微處理器,該處理器特別適用於手持式設備以及高性價比、低功耗的

 
網絡設備,它集成了LCD 控制器、USBHost、NAND控制器、BUS控制器、中斷控制、功率控制、存儲控制、UART、WatchDog、SPI、SDI/MMC、IS、 IC、GPIO、RTC、TIMER/PWM、ADC等豐富的資源。

  存儲系統

  嵌入式系統可根據需要定製存儲空間。本文擴展了2片Flash芯片和1片SDRAM。Flash芯片主要有1片韓國現代公司的2MB16bit數據寬度的 Flash芯片HY29LV160B191和1片韓國三星公司的16MB的NANDFlash芯片K9F2808UOB1571,SDRAM芯片採用的是 1塊韓國現代公司生產的SDRAMHY57V5616201。2MB的Flash芯片HY29LV160B對應的地址空間映射到地址0x00000000 上,作爲存儲啓動配置參數及異常/中斷向量表的程序空間,系統復位後從其中讀取指令執行程序;使用韓國現代公司的8MB的 SDRAMHY57V561620作爲系統內存,對應地址空間映射在地址Ox30000000開始,作爲程序運行空間和數據空間,啓動代碼將系統映像複製到SDRAM後執行。

  串口部分

  串口部分設計使用了2路UART,其中,一路通過電平轉換芯片MAX232,把3.3V的邏輯電平轉換爲RS-232-C的邏輯電平進行傳輸,實現ARM 與PC機之間的通信,通過超級終端可在PC機上進行調試;另一路串行接口使用MAX1485進行電平轉換,實現從RS-485上接收現場總線發送的信息。

  JTAG調試接口

  在嵌入式系統中,芯片的燒寫、調試都需要用到JTAG調試接口,可滿足實時地實現對程序的分析和執行的監控。JTAG(Joint Test Action Group)是IEEE的規範標準,它可以通過現有的JTAG邊界掃描與ARMCPU內核進行通信,屬於完全非插入式(不佔用片上資源)調試,它無需目標存儲器,不佔用目標系統的任何端口,而這些是普通的駐留監控軟件所必需的。另外,JTAG調試的目標程序是在目標板上執行的,仿真更接近於目標硬件,仿真結果與真實的運行環境更爲接近,因此,逐漸成爲採用更多的一種調試方式。

  以太網接口

  本文以太網接口中所使用的芯片有RTL8019AS、74LVC4245、FB2022(網卡變壓器)。RTL8019AS是性價比高且帶有即插即用功能的全雙工以太網控制器,其主要特點包括:符合EtherNetⅡ與IEEE802.3標準;全雙工,收發可同時達到10Mb/s的速率,內置16KB的 SRAM,用於收發緩衝,減低對主處理器的要求;支持UTP、AUI、BNC自動檢測,還支持對10BaseT拓撲結構的自動極性修正;允許4個診斷 LED引腳編程輸出。RTL8019AS內部有2塊RAM區,1塊16KB,地址爲0x4000~0x7fff;1塊32Byte,地址爲 0x0000~0x001f。RAM按頁存儲,每256Byte爲1頁。本方案中將RTL8019AS的RAM的前12頁 (0x4000~0x4Bfff)作爲發送緩衝區;後52頁(0x4c00~0x7fff)作爲接收緩衝區;第0頁只有32Byte,用來存儲以太網的物理地址。

  RTL8019AS芯片的引腳SA0~SA19爲地址總線;SD0~SD15爲數據總線;引腳INT0接S32C410芯片的外部中斷信號;引腳AEN是地址使能腳,作爲芯片的選通信號,將中斷接到CPU的nGCS3地址映射到bank3。RTL8019AS的地址空間範圍是0x18000300~0x1800031f。引腳IOS0~3設置爲接地或空閒,表明RTL8019AS內部寄存器總線地址從300H開始。

  引腳X1、X2接一個20MHz的無源晶振,作爲外部時鐘信號輸入;引腳JP接高電平,選擇跳線模式:引腳IORB、IOWB作爲輸入輸出讀寫指令端;引腳RSTDRV是復位端,連接復位信號;引腳SMEMRB、SMEMWB是芯片的存儲器讀命令和寫命令。

  引腳TPIN+,TPIN-、TPOUT+,TPOUT-作爲媒體接口管腳,是接收IP數據報所需要用到的管腳,在設計網卡芯片電路時通過一個隔離變壓器和RJ-45的網絡外接口相連,外部主機通過以太網網線與RJ-45接口進行連接,實現數據交換。

  隔離變壓器的TD+管腳連接網卡芯片的TPOUT+引腳;TD-連接TPOUT-;RD+連接TPIN+;RD-連接TPIN-。8019通過隔離變壓器與RJ-45連接,實現與主機進行接收和發送IP數據報等工作。

  此外,硬件部分還包括電源電路、晶振電路、復位電路,在此就不一一介紹。

  軟件部分設計

  嵌入式系統的軟件部分分爲BootLoader的編寫、操作系統與文件系統的移植、應用程序的編寫三部分。

 

   BootLoader的編寫

  BootLoader是系統加電後運行的第1段軟件代碼,即處理器芯片復位後進入操作系統之前執行的一段代碼,主要是爲運行操作系統提供基本的運行環境,如初始化CPU堆棧、初始化存儲器系統等。BootLoader代碼與CPU芯片的內核結構、具體芯片和使用的操作系統等因素有關,其功能類似於PC機的 BIOS。通過運行BootLoader程序,可以初始化存儲器等硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,爲最終調用操作系統內核準備好正確的環境。其一般編寫的步驟爲:

  (1)屏蔽所有的中斷。爲中斷提供服務通常是操作系統或設備驅動程序的責任,因此,在BootLoader的執行全過程中可以不必響應任何中斷;

  (2)設置中斷向量;

  (3)設定存儲器控制寄存器;

  (4)初始化堆棧和寄存器。系統堆棧初始化取決於用戶使用了哪些中斷,以及系統需要處理哪些錯誤類型、並且定義處理器的幾種工作方式。一般來說管理者堆棧必須設置,如果使用了IRQ中斷,則IRQ堆棧也必須設置;

  (5)如有必要則需要改變處理器模式、狀態;

  (6)初始化C語言所需的存儲器空間。爲正確運行應用程序,在初始化期間應將系統需要讀寫的數據和變量從ROM拷貝到RAM中。一些要求快速響應的程序,如中斷處理程序,需要在RAM中運行;如果使用Flash,對Flash的擦除和寫入操作也是在RAM裏運行的。

  嵌入式系統的啓動程序是嚴重依賴於硬件的,所以需要用匯編語言來進行編寫。完成上述步驟後,系統就完成了對硬件和軟件運行環境的初始化。最後將實時操作系統代碼從Flash讀入到內存空間中,開始運行實時操作系統。

  操作系統與文件系統的移植

  Linux作爲一種優秀的操作系統,近幾年在嵌入式領域異軍突起,成了最有潛力的嵌入式操作系統。突出的一個優點就是免版稅和開放源碼,另外它可應用於多種硬件平臺,具有良好的移植性、高的可靠性、優秀的網絡功能、完備的文件系統以及豐富的API,爲嵌入式網關提供了強大的軟件支持。因此,本文選擇 Linux作爲嵌入式網關的操作系統。對Linux的移植有以下幾個步驟:

  (1)下載Linux源代碼,建立交叉編譯環境;

  (2)配置和編譯內核;

  (3)製作文件系統,編寫相應的設備驅動程序;

  (4)下載,調試和執行內核,並在文件系統中添加自己的應用程序。

  應用程序的編寫

  本文利用Socket套接字和TCP/IP協議編寫了一個簡單的客戶機/服務器模式的網絡應用程序。因爲本系統只是起到網關的作用,只需實現現場總線和以太網上位機兩方之間的通信,並不需要處理其數據的邏輯意義和內容。在這種模式下,以太網上位機被設定爲服務器,它運行了服務器端的應用程序。該程序主要用於監聽服務器端口、接受客戶端的連接請求、接受客戶端的信息、向客戶端發送信息等。網關係統中運行的是客戶端程序,該程序主要是用於申請連接到服務器、將現場總線方發來的消息向服務器發送、處理服務器發來的信息、將這些信息發送給現場總線系統。應用程序軟件流程如圖2所示。

應用程序軟件流程

  軟件中調用的函數主要有:

  (1)intsocket(intfamily,inttype,intprotocol)。此函數爲通信創建一個端口,若正常調用將返回一個整型的文件描述符,錯誤調用將返回-1。

       (2)intbind(intsockfd,conststructsockaddr*address,size-taddress-len)。此函數一旦Socket調用成功並返回了一個文件描述符,便將該Socket與服務器本機上一個端口相關聯,就可以在該端口監聽服務請求。該函數只用於服務器端程序,客戶端無須調用此函數。

(3)intlisten(ints,intbacklog)。服務器用來監聽是否有服務請求。

  (4)intaccept(intsockfd,void*addr,int*addrlen)。連接端口的服務請求。但某個客戶端試圖與服務器監聽的端口連接時,該連接請求將排隊等待服務器調用此函數接受它。

  (5)intsend(intsockfd,constvoid*msg,intlen,intflags);recv(intsockfd,void*buf,intlen,unsignedintflags)。發送和接收數據。

  (6)intconnect(intsockfd,structsockaddr*serv-addr,intaddrlen)。此函數用來與遠端服務器建立一個TCP連接。

  (7)intclose(intsockfd)。結束

 
數據傳輸。

  結束語

  本文介紹了以S3C2410處理器爲核心、用RTL8019AS作爲網絡接口芯片的嵌入式以太網接口的具體軟、硬件方法,可用於工業現場實現現場節點的自動上網,從而實現對現場遠程控制,具有很好的發展前景。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章