<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于A(yíng)RM和W5100的嵌入式以太網(wǎng)通信接口設計

基于A(yíng)RM和W5100的嵌入式以太網(wǎng)通信接口設計

作者: 時(shí)間:2011-08-08 來(lái)源:網(wǎng)絡(luò ) 收藏

 隨著(zhù)以太網(wǎng)技術(shù)在工業(yè)遠程監控和數據采集領(lǐng)域的飛速發(fā)展,基于以太網(wǎng)的應用接口設備也迅速普及到醫療設備、工廠(chǎng)電力系統等應用。然而,嵌入式以太網(wǎng)接口設計的核心器件是網(wǎng)絡(luò )控制芯片,其性能優(yōu)劣直接影響網(wǎng)絡(luò )通信的效率。
 本文結合ARM技術(shù),采用32 bit STM32F105V微處理器和高性能的以太網(wǎng)控制芯片W5100實(shí)現高性能、高可靠性的嵌入式以太網(wǎng)通信接口設計,其系統各功能模塊容易擴展和升級。
1 總體設計
 在嵌入式系統設計高速發(fā)展的過(guò)程中,與傳統的基于現場(chǎng)總線(xiàn)方式相比,結合嵌入式系統和以太網(wǎng)技術(shù)來(lái)實(shí)現數據采集和控制功能越來(lái)越受到廣大嵌入式設計者的青睞,而通信接口設計實(shí)質(zhì)是能夠實(shí)現TCP/IP網(wǎng)絡(luò )通信協(xié)議。使用本接口模塊的核心控制器W5100,應用程序設計者無(wú)需深入了解TCP/IP協(xié)議,也無(wú)需考慮以太網(wǎng)的控制,只需訪(fǎng)問(wèn)網(wǎng)絡(luò )控制器的寄存器,并靈活創(chuàng )建和選擇TCP及UDP套接字(Socket)函數就可以簡(jiǎn)單地實(shí)現網(wǎng)絡(luò )通信,且不需要操作系統的支持,其具有硬件電路簡(jiǎn)單、編程方便等特點(diǎn),解決了一般嵌入式設計的軟件設計復雜、網(wǎng)絡(luò )編程工作量大等問(wèn)題,再結合32 bit高性能ARM處理器以真正實(shí)現以太網(wǎng)的高速實(shí)時(shí)傳輸。ARM完成對應用程序的處理,W5100實(shí)現數據傳輸和通信網(wǎng)絡(luò )協(xié)議的處理。
 具體實(shí)現過(guò)程:數據信號或模擬信號可以通過(guò)STM32F105V豐富的外設接口(RS232總線(xiàn)、CAN總線(xiàn)等)輸入或直接通過(guò)外部數據總線(xiàn)輸入,并且可以用ARM處理器對傳輸的數據和信號做一些預處理工作,然后傳輸到W5100芯片完成網(wǎng)絡(luò )協(xié)議的處理,再通過(guò)網(wǎng)絡(luò )接口傳輸到遠程終端(PC機)。相反,遠程終端可以通過(guò)以太網(wǎng)發(fā)出控制指令,將傳輸信號發(fā)送至ARM或數據輸出端,從而實(shí)現嵌入式系統中網(wǎng)絡(luò )數據的采集和傳輸控制。系統框架如圖1所示。

 本設計利用JTAG接口燒寫(xiě)程序到ARM內部的Flash,外擴I2C接口的128×8(1 Kbits)EEPROM,基地址為Ox40005400,用來(lái)存儲網(wǎng)絡(luò )IP地址、端口號、子網(wǎng)掩碼等網(wǎng)絡(luò )信息,網(wǎng)絡(luò )傳輸狀態(tài)指示燈(LED)反映了數據傳輸的實(shí)時(shí)狀態(tài)。電源由外部電源提供,分別經(jīng)過(guò)MC7805和AS1117芯片穩壓轉換輸出5 V和3.3 V的電壓,這樣就能夠很好地滿(mǎn)足內核、外設以及外部電路的供電[1]。
2 網(wǎng)絡(luò )控制器W5100
 W5100是WIZnet公司最新推出的固件網(wǎng)絡(luò )芯片,內部集成了10/100 Mb/s以太網(wǎng)控制器,支持自動(dòng)應答(全雙工/半雙工模式),最高通信速率達25 Mb/s。W5100將TCP/IP協(xié)議棧、以太網(wǎng)MAC和PHY三種功能集成于一體,支持硬件化的TCP、UDP、ICMP、IPv4 ARP、IGMP、PPPoE、以太網(wǎng)等協(xié)議,并提供了多種總線(xiàn)接口方式(直接總線(xiàn)接口、間接總線(xiàn)接口、SPI總線(xiàn))便于連接各類(lèi)單片機,可以滿(mǎn)足不同應用場(chǎng)合的需求。
 W5100內含公共存儲器、端口存儲器、發(fā)送存儲器以及接收存儲器。公共寄存器用來(lái)設置W5100的工作模式、中斷向量、IP地址、網(wǎng)關(guān)地址、子網(wǎng)掩碼、物理地址、超時(shí)值等相關(guān)信息;端口寄存器平均分為4個(gè)相等的存儲器大小,可以單獨對4個(gè)獨立的網(wǎng)絡(luò )通道(Socket)設置端口的通信模式(TCP客戶(hù)端模式、TCP服務(wù)器模式、UDP模式),實(shí)現網(wǎng)絡(luò )數據的通信;內部16 KB存儲器的發(fā)送和接收數據緩沖區(8 KB的發(fā)送緩存和8 KB接收緩存區)用來(lái)存放臨時(shí)數據。W5100支持ADSL連接(支持PPPoE協(xié)議、帶PAP/CHAP驗證),支持自動(dòng)極性變換(MDI/MDIX)并附帶有多功能LED指示燈輸出,時(shí)鐘信號由外部晶振25 MHz提供,分別接入XTLP、XTLN管腳。
 W5100支持80腳的LQFP小型封裝,0.18 μm CMOS工藝,符合環(huán)保要求。3.3 V的單電源工作電壓,I/O口可承受5 V電壓,可以滿(mǎn)足低功耗要求[2]。
3 通信接口硬件設計
 本設計采用嵌入式微處理器和以太網(wǎng)控制器的方式實(shí)現接口轉換,需要用到的芯片主要包括STM32F105V微處理器,W5100網(wǎng)絡(luò )控制器及帶網(wǎng)絡(luò )變壓器的RJ-45接口13F-60系列,AT24LC01B EEPROM等。采用SPI總線(xiàn)接口模式,實(shí)現STM32F105V和網(wǎng)絡(luò )控制器的硬件連接。在串行接口模式下,只需要連接幾個(gè)簡(jiǎn)單的引腳就可以進(jìn)行數據通信[3]。SPI總線(xiàn)接口模式下硬件連接如圖2所示。

 本系統微處理器采用ST公司的STM32F105V,并采用專(zhuān)門(mén)設計的Cortex-M3內核,時(shí)鐘頻率可達72 MHz,256 KB Flash存放程序或數據,64 KB的RAM存放數據,多達80個(gè)I/O接口可以映射到20個(gè)外部中斷。STM32F105V與W5100供電電壓都是3.3 V,所以可以直接連接。
 配置W5100的SEN引腳必須通過(guò)一個(gè)10 kΩ的電阻接高電平,以選擇W5100的SPI接口模式,置STM32F105V為SPI主模式,W5100為SPI從模式,在SPI總線(xiàn)模式下的配置復用輸入輸出接口(AFIO)的PA5、PA6、PA4、PA7分別為SCLK、MISO、/SCS(SPI從模式選擇,低電平有效)、MOSI信號線(xiàn)直接相連,并用軟件設置管腳的輸出最大速度為10 MHz,STM32F105V通過(guò)SPI對W5100讀寫(xiě)操作。
 配置PB5口作為W5100的復位信號/RST_W,低電平有效。為實(shí)現準確的硬件復位,復位引腳RST_W上復位信號至少保持2 μs。
 配置PB1口為外部中斷線(xiàn)1(EXTI1),并作為W5100的中斷信號輸出端/INT,低電平有效。當W5100在端口產(chǎn)生連接、斷開(kāi)、接收數據、數據發(fā)送完成以及通信超時(shí)等條件下,該引腳輸出低電平信號指示微處理器。
配置PA8口為W5100輸出的以太網(wǎng)物理層信號燈(LINKLED)指示W(wǎng)5100的網(wǎng)絡(luò )連接狀態(tài),通過(guò)上拉電阻輸入到微處理器,低電平有效。
 此外,為縮小接口設計的面積,本設計采用10/100 Mb/s的13F-60系列帶網(wǎng)絡(luò )變壓器的RJ45接口,W5100的RXIP接RJ45的RD+,RXIN接RD-,并帶有左右兩個(gè)狀態(tài)燈,連接狀態(tài)燈(LINKLED)和動(dòng)態(tài)指示燈顯示接收與發(fā)送狀態(tài)(ACT_LED),通過(guò)一個(gè)高速開(kāi)關(guān)二極管共陽(yáng)極(開(kāi)關(guān)速度最大值4 ns,重復反向峰值耐壓最大值75 V)與W5100的RXLED/TXLED管腳相連,供電電壓為3.3 V,直接與W5100相連。差分接收和發(fā)送引腳分別通過(guò)兩個(gè)75 Ω的電阻和0.001 μF的電容接地。RJ45接口的內部結構圖如圖3所示。

4 通信接口的軟件設計
4.1 初始化程序設計

 本系統初始化通過(guò)定義結構體的方式完成STM32F105V微處理器和W5100的初始化[4-5]。
微處理器完成系統時(shí)鐘、外設時(shí)鐘、系統啟動(dòng)模式、嵌入式向量式中斷控制寄存器、I2C、通用輸入輸出接口、通用異步接收發(fā)送器、通用定時(shí)器以及SPI等的初始化。
 W5100的初始化主要設置一些關(guān)鍵的寄存器:
 (1)設置模式寄存器(MR)bit[7](軟件復位位)為1,初始化芯片內部寄存器,復位后自動(dòng)清0。
 (2)設置中斷屏蔽寄存器(IMR)為OxFF(屏蔽中斷源),啟動(dòng)IP地址沖突異常中斷和端口n寄存器(Sn_INT)中斷等,通過(guò)向相應的中斷屏蔽位寫(xiě)1,任何時(shí)候只要中斷寄存器(IR)對應的位也置1,則中斷將產(chǎn)生,CPU通過(guò)訪(fǎng)問(wèn)IR獲得中斷來(lái)源。
 (3)設置重發(fā)時(shí)間寄存器(RTR)為200 ms(Ox07D0),當發(fā)出連接、斷開(kāi)等命令而沒(méi)有收到遠程對端的響應或響應延遲時(shí),產(chǎn)生重發(fā)過(guò)程。
 (4)配置重發(fā)計數寄存器(RCR)為8,設定重發(fā)的次數。
 (5)設置接收緩沖區的大小寄存器(RMSR)和發(fā)送存儲空間大小寄存器(TMSR)都為0x55,每個(gè)端口接口和發(fā)送存儲空間分別分配2 KB的存儲空間。
 (6)設置端口n模式寄存器(Sn_MR)為OxA1,啟動(dòng)廣播功能,設置端口n協(xié)議類(lèi)型為T(mén)CP模式。
 (7)設置端口n命令寄存器(Sn_CR),端口的初始化、建立/斷開(kāi)連接以及數據傳輸等。
 (8)設置端口n的最大分片長(cháng)度寄存器(Sn_MSS)為1 460。
 初始化完成后,根據SPI協(xié)議編寫(xiě)發(fā)送字節函數SPI_SendByte(),配合Read_W5100和Write_W5100完成字節的讀取和發(fā)送,這里需要定義讀操作碼(OxF0)和寫(xiě)操作碼(Ox0F),實(shí)現微處理器與W5100數據通信。
4.2 Socket初始化程序設計
 W5100與終端之間的數據交換有多種通信方式,本文采用基于TCP模式的通信方式。TCP是以連接為基礎的通信方式,端口n在進(jìn)行數據通信時(shí),必須先建立連接。TCP有兩種建立連接方式,一種是服務(wù)器模式(被動(dòng)模式),需要等待連接請求;另一種是客戶(hù)端模式(主動(dòng)打開(kāi)),需要發(fā)送連接請求給服務(wù)器。本設計配置W5100為服務(wù)器模式,只需對W5100的Socket進(jìn)行配置就可以完成網(wǎng)絡(luò )數據的收發(fā)和啟動(dòng)功能。
 當Socket作為服務(wù)器模式時(shí),初始化端口需要設置運行模式(Sn_MR)和本機端口號(Sn_Port),并在端口命令寄存器打開(kāi)(OPEN)端口。引用Socket_Listen(SOCKET s)程序,只調用一次該程序就可使W5100設置為服務(wù)器模式。主要程序如下所示。

 Write_W5100((W5100_S0_MR+s*0x100),S_MR_TCP);
 //設置Socket為T(mén)CP模式
 Write_W5100((W5100_S0_CR+s*0x100),S_CR_OPEN);
 //打開(kāi)Socket
 Write_W5100((W5100_S0_CR+s*0x100),S_CR_LISTEN);
 //設置Socket為偵聽(tīng)模式
 Write_W5100((W5100_S0_CR+s*0x100),S_CR_CLOSE);
//關(guān)閉Socket
 完成Socket的打開(kāi)和設置偵聽(tīng)工作后,至于遠程客戶(hù)端是否與其連接,則需要等待Socket中斷,在服務(wù)器偵聽(tīng)模式下,不需要設置目的IP和目的端口號。
 W5100在TCP服務(wù)器模式下的處理流程如圖4所示。

4.3 中斷處理程序設計
 本設計采用中斷方式來(lái)處理數據包的接收和發(fā)送,以提高效率。在W5100處理中斷的過(guò)程中,微處理器首先通過(guò)應訪(fǎng)問(wèn)W5100的中斷寄存器(IR)獲得產(chǎn)生中斷的來(lái)源。中斷寄存器與中斷屏蔽寄存器配合使用,且位是一一對應的,中斷屏蔽寄存器(IMR)的相應位可屏蔽中斷寄存器中任何中斷源。因此,若要使用某個(gè)中斷源,先要將該中斷源在中斷屏蔽寄存器中的相應位置位,以打開(kāi)所需的中斷源,這樣,中斷才會(huì )產(chǎn)生。當中斷產(chǎn)生后,即進(jìn)入中斷處理程序。本設計中的中斷源主要包括端口n中斷事件。一般設置有Socket成功連接(S_IR_CON)、斷開(kāi)連接(S_IR_DISCON)、數據發(fā)送完成(S_IR_SENDOK)、接收到數據(S_IR_RECV)或傳輸超時(shí)(S_IR_TIMEOUT)等事件中斷。
 本文以端口0接收到數據包后的產(chǎn)生一個(gè)接收數據中斷為例說(shuō)明中斷處理過(guò)程。首先,在使用端口0中斷之前,應在初始化程序中將中斷屏蔽寄存器(IMR)中的端口0置位(IMR_S0_INT),當Socket0發(fā)生中斷時(shí),IMR_S0_INT=1、IR_S0_INT=1、動(dòng)態(tài)LED燈亮顯示接收狀態(tài),此時(shí),W5100的中斷輸出管腳(/INT)輸出低電平,以通知微處理器有中斷產(chǎn)生,微處理器訪(fǎng)問(wèn)中斷寄存器獲取中斷源為接收數據中斷;然后進(jìn)入中斷處理函數,啟動(dòng)發(fā)送函數(S_rx_process)。
4.4 Socket數據接收程序設計
 當端口接收數據時(shí),產(chǎn)生接收中斷。首先調用端口接收數據包函數Process_Socket_Data(),并對接收到的數據類(lèi)型進(jìn)行判斷和加工。本過(guò)程先調用接收函數S_rx_process()從W5100端口的接收數據緩存區讀取數據,然后將讀取的數據加上接收存儲器讀指針寄存器(S0_RX_RD)的值再寫(xiě)入S0_RX_RD,最后將RECV命令重新寫(xiě)入端口0的命令寄存器(S0_CR),以等待下次數據的接收?;蛘邔⑻幚硗甑臄祿截惖桨l(fā)送緩沖區,再調用S_tx_process函數發(fā)送數據包給CPU。主要程序如下:

 其中Oxaa和Ox55為接收數據包的標志頭;長(cháng)度位為數據包字節長(cháng)度,不包括數據包頭和本身字符,命令位為對對象數據的操作,為0時(shí)讀取數據,為1時(shí)設置對象數據,目標代碼位用來(lái)顯示對象代碼,如Ox00為網(wǎng)關(guān)IP、Ox01為子網(wǎng)掩碼、0x02為物理地址、LED為狀態(tài)顯示等;數據位為接收到的數據,數據是以16進(jìn)制形式接收,最后再加上2 B的數據報頭和1 B的數據本身。
4.5 Socket數據發(fā)送程序設計
 通過(guò)Socket發(fā)送數據時(shí),調用發(fā)送數據函數S_tx_process。首先把要發(fā)送的數據緩存在發(fā)送緩沖區(Tx_buffer)中。此外,在發(fā)送數據時(shí),需先檢查發(fā)送緩存區的剩余空間的大小(Sn_TX_FSR),控制發(fā)送數據的字節數,如用以太網(wǎng)協(xié)議發(fā)送的數據最大傳送單元(MTU)不超過(guò)1 500 B。在TCP服務(wù)器模式下,在數據發(fā)送處理過(guò)程中,可不設置目標主機的IP和端口號。剩余空間的大小因寫(xiě)入數據的增加而減少,數據發(fā)送后又自動(dòng)增加。當發(fā)送緩沖區的數據完全寫(xiě)入端口的發(fā)送數據緩存區后,則將數據本身長(cháng)度加上端口傳輸寫(xiě)指針寄存器(Sn_TX_WR)中的值再寫(xiě)入Sn_Tx_WR,再計算發(fā)送緩沖區的偏移量(tx_offset),用于指示發(fā)送數據的長(cháng)度,最后啟動(dòng)發(fā)送(Sn_CR_SEND)。相關(guān)程序如下:
 i=tx_offset/S_TX_SIZE //計算實(shí)際物理偏移值,
 //S_TX_SIZE由TMSR定義為2 K
 tx_offset=tx_offset-i*S_TX_SIZE //計算實(shí)際物理地址
 //j= W5100_TX+s*S_TX_SIZE+tx_offset
  Write_W5100(j,Tx_Buffer[i]) //將發(fā)送緩沖區中的
 //數據寫(xiě)入到端口的發(fā)送緩沖區
 Write_W5100((W5100_S0_CR+s*0x100),S_CR_SEND)
 //啟動(dòng)發(fā)送的指令
 本文以基于A(yíng)RM Cortex-M3的微處理器STM32F105V為核心,結合W5100網(wǎng)絡(luò )控制芯片實(shí)現了嵌入式以太網(wǎng)的連接,該接口設計具有硬件設計簡(jiǎn)單、成本低、集成高度以及軟件開(kāi)發(fā)周期短等優(yōu)點(diǎn),在控制和數據傳輸領(lǐng)域有著(zhù)廣泛的市場(chǎng)和應用前景。
參考文獻
[1] ST.STM32F105xx datasheet.2010.
[2] WIZnet.W5100 datasheet version1.1.8. 2009.
[3] 姚冰,康世英,謝佳.嵌入式以太網(wǎng)接口硬件部分的設計與實(shí)現[J].微處理機,2008,29(2):155-157.
[4] 成都加聯(lián)科技有限公司.W5100在嵌入式系統中實(shí)現TCP/IP網(wǎng)絡(luò )通信的應用[R].2009.
[5] 段海龍,彭輝俊,程健.基于A(yíng)RM的嵌入式以太網(wǎng)通信的實(shí)現[J].機械與電子,2006(2):9-12.

tcp/ip相關(guān)文章:tcp/ip是什么


存儲器相關(guān)文章:存儲器原理


上拉電阻相關(guān)文章:上拉電阻原理


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>