張希遙
(南京曉莊學院,江蘇 南京 211171)
自上世紀80年代至今,嵌入式系統的發展歷史已經將近四十多年.如今,嵌入式系統依然在逐漸滲入我們生活的各個領域,小到簡單的單片機控制系統,大到復雜的工業控制工程.無論是在民用還是軍用領域,無論是在日常生活還是在工農業生產中隨處可以發現嵌入式系統的身影.本文介紹了一種基于S3C2410芯片,通過外擴以太網控制器CS8900來實現嵌入式設備與PC間TFTP通信的目的.
以太網(Ethernet)是一種由XEROS公司開發的,當前世界范圍內廣泛使用,采用采用共享總線型傳輸媒體結構的局域網.它采用基帶局域網碰撞檢測(CSMA/CD)機制,即載波監聽多路存取機制.以太網普遍從IEEE802.3規范.
以太網的傳輸方法,也就是以太網的介質訪問控制(MAC)技術,稱為載波監聽多路存取和沖突檢測(CSMA/CD).其工作原理大致分為載波監聽、信道忙碌、信道空閑、沖突檢測、遇忙停發、多路存取幾個步驟.
TCP/IP采用分層結構,共分為4層,每層獨立完成指定功能:應用層(第四層)(TFTP層),傳輸層(第三層)(UDP層),互聯層(第二層)(IP層),網絡接口層(第一層).
TFTP(Trivial File Transfer Protocol)是傳輸文件的簡單協議的一種,同時也是一個基于UDP協議而實現的簡化的TCP/IP傳輸協議.支持用戶從遠程主機接收或向遠程主機發送文件.由于TFTP協議是基于UDP,而UDP協議依托IP,因此一個TFTP包的包格式如下:本地媒介頭,IP頭,數據報頭,TFTP頭和TFTP數據.TFTP在IP頭當中并不會指定任何的數據,但是它使用UDP中的源和目標端口以及包長度域.因為TFTP使用的包標記(TID)在這里被用做端口,因此TID的范圍必須介于0到65535之間.
S3C2410是Samsung公司開發的一款利用ARM920T內核和0.18um CMOS工藝的16/32位RISC微處理器,它適用于低成本、低功耗、高性能的手持設備或其它電子產品.S3C2410的工作主頻為203MHz,片上資源比較豐富,它集成了以下的通用的系統外設和接口:外部的SDRAM存儲控制器,LCD控制器,4通道的DMA,3通道UART,117個通用I/O口,24個外部中斷源,4個PWM時鐘和1個內部時鐘,1個IIC和1個IIS總線控制器,3端口USB接口和一個看門狗時鐘,8通道10位ADC和觸摸屏接口,SD接口和MMC接口.
CS8900A是一款16位以太網控制器,由美國CIRRUS LOGIC生產.CS8900A性能優良,成本低廉,工業級溫度范圍較廣,大約在-40~+80攝氏度之間;工作電壓為3.3V,功耗較低;這種高度集成的設計,使其適合作為智能嵌入設備網絡接口;由于采用Packet page結構作為高速緩存,占用系統資源少,從而增加系統效率.對于沒有集成MAC控制器的嵌入式處理器來說,實現以太網通信的更為通用的方法就是使用以太網控制器.
CS8900A有兩種操作模式,一種是I/O訪問模式,一種是內存訪問模式.網卡芯片復位后默認工作方式為I/O連接.I/O端口基址為300H.CS8900支持8位模式,當讀寫16位數據時,高位字節依次對應奇地址,低位字節依次對應偶地址.
CS8900A通常被S3C2410外擴為以太網通信模塊,擁有10Mb/s的傳輸速率.在電路接口中,CS8900通常工作在16位模式下,網卡芯片復位默認工作方式通常為I/O工作模式,寄存器的默認基地址為300H.在I/O工作模式下,訪問8個16位寄存器進行尋址用以訪問Packet page結構,地址映射表如表1所示.

表1 I/O模式地址映射
由于S3C2410自身并沒有集成網絡MAC模塊,若要實現TCP/IP協議中的數據鏈路層的功能,就必須外擴CS8900A網絡芯片完成網絡底層的數據傳輸,.再以此為基礎,根據TCP/IP協議編寫代碼解析數據,完成相應的網絡通信.
CS8900與S3C2410簡單電路框圖如下圖所示.CPU的nGCS3連接CS8900的CHIPSEL引腳提供片選信號的同時也連接到AEN引腳,當AEN置低電平保證能夠在I/O模式下讀寫操作有效;中斷信號EINT9引腳接在了CS8900的第一個中斷引腳INTERQ0上;內存讀寫nMEMR/W與I/O讀寫nIOR/W分別通過門電路對應想連接提供讀寫使能信號;同時當addr24=1時,可以確保CS8900 I/O模式有效,并且MEM模式有效.S3C2410_NET的nOE和nWE分別與門電路nOE及nWE相連構成一個”或“門電路.nGCS3的起始地址為0x18000000,其中CS8900上電后的基地址默認為300H.addr24被用來控制I/O或者MEM模式進行讀寫操作,當addr24置1,可以確保CS8900 I/O模式有效,并且MEM模式有效.所以會有0x19000000如下:

門電路

S3C2410與CS8900簡單電路框圖
數據鏈路層:數據鏈路層主要進行收發底層數據,它具體由CS8900實現.
網絡層:網絡層由IP協議來實現,包括了ARP地址解析協議,具體實現了從IP地址到數據鏈路MAC地址的映像.
互聯層:互聯層主要通過UDP和TCP來實現,其目的是讓網絡程序通過明確定義的數據結構獲得數據.
應用層:通過以太網和TCP/IP進行數據傳輸,實現與以太網數據終端之間的交互通信.
系統上電工作之后,網卡芯片首先初始化四個寫寄存器,分別為:RXCTL、LINTCTL、RCCFG和BUSCT.數據發送時,寫控制寄存器TXCMD,TXLENG中寫入發送數據的長度,然后將依次將數據寫入PORT0口中,第一個字節寫入300H,第二個字節寫入301H,第三個字節寫入302H,以此類推.CS8900芯片將數據封裝為鏈路層類型,然后向網絡中添加填充位和CRC校驗.CPU查詢ISO數據,一旦有數據到來,就讀取接收到的數據幀.其初始化程序主要有檢測芯片,設置Mac地址,定義存儲模式和內存基址,提供中斷及配置芯片等步驟.
CS8900的收發數據主要通過函數int CS_ReceivePacket和int CS_TransmitPacket實現.發數據時,對控制寄存器TXCMD進行寫操作,向長度寄存器TXLENG中寫入發送數據長度,然后把數據依次寫入PORT0口.網卡芯片將數據封裝為鏈路層類型并添加填充位和CRC校驗送到網絡,然后處理器再對ISO的數據進行查詢.當有數據來到后,讀取接收到的數據幀,處理器在讀數據時依次讀地址.
發送請求:PC向主機發出WRQ請求,收到一個確認能夠寫出的數據包.在一般情況下,被確認的包的包號就包含在該包中.每個數據包都有一個從1開始且連續的塊號.然而WRQ包則較為特殊,其包號是0,在收到錯誤包的同時該請求會被拒絕.如果發送成功,則在文件名段指明要發送的文件名,在模式段寫入“OCTET”,表示用于傳輸文件,這種文件在源機上以8位格式存儲.然后,嵌入式設備向PC機發出確認包(ACK),并在數據塊段填充0.
數據傳輸:PC對嵌入式設備發數據包,在數據塊段填充數據包的數據塊號.在數據段填充要發送的數據.TFTP協議每次發送512B,附帶四個字節的報文信息,若包小于516時就代表它是最后一個包.當嵌入式設備收到數據包包后,會向PC發出確認包(ACK).最后,只需在數據塊段填充觀察所接收到的數據包的數據塊號,就可知道是否成功接收到這個數據包.
CS8900在收到數據包后,芯片將接收的數據包保存到內存,它主要通過調用數據處理函數net_handle來實現.并根據包的幀結果,依次調用arp_rcv_packet和ip_rcv_packet處理數據包.
其中net_handle函數源代碼如下所示:


該函數實際上是一個中斷,當CS8900接收到數據包時則產生該中斷進入net_handle函數進行數據處理.
將開發平臺利用網線通過集線器與PC連接,分配MAC地址和IP地址,使用PC機的ping程序測試,若其連接正常,則說明ARP,IP和ICMP協議正常.利用TFTP命令,將本機的TXT文件發送到嵌入式設備內存空間的0x30008000處.利用網絡抓包軟件,觀察網絡數據包,結果符合TFTP通信流程.在嵌入式設備的內存地址0x30008000處觀察數據,結果數據與TXT文件內容一致,則說明TFTP執行正確,UDP協議正常.
本文主要介紹了S3C2410嵌入式以太網通信,以及CS8900A這一實時性強且可靠的以太網控制器的使用和工作模式.通過對CS8900進行直接一系列操作,實現數據鏈路層功能,最終完成嵌入式開發平臺的使用以及TFTP協議連接到以太網進行文件傳輸的目的.該方案在實際應用中有著一定的應用價值.
〔1〕王興亮,高利平,等.通信系統概論.西安電子科技大學出版社,2008.
〔2〕楊鑄,唐攀.深入淺出嵌入式底層軟件開發.北京航空航天大學出版社,2011.
〔3〕王黎明,陳雙橋等.ARM9嵌入式系統開發與實踐.北京航空航天大學出版社,2008.
〔4〕王學龍.嵌入式Linux系統設計與應用[M].北京:清華大學出版社,2001.
〔5〕Cirrus Logic,Inc.CS8900A Product Data sheet.2001.
〔6〕EduKit3ARM9_UserGuide_V3.0_cn.