




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
iEthernet版本?2011WIZnet . 信息, 我們W5200是一種采用全硬件TCP/IP協議棧的嵌入式以太網控制器,它能使嵌入式系統實現互聯網功能的客戶,而這就需要單片機系統具有完整的TCP/IP協議棧和0CP/PCP/TP、P、Pv4、CP、P、GP和PE協議,而且已經連續多年在各種實際應用中得以證明。0使用KB緩存作為其數據通信內存。通過使用0,用戶只需通過使用一個簡單的ct程序就能實現以太網P(串行外設接口提供了輕松與外部CU連接的接口。0支持高達HZ的I接口間通信。為了降低系統功率的消耗,0提供了網絡喚醒和休眠模式。00收到cc特支持硬件TCP/IP協議:TCP、UDP、ICMP、IGMP、IPv4、ARP、IGMP、PPPoE和以太目標應家庭網絡設備:機頂盒、個人機、數碼適配USB轉以太網:設備、網絡打GPIO轉以太網:安全系統:數字機、機、信息結構結構引腳分 微控制器(MCU)接口信 物理層(PHY)信 綜合信 電源信 時鐘信 LED信 內存圖(Memory W5200寄存 通用寄存 Socket寄存 寄存器說 通用寄存 Socket寄存 功能說 初始 數據通 TCP服務 TCP客戶 單播和廣播方 多 IPRAW(以IP層為上限的處理模式 MACRAW(以MAC層為上限的數據處理模式 外部接 SPI接 設備操 SPI主設備操 電器規 極限 直流特 功耗(Vcc3.3V溫度 特 復位時 晶體特 SPI時鐘 變壓器特 封裝概 文件歷史信 插圖圖 圖2XTAL_VDD參考電路 圖3電源設 圖4晶振體參考原理 圖5W5200內存 圖6INTLEVEL的時 圖 Socket的狀態轉換 圖8物理地址的計 圖9 圖10TCP服務器和TCP客戶 圖11TCP服務器操作流 圖12TCP客戶端操作流程 圖13UDP操作流 圖14接收UDP數據的格 圖15IPRAW操作流程 圖16MACRAW操作流 圖17接收MACRAW數據格 圖18SPI接 圖19W5200SPI幀格 圖21讀時 圖22寫時 圖23復位時 圖24SPI時鐘 圖25變壓器特 圖26IRReflowTemperature 圖27封裝概
123456789微控制器(MCU)代類引腳號說I為了有效復位,低電平時間最少要保持2us。復位150毫秒。所以,當用戶由低nRST150毫秒為宜。以便鎖相環(PLL)邏輯的失效高電平變得穩定。請參考ISPISLAVE選擇(低電平有效O或Sockten-th中斷寄存器(Sn_IR)的相應位,進行置I腳ISPI主輸出輸OSPI主輸入輸I(高電平有效低:高:物理層(PHY)代類引腳號說IRXIP/RXIN差分信號IO(OOBIASI低:關閉自動應答談判模式高:I低=啟用半雙工模式=I低=10M速度模式100M綜合信代類引腳號說IW5200普通模式5其他測試模式是測試模I6-注意:上拉/40KΩ100KΩ。平常的值為電源信代類引腳號說11,15,3.3V27,3.3V8,1.8V13,19,9,10,28,O行功率(VCC1V8)。*注意:1V8O是W5200內核的電源。它不應該被I2XTAL_VDD※請參考‘W5200E01-M3的參考電路圖3電源設推薦的電源設計去耦電容盡可能靠近W5200時鐘信代類引腳號說I1 O2LED信
4代類碼說O3全雙工/低:全雙工高:半雙工O4低高O5高:物理連接失敗閃爍:內存圖(Memory5W5200W5200通用寄存地地0Socket地定時器 numberSocket中斷PHY狀態Socket寄存n是socket0,1,2,3,4,5,6,7地地Socketn的模式Socketn令Socketn的中斷Socketn的狀態SocketnSocketn的目的地MACSocket0的目的地IPSocket0Socket0Socket0在IPRawSocketnIPTOSSocketnIPTTL地Socket0TX(Sn_TXSocket0TXSocket0TXSocket0RX(Sn_RX_RSocket0RXSocket0RXSocket通用寄存MR模式寄存器R/W]0x0000]該寄存器用于S/W復位',block模式和PPPoE模式。 位代說7S/W復如果該位(bit)為'1',寄存器將被初始化。它會在654Block模式0:關閉1:啟用3PPPoE模0:關閉PPPoE1:啟用PPPoEADSL時,你應該設置該位(bit)為'1'來連接到ADSL服務器。如需詳細資料,請參考應用筆記,“如何連接210GAR網關IP地址寄存器R/W]0x00010x0004例)“192.168.0.1” 19216801SUBR子網掩碼寄存器R/W]0x00050x0008例)“255.255.255.0” 2552552550SHAR源MAC地址寄存器R/W]0x00090x000E]Ex)例如 SIPR源IP地址寄存器R/W]0x000F0x0012]例)“192.168.0.2” 19216802IR中斷寄存器R]0x0015]CPU通過該寄存器獲得產生中斷的來源。任何中斷源都可以被中斷寄存器(IMR)進 位代說7當對一個與本機IP地址相同的IP地址作ARP請求時,65PPPoE在PPPoE模式,如果PPPoE連接被關閉,該位置“1”。對43210IMR中斷掩碼寄存器R/W]0x0036如果中斷位被置“1”時,無論何時IR對應的位也置”1”,中斷即會產生。而當IMR中中斷的意思,“0”就是中斷的意思。) 位代說7啟用6保5啟用PPPoE關4保3保2保1保0保RTR重試時間值寄存器R/W]0x00170x0018]該寄存器用來設置溢出的時間值。每一單位數值為100微秒。初始化時值設為2000(0x07D0),即相當于200毫秒例)當超時周期被設置為400ms時,RTR=400ms/100us=如果沒有來自對等連接點的CONNECT、DISCON、CLOSE、SEND、SEND_MACRCR(重試計數寄存器RetryCountRegisterR/W]0xFE0019]該寄存器是設置重新傳送的次數。當重新傳送發生超過‘RCR+1’次,超時中斷就會置‘1’的 Sn_IR(Socketn-th的中斷寄存器)(TIMEOUT)會置'1'。如果不是TCP通訊,就只有例)RCR=0x0007在RP的重傳送超時(請參閱RC6,0自動發送RP請求去對方)的P地址,從而獲取C地址信息(P、P或CP用于通信)。至于等待對方r的ARP響應方面,如在TR中設置了重新傳送時間時,對方r的P沒R'CR次。ARP請求的最終超時值(ARPTO)如下ARPARPTO=(RTRX0.1ms)X(RCR+在RR和RCR設置了的時間期間,發生TCP數據包重新傳送超時,0就會發送CP數據包N、FN、RT、數據包)和等待確認(K)。如果沒有對方)的CK響應,就會觸發超時且CP數據包(較早前傳送的)會重新傳送。直到重新傳送'R'次。即使CP數據包重新傳送RCR+'次,如果對方)仍然沒有的K回應,就會觸發最終超時,SR會變為'CLETE'1。TCP數據包重新傳送的最終超時(TCPTO)可以用以下公式計算MTCPTO= Σ(RTRX2N +)X )XN:重試計數,0NM:最少數值當RTRX2(m+165535和0mrcrrtrmax:RTRX2m例)RTR2000(0x07D0),RCR8(0x0008),ARPTO=2000X0.1msX9=1800ms=1.8sTCPTO=(0x07D0+0x0FA0+0x1F40+0x3E80+0x7D00+0xFA00++0xFA0+0xFA00)X=(2000+4000+8000+16000+32000+((8-4)X64000))X=318000X0.1ms=PART(PPPoEPART(PPPoE該寄存器顯示已經被PPPoE服務器識別的認證類型。W5200支持PAP和CHAPPPPALGO(PPPoE模式的認證算法PTIMER(PPP連接控制協議請求定時寄存器該寄存器是指示發送LCPEcho請求的期限。PTIMER的值為1時,大約是25毫秒(ms。例)如果PTIMER是200,200*25(ms)=5000(ms)=5PMAGIC(PPP連接控制協議幻數寄存器)[R/W]INTLEVEL(低電平中斷定時器寄存器)[R/W][0x0030該寄存器用于設置中斷生效等待的時間(IAWT)。它配置nINT待時間直到下一個中斷生效IAWTIAWTINTLEVEL01)*PLL_CLKINTLEVEL06INTLEVEL對Socket0而言,當觸發接收中斷(即:S0_IR(3)1’),那么相應的IR2位就會被置1(即:IR(S0_IR)=‘1’).一旦IR2的某位被置1了,nINT就將變為低電平。B,C同理。在Socket1中,觸發連接中斷(S1_IR(0)='1')和相應的位(bit)設置為'1'C.主機清零S0_IR(S0_IR=0x00)則相應的IR位(bit)也會自動被清零(IR(S0_IR‘0’)。nINT信看INTLEVELregister的設置情況了。如果INTLEVELregister的值是0x000F的話,nINT將在IAWT(16PLL_CLK)后變為低電平。IR2(W5200SOCKET中斷寄存器低電平直到所有Sn_IR的位(bit)被設置為‘0’時,它才會變為高電平。 位代說7當SOCKET7有一個中斷發生,它(S7_INT)就變成'1'。與該中斷的6當SOCKET6有一個中斷發生,它(S6_INT)就變成'1'。與該中斷的5當SOCKET5有一個中斷發生,它(S5_INT)就變成'1'。與該中斷的4當SOCKET4有一個中斷發生,它(S4_INT)就變成'1'。與該中斷的3當SOCKET3有一個中斷發生,它(S3_INT)就變成'1'。與該中斷的2當SOCKET2有一個中斷發生,它(S2_INT)就變成'1'。與該中斷的1當SOCKET1有一個中斷發生,它(S1_INT)就變成'1'。與該中斷的0當SOCKET0有一個中斷發生,它(S0_INT)就變成'1'。與該中斷的位代說765連接狀態寄存器[只讀43物理層的掉電模式[只讀0:關閉電源掉電模式(正常模式1:210IMR2(中斷掩碼寄存器 位代說76IR(S6_INT)5IR(S5_INT)4IR(S4_INT)3IR(S3_INT)2IR(S2_INT)1IR(S1_INT)0IR(S0_INT)Socket寄存Sn1_MR h模式寄存器R/W]0x4000+0x0n00] ND/位代說7廣播0:1:6MAC過濾0:MAC1:MACMACRAWP3~P0當該位)被設置為'時,0可以接收屬于自己或廣播的數據包。當該位)被設置為'時,0可以接收所有以太網數據包。當使用混合的CP/P協議棧時,則建議設置為’以減少主機的5使用無延遲的0:關閉無延遲的ACK1:啟用無延遲的ACKTCPP3-P0:如果此位(bit)被設置為'1'時,當從一個對方(peer)接收到數據包后,ACK數據包就會立即傳送。如果該位(bit)被清零時,那么只會根據超時機制來決定是否發送ACK數據包。1n是Socketn-th的數目(0,1,2,3,4,5,6,2[讀/寫][socket0地址,socket1地址,socket2地址,socket3地址,socket4地址,socket5地址,socket地址,socket7地址復位數值廣播廣播0:使用IGMP版本1:使用IGMP版本當啟用MULTI位(bit)和UDP模式使用中(P3-P0:“0010”)此位(bit)才有效。此外,廣播可以用來在IGMP消息發送版本號碼number)。例如:加入//43*P3P2P10200000001100100011MR_MACRAW和S0_MR_PPPoE僅適用于SOCKET00P3P2P1P001000101MACRAW和S0_MR_PPPoE僅適用于SOCKET0。Sn_CR h命令寄存器R/W]0x4001+0x0n00]數代說按照Sn_MR(P3:P0)的協議選擇來初始化和打開(open)SocketSn_MR_CLOSE-Sn_MR_TCPSOCK_INITSOCK_UDP數代說按照Sn_MR(P3:P0)的協議選擇來初始化和打開(open)SocketSn_MR_CLOSE-Sn_MR_TCPSOCK_INITSOCK_UDP這是只適用于TCP模式_P)=Sn_TCP。在這種模式下,Socke h被配置為一個TCP服器它是等待“TCP客戶”。改變為SOCK_ESTABLIESHE,與此同時Sn_IR(0)會變為'1'。另一方面,當連接失敗時,Sn_IR(3)'1'Sn_SR改變為此模式只適用于TCP模式和Socketn-th作為TCP客戶端。通過與在目的地址寄存器和端寄存器中的IP地址和端進行連接,接請求被發送到TCP服務器。當一個客戶端的連接請求成功后,Sn_SRSOCK_ESTABLIESHED,Sn_IR(0)會變主動關閉:它傳輸斷開請求(FIN數據包)到所連接的對方關閉:當從對方(peer)收到FIN數據包時,回復一個FIN到CK_CLOSEDFIN/ACK這種斷開機制不被執行。如果當溝通期間從關閉Socke發送(SEND)傳送所有發送(TX)內存的緩沖數據。欲想了解詳情,請參閱Socketn-th發送(TX)自由尺寸寄存器(Sn_TX_FSR0),Sockeh發送(TX)寫指針寄存器(Sn_TX_WR0)和Socketn-th發基本操作是與發送E)相同的。發送E)操作通常需要通過RP(地址解析協議)過程中得到目的地C地址。而EC使用的ctnh目的地C地址SH0)是由用戶選擇而不R只適用于TCP(我們常說的keepalive機制。注意:要想讓keepalive機制正常工作,W5200必須先向對方(peer)發送過數據。這是keepalive協議規定的。)欲想了解參閱5.2.1.1服務器模式接收過程與Socketn-th接收(RX)的接收尺寸寄存器(Sn_RX_RSR0),Socketn-th接收(RX)寫指針寄存器(Sn_RX_WR)和Sockeh接收(RX)讀指針寄存數代說數代說在每個階段(phase它傳輸REQSn_IRSockeh中斷寄存器R]0x4002+0x0n00]Sn_IR寄存器用于提供給Sockeh中斷類型信息,如建立(Establishment)、終止(Termination)、接收數據(Receivingdata)和超時(Timeout)。當觸發一個中斷即Sn_IMR的掩 位代說7Sn_IR(PRECV)中斷掩6Sn_IR(PFAIL中斷掩5Sn_IR(PNEXT)中斷掩4Sn_IR(SENDOK)中斷掩3Sn_IR(TIMEOUT)中斷當ARPTO或TCPTO發生時,為‘TIMEOUT中斷2Sn_IR(RECV)中斷掩1Sn_IR(DISCON)中斷掩0Sn_IR(CON)中斷掩Sn_SR h狀態寄存器R]0x4003+0x0n00 的狀態將會更改。下表描述了不同Socke h的狀態。數代說執行DISCON或CLOSE令,或ARPTO或TCPTO發生時,它顯示。而當Sn_MR(P3:P0)是Sn_MR_TCP和執行OPEN令時,它將被更改為SOCK_INIT。這是建立TCP連接的第一它可以在“TCPSERVER“模式下進行LISTEN令和“TCP客戶端”下進行CONNECT令。這是SOCKETn以“TCPSERVER”進行下,等待從CLIENT”的連接請求(SYNpacket) h以“TCPSERVER”進行下,等待從“TCPCLIENT”的連接請求(SYNpacket)。當成功建立連接后,SOCKET的狀態會從SOCK_LISTEN轉到SOCK_ESTABLISHED。但是,如果連接失敗,將出現TCPTO(Sn_IR(TIME_OUT)='1')和狀態將轉換為它會在成功建立連接后顯示。當“TCPCLIENT”里的SYN數據包成功在SOCK_LISTEN中處理,或者是成功執行CONNECTS命令的時候,它的狀態將會轉成這是當收到對方請求斷開連接的一個狀態。即使P連接是半關閉的,它亦可以傳送數據包。所以,如想完成整個TCC對于沒有經過中斷程序而把SOCKETn這是把SOCKETn開啟作為UDP模式的一個狀態。當Sn_MR(P3:P0)Sn_MR_UDPOPEN命令被執行時,這個SOCKET會在IPRAW模式下打開。當如果S0_CR=OPEN和S0_MRP3:P0)=(以太網幀)是可以像UDP模式般傳送。S0_CR=OPENS0_MRP3:P0S0_MR_PPPoE數代說此狀態表示接請求(SYN數據包)已發送到“TCPSERVER”。此狀態顯示利用由SOCK_INIT到狀態下,如果收到由“TCPSERVER”的連接(SYN/ACK數據包,它會自動更改為SOCK_ESTBLISHED。如果在TCPTO(Sn_IR超時)='1')出現之前,還沒有收到“TCPSERVER”發出的SYN/ACK此狀態表示已收到一個從“TCPCLIENT”發出的連接請求(SYN數據包)。當W5200成功發出連接(SYN/ACK數據包)到“TCPCLIENT”,它就會自動更改為SOCK_ESTABLISHED。如果失敗就會觸發TCPTO(Sn_IR超這些狀況表示SOCKEh已關閉。這是對斷線程序中的“主動關閉”或“關閉”時的一個觀察。當斷線程序成功完成或TCPTO(Sn_IR(超時)='1')發生時,它便會更改為執行CONNECT命令中的SOCK_INIT時的一個監視。如果成功從目的地獲取目標硬件的地址(當收到ARP-response),它便會更改為SOCK_UDP、SOCK_IPRAW或是如果失敗,ARPTO(Sn_IR(超時)='1')便會發生。如發生在UDP或IPRAW模式,它便會回到以前的狀態(SOCK_UDP或SOCK_IPRAW)TCP到SOCK_CLOSED。-當之前和目前的Sn_DIPR值是不同的時候,ARP7SocketSn_PORT(Socke h源端口寄存器[R/W][0x4004+0x0n00-0x4005+0x0n00][0x0000]當使用TCP或UDP模式時,該寄存器會為每個SOCKET設置一個源端,而這個設置需要在例)如SOCKET0的端口=5000(0x1388) Sn_DHAR(Socke h目標MAC地址寄存器R/W]0x4006+0x0n00-0x400B+0x0n00]該寄存器會為Socketn-th設定目標MAC地址。此外,如果Socket0已用于PPPoE模式,那S0_DHARPPPoE當在UDP或IPRAW模式下使用SEND_MAC令時,它會為Sockeh設定目標MAC地址。而在TCP、UDP和IPRAW模式時,Sn_DHAR會根據定CONNECT或SEND命令中的ARP程序取得的目標MAC地址作出設定。當成功執行CONNECT或SEND命令后,主機可以通過Sn_DHAR取那PPPoE服務器MAC地址(從PPPoE程序中取得)、PPPoE服務器的IP地址、和PPPsessionID就應須被設置。此外,MR(PPPoE)也應設置為'1'。S0_DHAR會在OPEN命令之前設置PPPoE服務器MAC地址。PPPoE服務器MAC地址是由S0_DHAR執行OPENPDHAR里應用。而已經配置的PPPoE信息,即使是在CLOSE命地址 Sn_DIPR(Socke 為PPPoE服務器IP設置一個已知的地址。它只有在TCP、UDP、IPRAW或PPPoE模式下才有效,在P模式下,當作為P客戶端”的時候,它會在執行T命令之前,為P服務器“設置P地址。而當作為P服務器”的時候,它會在成功建立連接之后,在為P客戶端”IP例如Socket0的目標IP地址192.168.0.11 192168011Sn_DPORTSockeh目標端口寄存器)[R/W][0x4010+0x0n00-0x4011+0x0n00][0x00]目標端是在Sockeh的Sn_DPORT設置。如果Socket0已用于PPPoE模式,那S0_DPORT0PPPsessionID設置一個已知的號碼。它只有在TCP、UDP、或PPPoE模式下端傳UP數據包。在PPPoE模式下,已知的PPPsessionID是在S0_DPORTOPEN 模正常PPPoE1~1~1~1~Sn_MSS(Sockeh最大分段寄存器)[R/W][0x4012+0x0n00-0x4013+0x0n00][0x0000]該寄存器用于TCP的MSS- umSegmentSize(最大報文長度)。當TCP是在模式下被啟動,該寄存器會顯示MSS的設置。而它只是模正常PPPoE1~1~1~1~在P或CR模式下,T最大傳輸單元-mrsnt并不是在內部處理的,但會使用預設的U。因此,當傳輸的數據大于默認的U時,主機應該以手T在P或P模式下,如果傳輸的數據大于U時,0會自動將數據劃分成U的單元大小。在P模式下,U會被稱為S。S是從主機的最大讀寫長度和對方的最大報文長度 Sn_PROTO hIP協議寄存器R/W]0x4014+0x0n00這是一個1字節的寄存器。它用于設置在IP層里IP報頭(IPheader)的協議號碼字段。它只會 協議號碼已在IANA(互聯網地址編碼分配機構)里定義。如想閱讀細節,請參考文U例)InternetControlMessageProtocolICMP-互聯網控制信息協議)=0x01,InternetGroupManagementProtocol(互聯網組群管理協議)=0x02Sn_TOS hIP服務類型寄存器R/W]0x4015+0x0n00]該寄存器設置在IP層里IPheader的TOS(TypeofService-服務類型)字段。它應在執行OPEN命令之前設置。請參考U. hIP生存時間寄存器R/W]0x4016+0x0n00]該寄存器設置在IP層里IPheader的TTL(Time-To-Live生存時間)字段。它應在執行OPEN命令之前設置。請參考U. h接收內存大小寄存器R/W0x401E+0x0n00該寄存器為每個SOCKET配置接收內存的大小。每個SOCKET1、2、4、8和16K字節。當每次系統復位(Reset)時,它將被分配為例1)SOCKET08KBSOCKET1 例2)SOCKET21KBSOCKET3 例3)SOCKET41KBSOCKET5 例4)SOCKET61KBSOCKET7 Sn_TXMEM_SIZE(Sockeh傳輸內存大小寄存器)[R/W][0x401E+0x0n00]該寄存器為每個SOCKET配置傳輸內存的大小。每個SOCKET1、2、4、8和16K字節。當每次系統復位(Reset)時,它將被分配為2K字節。而每個SOCKET的Sn_TXMEM_SIZE的總和(Sn_TXMEM_SIZESUM)應是16KB。例1)SOCKET04KBSOCKET1 例2)SOCKET22KBSOCKET3 例3)SOCKET42KBSOCKET5 例4)SOCKET62KBSOCKET7 Sn_TX_FSR(Socke h傳輸空間大小寄存器R]0x4020+0x0n00-0x4021+0x0n00]該寄存器提供Socketn-th傳輸內存的可用大小空間(可供傳輸數據的字節大小)。請留意,主機不能編寫大于Sn_TX_FSR的數據。因此,在發送數據之前,切記檢查Sn_TX_FSR。如果你的數據大小小于或等于Sn_TX_FSR時,在數據后,可執行SEND或SEND_MAC命令來傳輸’當檢查該寄存器時,用戶應先閱讀高字節(0x4020,0x4120,0x4220,0x4320,0x4420,0x4520,0x4620,例)如2048(0x0800)在S0_TX_FSR時, Sn_TX_RD(Socke h傳輸讀指針寄存器R]0x4022+0x0n00-0x4023+0x0n00]該寄存器顯示傳輸內存里最后一個傳輸的地址。它可使用Sockeh令寄存器中的SENDSn_TX_RD傳輸到Sn_TX_WR,并在傳送完成后自動更新。因此,在傳當檢查該寄存器時,用戶應先閱讀高字節(0x4022,0x4122,0x4222,0x4322,0x4422,0x4522,0x4622,0x4722),然后閱讀低字節(0x4023,0x4123,0x4223,0x4323,0x4423,Sn_TX_WR(Socke h傳輸寫指針寄存器R/W]0x4024+0x0n00-0x4025+0x0n00]該寄存器提供位置的信息用作編寫傳輸數據。當檢查該寄存器時,用戶應先閱讀高字節(0x4024,0x4124,0x4224,0x4324,0x4424,0x4524,0x4624,0x4724),然后閱讀低字節(0x40250x41250x4225,0x4325,0x44250x4525,0x4625,0x4725)才會得到正確的數值。例)如2048(0x0800)在S0_TX_WR時, ChipBaseAddress=0x0000,512(0x0200)bytesSocket7Socket7Socket6Socket5Socket4Socket3Socket2Socket1Socket0
SocketSocketIfS0_TX_WR0=RealPhysicalAddressis0x8000+(0x8FEE&0x07FF)=494SocketSocket18RealPhysicalAddressis0x8000+0x01EE(494)S0_TX_WR0is0x8800–0x87EE=18byteswritechangesto8Socketn-th傳輸基址地址(此后會稱為gSn_TX_BASE)和Sockeh傳輸掩碼地址(此后會稱為gSn_TX_MASK)將會以TMSR數值計算。需要,請參考psedo的初始化代將Sn_TX_WR和gSn_TX_MASK進行位與運算(bitwise-ANDoperation),將得到的結果賦予Socket的傳輸內存中的偏移地址(此后會稱為get_offset)。現在,編寫一個任何大小的傳輸數據到get_start_address(*如在編寫的時候超過了Socket傳輸內存的上界,在這種情況下,先把傳輸數據編寫到上界和把物理地址轉到gSn_TX_BASE,然后再編寫其余部分的傳輸數據。)之后,切記要把Sn_TX_WR的數值增加到跟編寫數據的大小相同。最后,提供一個SEND命令給Sn_CR(Sockeh命令寄存器)。如果有需要,請參考TCP服務器模式下傳輸部分的psedo代碼([[該寄存器向用戶提供在Socketn-th接收內存里已接收數據的字節大小。由于這是以Sn_RX_RD和Sn_RX_WR的數值進行計算,它會因Sn_CR(Socketn-th命令寄存器)中的當檢查該寄存器時,用戶應先閱讀高字節(0x4026,0x4126,0x4226,0x4326,0x4426,0x4526,0x4626,0x4726),然后閱讀低字節(0x4027,0x4127,0x4227,0x4327,0x4427,0x4527,0x4627,0x4727)才會得到正確的數值。例)如2048(0x0800)Sn_RX_RDSocke h接收讀指針寄存器)[R/W]0x4028+0x0n00-0x4028+0x0n00]該寄存器提供的位置信息接收數據。當檢查該寄存器時,用戶應先閱讀高字節(0x4028,0x4128,0x4228,0x4328,0x4428,0x4528,0x4628,0x4728),然后閱讀低字節(0x4029,0x4129,0x4229,0x4329,0x44290x4529,0x4629,0x4729)例)如2048(0x0800)Sockeh接收基址地址(此后會稱為gSn_RX_BASE)和Socketn-th接收掩碼地址(此后會稱為gSn_RX_MASK)將會以RMSR數值計算。需要,請參考psedo的5.1將Sn_RX_WR和gSn_RX_MASK進行位與運算(bitwise-ANDoperation),將得到的結果賦予Socket的傳輸內存中的偏移地址(此后會稱為get_offset)。Sn_RX_WR(Socketn-th接收寫指針寄存器)[R/W][(0xFE402A+0xn00)–(0xFE402B+該寄存器提供位置信息以供編寫接收數據。當檢查該寄存器時,用戶應先閱讀高字節(0x402A,0x412A,0x422A,0x432A,0x442A,0x452A,0x462A,0x472A),然后閱讀低字節(0x402B,0x412B,0x422B,0x432B,0x442B,0x452B0x462B,0x472B)才會得到正確的數值。例)如2048(0x0800)在S0_RX_WR Sn_IMRSockeh中斷掩碼寄存器該寄存器配置ockeh的中斷,以及通知到主機。R的中斷掩碼位跟R的中斷位是對應的。如果中斷發生在任何t時,該位會設置為’,而與其對應的R位也會設置為’。當R和R的位同時是時,R)將成為’。在這個時候,如果R是) 位代說7Sn_IR(PRECV)6Sn_IR(PFAIL5Sn_IR(PNEXT)43Sn_IR(TIMEOUT)210Sn_IR(CON)_RGceR/W00000+0040]它設置了P層中P并不支持在層的分段數據包。盡管已配置,但P數據并沒有分段,同時也不建議在此分段。它應該在執行PN命令之前被配置。例Sn_FRAG00x4000不要分段 功能說初始基本設對于網絡設置信R中的硬件源地址已經被規定,它使用的是以太網C層的唯一的C地址作為其硬件地址。EE負責管理C地址的分配。而生產網絡設備的制造商會替其產品分配AC如欲了解MAC地址分配參閱以下U,U設置Socket的內存信Incaseof,assign2KBrx,txmemoryper{gS0_RX_BASE0x0000(Chipbaseaddress)0xC000(InternalRXbufferaddress);替Socket0設置接收內存中的基址地址Sn_RXMEM_SIZE(ch)=(uint8*)2; //分配2K接收內存給每個SOCKETgS0_RX_MASK2K1;0x07FF,在指定的Socket0接收內存取得偏移地址gS1_RX_BASE=gS0_RX_BASE+(gS0_RX_MASK+1);gS1_RX_MASK=2K–gS2_RX_BASE=gS1_RX_BASE+(gS1_RX_MASK+1);gS2_RX_MASK=2K–1;gS3_RX_BASE=gS2_RX_BASE+(gS2_RX_MASK+1);gS3_RX_MASK=2K–1;gS4_RX_BASE=gS3_RX_BASE+(gS3_RX_MASK+1);gS4_RX_MASK=2K–1;gS5_RX_BASE=gS4_RX_BASE+(gS4_RX_MASK+1);gS5_RX_MASK=2K–1;gS6_RX_BASE=gS5_RX_BASE+(gS5_RX_MASK+1);gS6_RX_MASK=2K–1;gS7_RX_BASE=gS6_RX_BASE+(gS6_RX_MASK+1);gS7_RX_MASK=2K–1;gS0_TX_BASE0x0000(Chipbaseaddress)0x8000(InternalTXbufferaddress);//Sn_TXMEM_SIZE(ch)=(uint8*)2; gS0_TX_MASK=2K–1;/*同樣的方法,設置gS1_TX_BASE,gS1_TX_MASK,gS2_TX_BASE,gS2_TX_MASK, gS5_TX_MASK,gS6_TX_BASE,gS6_tx_MASK,gS7_TX_BASE,gS7_TX_MASK}Sn_TXMEM_SIZE(ch)=Chipbaseaddress=
SocketSocketSocketSocketSocketSocketSocketSocketSocket
gS7_TX_BASE=0xB800gS7_TX_MASK=gS6_TX_BASE=0xB000gS6_TX_MASK=gS5_TX_BASE=0xA800gS5_TX_MASK=gS4_TX_BASE=0xA000gS4_TX_MASK=gS3_TX_BASE=0x9800gS3_TX_MASK=gS2_TX_BASE=0x9000gS2_TX_MASK=gS1_TX_BASE=0x8800gS1_TX_MASK=gS0_TX_BASE=0x8000gS0_TX_MASK=TXSn_RXMEM_SIZE(ch)=Chipbaseaddress=
SocketSocketSocketSocketSocketSocketSocketSocketSocket
gS7_RX_BASE=0xF800gS7_RX_MASK=gS6_RX_BASE=0xF000gS6_RX_MASK=gS5_RX_BASE=0xE800gS5_RX_MASK=gS4_RX_BASE=0xE000gS4_RX_MASK=gS3_RX_BASE=0xD800gS3_RX_MASK=gS2_RX_BASE=0xD000gS2_RX_MASK=gS1_RX_BASE=0xC800gS1_RX_MASK=gS0_RX_BASE=0xC000gS0_RX_MASK=RX圖9 h發送或接收的內存配置數據通數據傳完成初始化過程后,W5200可以‘開啟’TCP、UDP、IPRAW、MACRAW模式的Socket,對W5200可同時支持8個Sockets獨立使用。在本節中,將會介紹每個模TCP是一個面向連接(connection-oriented)的協議。TCP使用其自己的IP地址、端、目標IP地址、目標端來建立連接Socket。然后通過此Socket發送和接收數據。求(打開)建立連接Socket。10TCP服務器和TCPTCP11TCP套接字初始TCP數據通信必需要套接字初始化。初始化會開啟套接字。套接字的開啟過程是選擇00其中一個套接字,并在該套接字設置協議模式R)和源端PO0–在P服務器”中端),然后執行N命令。執行命令之后,如果R的狀態被更SOCK_IT,表示SKET套接字初始化過程在“TCP服務器”和“TCP客戶端”的應用是相同的。Sockeh在TCP模Sn_MR=Sn_PORT0 Sn_CRSn_CR //設置OPENif(Sn_SR!=SOCK_INIT)Sn_CR=CLOSE;goto}(LISTEN){Sn_CR={Sn_CR=/*等到Sn_SRSOCK_LISTENif(Sn_SR!=SOCK_LISTEN)Sn_CR=CLOSE;goto}{}{if(Sn_IR(CON)== Sn_IR(CON)=‘1’;gotoESTABLISHED/*在這種情況下,如果Socke h{}{if(Sn_IR(CON)== Sn_IR(CON)=‘1’;gotoESTABLISHED/*在這種情況下,如果Socke h的中斷被啟動,中斷將發生。參照IR、IMRSn_IMR和Sn_IR*/}{if(Sn_RX_RSR0!=0x0000)gotoReceivingProcess{if(Sn_RX_RSR0!=0x0000)gotoReceivingProcess}{if(Sn_IR(RECV)==‘1’)Sn_IR(RECV)=‘1’;gotoReceivingProcess/*在這種情況下,如果Socke h的中斷被啟動,中斷將發生。參照IR、IMRSn_IMR和Sn_IR*/}方法一:每當收到一個數據包,把Sn_IR(RECV)設置為‘1’。如主機接收到下一個數據包前一個的Sn_IR(RECV跟接下來的Sn_IR(RECV)重迭。如果主機不能完全處理每個):{len src_mask=/*計算起始地址(物理地址)*/src_ptrgSn_RX_BASEsrc_mask;/*如果SOCKET接收內存溢出*/If((src_mask{len src_mask=/*計算起始地址(物理地址)*/src_ptrgSn_RX_BASEsrc_mask;/*如果SOCKET接收內存溢出*/If((src_masklen)gSn_RX_MASK1)){ source_ptr的upper_size字節到destination_addressupper_size=(gSn_RX_MASK+1)–src_mask;memcpy(src_ptr,dst_ptr,upper_size);}}left_size=len–upper_size;}{memcpy(src_ptr,dst_ptr,len);}Sn_RX_RD+=len;/*設置RECVSn_CR=gSn_RX_BASE的left_size字節到destination_address/*更新destination_ptr):發送數據的大小不能大于Sockeh已分配的發送內存。如果傳輸數據的大小大于已可能會出現錯誤。而較大的數據將會需要的時間來完成SEND命令。因此,用戶應正確如想檢查E發送的數據長度的計算方法是由之前_D的數值與執行ED命令之后的數值的差別計算出來。如果實際發送的數據少于發送數據長度,ED因此,當實際發送數據的總與發送數據的長度是相等時,表示ND:例SendDataLengthSize連同發送的數據長度,執行SEND命(=剩余的數據長度重試SEND命令直到實際發送的數據長度的總和與發送數據的長度是相同{freesize=iffreesize<lengoto /*(物理地址dst_ptrgSn_TX_BASE /*如果SOCKET發送內存溢出if((dst_mask+len)>(gSn_TX_MASK+1){ upper_size=(gSn_TX_MASK+1)–dst_mask;memcpy(src_addr,dst_ptr,upper_size);/*更新source_addr*/ left_size=len–upper_size;}{ memcpy(source_addr,dst_ptr,len);}Sn_TX_WR0+=send_size;Sn_CR=SEND;return(read_ptr_after_send-read_ptr_befor_send重試發送剩余的數據(不要 }建立(ESTABLISHMENT):檢查中斷請求(FIN數據包{if(Sn_SR=={if(Sn_SR==SOCK_CLOSE_WAIT)gotoCLOSED}{if(Sn_IR(DISCON)==‘1’)Sn_IR(DISCON)=‘1’;gotoCLOSED/*在這種情況下,如果Socke h的中斷被啟動,中斷將發生。參照IR、IMRSn_IMR和Sn_IR*/}:{/*設置DISCON命令{/*設置DISCON命令*/Sn_CR=DISCON;}建立(ESTABLISHMENT)檢查關{if(Sn_SR==SOCK_CLOSED)gotoCLOSED}{if(Sn_SR==SOCK_CLOSED)gotoCLOSED}{if(Sn_IR(DISCON)==‘1’)gotoCLOSED/*在這種情況下,如果Socke h的中斷被啟動,中斷將發生。參照IR、IMRSn_IMR和Sn_IR.*/}建立(ESTABLISHMENT)超{if(Sn_SR==SOCK_CLOSED)gotoCLOSED}{if(Sn_IR(TIMEOUTbit)==‘1’)Sn_IR(TIMEOUT)=‘1’;gotoCLOSED/*在這種情況下,如果Socke h的中斷被啟動,中斷將發生。參照IR、IMR}超時會由以下情況觸發連接請求N數據包或它響應/K數據包、數據包或它響應/K數據包)、中斷請求{if(Sn_SR==SOCK_CLOSED)gotoCLOSED}{if(Sn_IR(TIMEOUTbit)==‘1’)Sn_IR(TIMEOUT)=‘1’;gotoCLOSED/*在這種情況下,如果Socke h的中斷被啟動,中斷將發生。參照IR、IMR}SOCKET關{/*清除SockeSn_IR=0xFF;IR(n)=h剩余的中斷{/*清除SockeSn_IR=0xFF;IR(n)=h剩余的中斷/*設置CLOSE命令*/Sn_CR=CLOSE;}TCP12TCP連發送連接請求(SYN包)到“TCP服務器”。當用套接字去連接服務器時,可能會觸發像ARPTO{Sn_DIPR0=server_ip;/*設置TCP服務器IP地址*/{Sn_DIPR0=server_ip;/*設置TCP服務器IP地址*/ }P是一個非連接協議。它的通信不用“連接套接字”。P協議保證了可靠的數據通信,但基于P協議的數據報不能保證傳輸數據的可靠性。因為P不使用“連接套接字”,因此它可以通過已知的宿主P地址和端與其他很多設備進行通信。只用一個t端口就能與13UDP單播和廣播方單播方式是UDP通信中的一種。它將數據發到目的地。而廣播式的通信則是用‘廣播IP宿主 --廣播 套接字初始Sn_MR=Sn_PORT0=source_port;Sn_CR=OPEN;/*設置UDP模式/*設置源端if(Sn_SR!=SOCK_UDP)Sn_CR=CLOSE;goto}檢查收到的數{if(Sn_RX_RSR0!=0x0000)gotoReceivingProcess}}if(Sn_IR(RECV)==‘1’)Sn_IR(RECV)=‘1’;gotoReceivingProcess第{接收過14接收UDP{src_maskSn_RX_RD&g {src_maskSn_RX_RD&g src_ptrgSn_RX_BASE header_size=8;if((src_mask+header_size)>(gSn_RX_MASK+1){upper_sizegSn_RX_MASK1)src_mask;memcpy(src_ptr,header,upper_size);left_size=header_size–upper_size;memcpy(gSn_RX_BASE,header,left_size);src_mask=}{memcpy(src_ptr,header,header_size);}src_ptr=gSn_RX_BASE+ peer_ip=header[0to3];peer_port=header[4to5];get_size=header[6to7];if((src_mask+get_size)>(gSn_RX_MASK+1){upper_size=(gSn_RX_MASK+1)–src_mask;left_size=get_size–upper_size;}{}Sn_RX_RD=Sn_RX_RD+header_size+Sn_CR=RECV;}檢查發送數據/發送{{freesize=iffreesize<lengoto Sn_DIPR0=remote_ip;dst_maskSn_TX_WR0& dst_ptrgSn_TX_BASE if((dst_mask+len)>(gSn_TX_MASK+1){upper_size=(gSn_TX_MASK+1)–dst_mask;/*將源地址的左面字節拷貝到gSn_TX_BASE*/left_size=send_size–upper_size;{memcpy(src_ptr,destination_addr,len);}Sn_TX_WR0+=len;Sn_CR=SEND;}檢查發送完畢/超{If(Sn_CR==0x00)transmissioniscompleted.If(Sn_IR(TIMEOUTbit)==‘1’)gotonextstage;/*在這種情況下,如果所選擇的套接字中斷被激活,中斷就會發生。參考Interrupt}{ {}檢查完成/套接字關{{Sn_IR=0x00FF;IR(n)=Sn_CR=CLOSE;}多廣播通信可以跟許多其他設備(不用指明)的目標進行通信的。假設A、B、C是在一個指定的多播組中的三個用戶。如果用戶發送數據到這個組中的A用戶,B、C也能收到此數據。使用這種方式時,目的地址列表要使用P協議在多播組中。多播組包含“組C地址”、“組P地址”、“組端”。用戶不端。在0中,處理多播中進行組的P是在(自動)經行的。當用戶以多播方式打開他所用的Socketnh時,會發送“連接(join)”信息,如果用戶將其關掉,則會發送“離開(e)”信息。當套接字打開后,當用戶通信時,t(報告)”信息周在。套接字初始組IP地址”設為Sn_DIPR0。然后將“多播組端”設為Sn_PORT0和Sn_DPORT0。設置Sn_DHAR0=0x01;Sn_DHAR1=0x00;Sn_DHAR2=0x5E;Sn_DHAR3=0x01;Sn_DHAR4=0x01;Sn_DHAR5=0x0B;Sn_DIPR0=211;Sn_DIPR1=Sn_DIPR2=Sn_DIRP3=
) }}if(Sn_SR!=SOCK_UDP)Sn_CR=CLOSE;gotoSn_CR=Sn_PORT0=0x0BB8;/*設置源 Sn_MR=0x02|0x80;/*在 h模式寄存器設置UDP模式和多播檢查接收到的數接收過檢查發送數據/發送。然后,要傳送的數據到TX緩沖區,執行SEND命令就可以了。{{freesize=iffreesize<lengoto dst_mask=Sn_TX_WR0dst_ptrgSn_TX_BASEif((dst_mask+len)>(gSn_TX_MASK+1){ upper_sizegSn_TX_MASK1)dst_mask;left_size=len–}{}Sn_TX_WR0+=send_size;Sn_CR}檢查發送完成/超{{while(S0_IR(SENDOK)==‘0’);/*等待發送完成的中斷*/S0_IR(SENDOK)=‘1’; }檢查完成/套接字關IPRAW(以IP層為上限的處理模式IPRAW支持IP層協議,比如根據協議號有ICMP(0x01)和IGMP(0x02)。ICMP的“”和議號是被IANA定義的,請參考:numbers不支持的套接字通信只允許指定協議號的通信。比如15IPRAW套接字初始{{Sn_MR=0x03;Sn_CR=OPEN;if(Sn_SR!=SOCK_IPRAW)Sn_CR=CLOSE;goto}檢查接收數接收過圖15接收IPRAW的數W數據包含了6個字節的包信息和數據信息包含了發送者(P地址)和數據包的長度。除了處理在P套接字信息中關于發送者的端外,W的數據接收與P數據接收基本上一樣。參考1單播和廣播模式”。如果所傳輸的數據比選用套接字的接收緩檢查發送數據/發送完成發送/超檢查完成/套接字關MACRAW(以MAC層為上限的數據處理模式16MACRAW套接字初始S0_MR=0x04;S0_CR=OPEN;if(Sn_SR!=SOCK_MACRAW)S0_CR=CLOSE;goto}檢查接收數接收過17接收MACRAWMACRAW數據包含“包信息”,“數據包”和4字節的循環。“包信息”是數據包的長度,細的“類型”信息,清參考下面:{{src_maskSn_RX_RD& If((src_masklen)gSn_RX_MASK1)){upper_size(gSn_RX_MASK1)src_mask;memcpy(src_ptr,dst_addr,upper_size);left_size=len–upper_size;memcpy(src_ptr,dst_addr,left_size);}{memcpy(src_ptr,dst_addr,len);}Sn_RX_RD+=len; memcpy(src_ptr,dst_addr,len);Sn_CR=RECV;}src_ptr=gSn_RX_BASE+MACRAW數據。越接近接收緩存大小,發生錯誤的概率也大。如果用戶可以允許/*通過使能MAC過濾來設置MACraw模式*/S0_MR=0x44;S0_CR=OPEN;if(Sn_SR!=SOCK_MACRAW)S0_CR=CLOSE;goto}{{if((Sn_RXMEM_SIZE(0)*1024)-Sn_RX_RSR0(0)<{recved_size=Sn_RX_RSR0(0); Sn_CR0=CLOSE; while(Sn_SR while(recved_size>0){If((src_masklen)gSn_RX_MASK1)){upper_sizegSn_RX_MASK1)src_mask;memcpy(src_ptr,dst_addr,upper_size);left_size=len–}{}Sn_RX_RD+=len; memcpy(src_ptr,dst_addr,len); recved_size=recved_size–2–len–4;}S0_MR=0x44;/*或者S0_MR=0x04*/S0_CR=OPEN;while(Sn_SR!=SOCK_MACRAW);} }}檢查發送數據/發送用戶想發送的數據的大小過發送緩存的大小和缺省MTU。主機產生與“接收過程”發送的以太網包在會以0填充的方式擴充到60字節,然后發送。{{;}}{memcpy(src_ptrdst_addr,upper_size);}{}檢查發送完{{’);}檢查結束/套接字關外部接SPI接串行接口模式只需要4個引腳進行數據通信。這 (Hardwired(Hardwired18SPI設備操主控制器(SPI的主設備)發出一系列指令控制W5200的運行。SPI主設備通過四個信號線與W5200通信:從設備
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄭州軟件職業技術學院《數字電子技術基礎A》2023-2024學年第二學期期末試卷
- 平頂山工業職業技術學院《普通話與教師語言規范》2023-2024學年第二學期期末試卷
- 杭州職業技術學院《民用建筑工程調研實訓》2023-2024學年第二學期期末試卷
- 煙臺城市科技職業學院《太極養生俱樂部》2023-2024學年第二學期期末試卷
- 石家莊鐵道大學《電路與電子基礎》2023-2024學年第二學期期末試卷
- 上海電機學院《數學教學與實踐》2023-2024學年第二學期期末試卷
- 上海第二工業大學《數據挖掘技能訓練》2023-2024學年第二學期期末試卷
- 遼寧商貿職業學院《地球科學概論》2023-2024學年第二學期期末試卷
- 廣東云浮中醫藥職業學院《系統節能》2023-2024學年第二學期期末試卷
- 廣州現代信息工程職業技術學院《早期接觸臨床》2023-2024學年第二學期期末試卷
- 2024年合肥市網約配送員技能競賽理論考試題庫(含答案)
- 【淺談勞動合同法中的試用期制度7500字(論文)】
- 2024中國企業海外知識產權糾紛調查
- OTN在地鐵行業中的應用
- 大學體育與健康智慧樹知到期末考試答案章節答案2024年齊魯師范學院
- 2023-2024學年浙江省紹興市上虞市重點中學小升初數學入學考試卷含解析
- 小區消防移交物業協議書
- 【一例豬流行性腹瀉的診斷與治療實例探析4500字(論文)】
- 2024年正式離婚協議電子版(三篇)
- 中餐餐中服務服務流程培訓
- 外賣行業交通安全培訓
評論
0/150
提交評論