單片機(jī)-w5200模塊v1.0數(shù)據(jù)手冊(cè)_第1頁(yè)
單片機(jī)-w5200模塊v1.0數(shù)據(jù)手冊(cè)_第2頁(yè)
單片機(jī)-w5200模塊v1.0數(shù)據(jù)手冊(cè)_第3頁(yè)
單片機(jī)-w5200模塊v1.0數(shù)據(jù)手冊(cè)_第4頁(yè)
單片機(jī)-w5200模塊v1.0數(shù)據(jù)手冊(cè)_第5頁(yè)
已閱讀5頁(yè),還剩78頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

iEthernet版本?2011WIZnet . 信息, 我們W5200是一種采用全硬件TCP/IP協(xié)議棧的嵌入式以太網(wǎng)控制器,它能使嵌入式系統(tǒng)實(shí)現(xiàn)互聯(lián)網(wǎng)功能的客戶,而這就需要單片機(jī)系統(tǒng)具有完整的TCP/IP協(xié)議棧和0CP/PCP/TP、P、Pv4、CP、P、GP和PE協(xié)議,而且已經(jīng)連續(xù)多年在各種實(shí)際應(yīng)用中得以證明。0使用KB緩存作為其數(shù)據(jù)通信內(nèi)存。通過(guò)使用0,用戶只需通過(guò)使用一個(gè)簡(jiǎn)單的ct程序就能實(shí)現(xiàn)以太網(wǎng)P(串行外設(shè)接口提供了輕松與外部CU連接的接口。0支持高達(dá)HZ的I接口間通信。為了降低系統(tǒng)功率的消耗,0提供了網(wǎng)絡(luò)喚醒和休眠模式。00收到cc特支持硬件TCP/IP協(xié)議:TCP、UDP、ICMP、IGMP、IPv4、ARP、IGMP、PPPoE和以太目標(biāo)應(yīng)家庭網(wǎng)絡(luò)設(shè)備:機(jī)頂盒、個(gè)人機(jī)、數(shù)碼適配USB轉(zhuǎn)以太網(wǎng):設(shè)備、網(wǎng)絡(luò)打GPIO轉(zhuǎn)以太網(wǎng):安全系統(tǒng):數(shù)字機(jī)、機(jī)、信息結(jié)構(gòu)結(jié)構(gòu)引腳分 微控制器(MCU)接口信 物理層(PHY)信 綜合信 電源信 時(shí)鐘信 LED信 內(nèi)存圖(Memory W5200寄存 通用寄存 Socket寄存 寄存器說(shuō) 通用寄存 Socket寄存 功能說(shuō) 初始 數(shù)據(jù)通 TCP服務(wù) TCP客戶 單播和廣播方 多 IPRAW(以IP層為上限的處理模式 MACRAW(以MAC層為上限的數(shù)據(jù)處理模式 外部接 SPI接 設(shè)備操 SPI主設(shè)備操 電器規(guī) 極限 直流特 功耗(Vcc3.3V溫度 特 復(fù)位時(shí) 晶體特 SPI時(shí)鐘 變壓器特 封裝概 文件歷史信 插圖圖 圖2XTAL_VDD參考電路 圖3電源設(shè) 圖4晶振體參考原理 圖5W5200內(nèi)存 圖6INTLEVEL的時(shí) 圖 Socket的狀態(tài)轉(zhuǎn)換 圖8物理地址的計(jì) 圖9 圖10TCP服務(wù)器和TCP客戶 圖11TCP服務(wù)器操作流 圖12TCP客戶端操作流程 圖13UDP操作流 圖14接收UDP數(shù)據(jù)的格 圖15IPRAW操作流程 圖16MACRAW操作流 圖17接收MACRAW數(shù)據(jù)格 圖18SPI接 圖19W5200SPI幀格 圖21讀時(shí) 圖22寫(xiě)時(shí) 圖23復(fù)位時(shí) 圖24SPI時(shí)鐘 圖25變壓器特 圖26IRReflowTemperature 圖27封裝概

123456789微控制器(MCU)代類(lèi)引腳號(hào)說(shuō)I為了有效復(fù)位,低電平時(shí)間最少要保持2us。復(fù)位150毫秒。所以,當(dāng)用戶由低nRST150毫秒為宜。以便鎖相環(huán)(PLL)邏輯的失效高電平變得穩(wěn)定。請(qǐng)參考ISPISLAVE選擇(低電平有效O或Sockten-th中斷寄存器(Sn_IR)的相應(yīng)位,進(jìn)行置I腳ISPI主輸出輸OSPI主輸入輸I(高電平有效低:高:物理層(PHY)代類(lèi)引腳號(hào)說(shuō)IRXIP/RXIN差分信號(hào)IO(OOBIASI低:關(guān)閉自動(dòng)應(yīng)答談判模式高:I低=啟用半雙工模式=I低=10M速度模式100M綜合信代類(lèi)引腳號(hào)說(shuō)IW5200普通模式5其他測(cè)試模式是測(cè)試模I6-注意:上拉/40KΩ100KΩ。平常的值為電源信代類(lèi)引腳號(hào)說(shuō)11,15,3.3V27,3.3V8,1.8V13,19,9,10,28,O行功率(VCC1V8)。*注意:1V8O是W5200內(nèi)核的電源。它不應(yīng)該被I2XTAL_VDD※請(qǐng)參考‘W5200E01-M3的參考電路圖3電源設(shè)推薦的電源設(shè)計(jì)去耦電容盡可能靠近W5200時(shí)鐘信代類(lèi)引腳號(hào)說(shuō)I1 O2LED信

4代類(lèi)碼說(shuō)O3全雙工/低:全雙工高:半雙工O4低高O5高:物理連接失敗閃爍:內(nèi)存圖(Memory5W5200W5200通用寄存地地0Socket地定時(shí)器 numberSocket中斷PHY狀態(tài)Socket寄存n是socket0,1,2,3,4,5,6,7地地Socketn的模式Socketn令Socketn的中斷Socketn的狀態(tài)SocketnSocketn的目的地MACSocket0的目的地IPSocket0Socket0Socket0在IPRawSocketnIPTOSSocketnIPTTL地Socket0TX(Sn_TXSocket0TXSocket0TXSocket0RX(Sn_RX_RSocket0RXSocket0RXSocket通用寄存MR模式寄存器R/W]0x0000]該寄存器用于S/W復(fù)位',block模式和PPPoE模式。 位代說(shuō)7S/W復(fù)如果該位(bit)為'1',寄存器將被初始化。它會(huì)在654Block模式0:關(guān)閉1:啟用3PPPoE模0:關(guān)閉PPPoE1:啟用PPPoEADSL時(shí),你應(yīng)該設(shè)置該位(bit)為'1'來(lái)連接到ADSL服務(wù)器。如需詳細(xì)資料,請(qǐng)參考應(yīng)用筆記,“如何連接210GAR網(wǎng)關(guān)IP地址寄存器R/W]0x00010x0004例)“192.168.0.1” 19216801SUBR子網(wǎng)掩碼寄存器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通過(guò)該寄存器獲得產(chǎn)生中斷的來(lái)源。任何中斷源都可以被中斷寄存器(IMR)進(jìn) 位代說(shuō)7當(dāng)對(duì)一個(gè)與本機(jī)IP地址相同的IP地址作ARP請(qǐng)求時(shí),65PPPoE在PPPoE模式,如果PPPoE連接被關(guān)閉,該位置“1”。對(duì)43210IMR中斷掩碼寄存器R/W]0x0036如果中斷位被置“1”時(shí),無(wú)論何時(shí)IR對(duì)應(yīng)的位也置”1”,中斷即會(huì)產(chǎn)生。而當(dāng)IMR中中斷的意思,“0”就是中斷的意思。) 位代說(shuō)7啟用6保5啟用PPPoE關(guān)4保3保2保1保0保RTR重試時(shí)間值寄存器R/W]0x00170x0018]該寄存器用來(lái)設(shè)置溢出的時(shí)間值。每一單位數(shù)值為100微秒。初始化時(shí)值設(shè)為2000(0x07D0),即相當(dāng)于200毫秒例)當(dāng)超時(shí)周期被設(shè)置為400ms時(shí),RTR=400ms/100us=如果沒(méi)有來(lái)自對(duì)等連接點(diǎn)的CONNECT、DISCON、CLOSE、SEND、SEND_MACRCR(重試計(jì)數(shù)寄存器RetryCountRegisterR/W]0xFE0019]該寄存器是設(shè)置重新傳送的次數(shù)。當(dāng)重新傳送發(fā)生超過(guò)‘RCR+1’次,超時(shí)中斷就會(huì)置‘1’的 Sn_IR(Socketn-th的中斷寄存器)(TIMEOUT)會(huì)置'1'。如果不是TCP通訊,就只有例)RCR=0x0007在RP的重傳送超時(shí)(請(qǐng)參閱RC6,0自動(dòng)發(fā)送RP請(qǐng)求去對(duì)方)的P地址,從而獲取C地址信息(P、P或CP用于通信)。至于等待對(duì)方r的ARP響應(yīng)方面,如在TR中設(shè)置了重新傳送時(shí)間時(shí),對(duì)方r的P沒(méi)R'CR次。ARP請(qǐng)求的最終超時(shí)值(ARPTO)如下ARPARPTO=(RTRX0.1ms)X(RCR+在RR和RCR設(shè)置了的時(shí)間期間,發(fā)生TCP數(shù)據(jù)包重新傳送超時(shí),0就會(huì)發(fā)送CP數(shù)據(jù)包N、FN、RT、數(shù)據(jù)包)和等待確認(rèn)(K)。如果沒(méi)有對(duì)方)的CK響應(yīng),就會(huì)觸發(fā)超時(shí)且CP數(shù)據(jù)包(較早前傳送的)會(huì)重新傳送。直到重新傳送'R'次。即使CP數(shù)據(jù)包重新傳送RCR+'次,如果對(duì)方)仍然沒(méi)有的K回應(yīng),就會(huì)觸發(fā)最終超時(shí),SR會(huì)變?yōu)?CLETE'1。TCP數(shù)據(jù)包重新傳送的最終超時(shí)(TCPTO)可以用以下公式計(jì)算MTCPTO= Σ(RTRX2N +)X )XN:重試計(jì)數(shù),0NM:最少數(shù)值當(dāng)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該寄存器顯示已經(jīng)被PPPoE服務(wù)器識(shí)別的認(rèn)證類(lèi)型。W5200支持PAP和CHAPPPPALGO(PPPoE模式的認(rèn)證算法PTIMER(PPP連接控制協(xié)議請(qǐng)求定時(shí)寄存器該寄存器是指示發(fā)送LCPEcho請(qǐng)求的期限。PTIMER的值為1時(shí),大約是25毫秒(ms。例)如果PTIMER是200,200*25(ms)=5000(ms)=5PMAGIC(PPP連接控制協(xié)議幻數(shù)寄存器)[R/W]INTLEVEL(低電平中斷定時(shí)器寄存器)[R/W][0x0030該寄存器用于設(shè)置中斷生效等待的時(shí)間(IAWT)。它配置nINT待時(shí)間直到下一個(gè)中斷生效IAWTIAWTINTLEVEL01)*PLL_CLKINTLEVEL06INTLEVEL對(duì)Socket0而言,當(dāng)觸發(fā)接收中斷(即:S0_IR(3)1’),那么相應(yīng)的IR2位就會(huì)被置1(即:IR(S0_IR)=‘1’).一旦IR2的某位被置1了,nINT就將變?yōu)榈碗娖?。B,C同理。在Socket1中,觸發(fā)連接中斷(S1_IR(0)='1')和相應(yīng)的位(bit)設(shè)置為'1'C.主機(jī)清零S0_IR(S0_IR=0x00)則相應(yīng)的IR位(bit)也會(huì)自動(dòng)被清零(IR(S0_IR‘0’)。nINT信看INTLEVELregister的設(shè)置情況了。如果INTLEVELregister的值是0x000F的話,nINT將在IAWT(16PLL_CLK)后變?yōu)榈碗娖?。IR2(W5200SOCKET中斷寄存器低電平直到所有Sn_IR的位(bit)被設(shè)置為‘0’時(shí),它才會(huì)變?yōu)楦唠娖健? 位代說(shuō)7當(dāng)SOCKET7有一個(gè)中斷發(fā)生,它(S7_INT)就變成'1'。與該中斷的6當(dāng)SOCKET6有一個(gè)中斷發(fā)生,它(S6_INT)就變成'1'。與該中斷的5當(dāng)SOCKET5有一個(gè)中斷發(fā)生,它(S5_INT)就變成'1'。與該中斷的4當(dāng)SOCKET4有一個(gè)中斷發(fā)生,它(S4_INT)就變成'1'。與該中斷的3當(dāng)SOCKET3有一個(gè)中斷發(fā)生,它(S3_INT)就變成'1'。與該中斷的2當(dāng)SOCKET2有一個(gè)中斷發(fā)生,它(S2_INT)就變成'1'。與該中斷的1當(dāng)SOCKET1有一個(gè)中斷發(fā)生,它(S1_INT)就變成'1'。與該中斷的0當(dāng)SOCKET0有一個(gè)中斷發(fā)生,它(S0_INT)就變成'1'。與該中斷的位代說(shuō)765連接狀態(tài)寄存器[只讀43物理層的掉電模式[只讀0:關(guān)閉電源掉電模式(正常模式1:210IMR2(中斷掩碼寄存器 位代說(shuō)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/位代說(shuō)7廣播0:1:6MAC過(guò)濾0:MAC1:MACMACRAWP3~P0當(dāng)該位)被設(shè)置為'時(shí),0可以接收屬于自己或廣播的數(shù)據(jù)包。當(dāng)該位)被設(shè)置為'時(shí),0可以接收所有以太網(wǎng)數(shù)據(jù)包。當(dāng)使用混合的CP/P協(xié)議棧時(shí),則建議設(shè)置為’以減少主機(jī)的5使用無(wú)延遲的0:關(guān)閉無(wú)延遲的ACK1:啟用無(wú)延遲的ACKTCPP3-P0:如果此位(bit)被設(shè)置為'1'時(shí),當(dāng)從一個(gè)對(duì)方(peer)接收到數(shù)據(jù)包后,ACK數(shù)據(jù)包就會(huì)立即傳送。如果該位(bit)被清零時(shí),那么只會(huì)根據(jù)超時(shí)機(jī)制來(lái)決定是否發(fā)送ACK數(shù)據(jù)包。1n是Socketn-th的數(shù)目(0,1,2,3,4,5,6,2[讀/寫(xiě)][socket0地址,socket1地址,socket2地址,socket3地址,socket4地址,socket5地址,socket地址,socket7地址復(fù)位數(shù)值廣播廣播0:使用IGMP版本1:使用IGMP版本當(dāng)啟用MULTI位(bit)和UDP模式使用中(P3-P0:“0010”)此位(bit)才有效。此外,廣播可以用來(lái)在IGMP消息發(fā)送版本號(hào)碼number)。例如:加入//43*P3P2P10200000001100100011MR_MACRAW和S0_MR_PPPoE僅適用于SOCKET00P3P2P1P001000101MACRAW和S0_MR_PPPoE僅適用于SOCKET0。Sn_CR h命令寄存器R/W]0x4001+0x0n00]數(shù)代說(shuō)按照Sn_MR(P3:P0)的協(xié)議選擇來(lái)初始化和打開(kāi)(open)SocketSn_MR_CLOSE-Sn_MR_TCPSOCK_INITSOCK_UDP數(shù)代說(shuō)按照Sn_MR(P3:P0)的協(xié)議選擇來(lái)初始化和打開(kāi)(open)SocketSn_MR_CLOSE-Sn_MR_TCPSOCK_INITSOCK_UDP這是只適用于TCP模式_P)=Sn_TCP。在這種模式下,Socke h被配置為一個(gè)TCP服器它是等待“TCP客戶”。改變?yōu)镾OCK_ESTABLIESHE,與此同時(shí)Sn_IR(0)會(huì)變?yōu)?1'。另一方面,當(dāng)連接失敗時(shí),Sn_IR(3)'1'Sn_SR改變?yōu)榇四J街贿m用于TCP模式和Socketn-th作為T(mén)CP客戶端。通過(guò)與在目的地址寄存器和端寄存器中的IP地址和端進(jìn)行連接,接請(qǐng)求被發(fā)送到TCP服務(wù)器。當(dāng)一個(gè)客戶端的連接請(qǐng)求成功后,Sn_SRSOCK_ESTABLIESHED,Sn_IR(0)會(huì)變主動(dòng)關(guān)閉:它傳輸斷開(kāi)請(qǐng)求(FIN數(shù)據(jù)包)到所連接的對(duì)方關(guān)閉:當(dāng)從對(duì)方(peer)收到FIN數(shù)據(jù)包時(shí),回復(fù)一個(gè)FIN到CK_CLOSEDFIN/ACK這種斷開(kāi)機(jī)制不被執(zhí)行。如果當(dāng)溝通期間從關(guān)閉Socke發(fā)送(SEND)傳送所有發(fā)送(TX)內(nèi)存的緩沖數(shù)據(jù)。欲想了解詳情,請(qǐng)參閱Socketn-th發(fā)送(TX)自由尺寸寄存器(Sn_TX_FSR0),Sockeh發(fā)送(TX)寫(xiě)指針寄存器(Sn_TX_WR0)和Socketn-th發(fā)基本操作是與發(fā)送E)相同的。發(fā)送E)操作通常需要通過(guò)RP(地址解析協(xié)議)過(guò)程中得到目的地C地址。而EC使用的ctnh目的地C地址SH0)是由用戶選擇而不R只適用于TCP(我們常說(shuō)的keepalive機(jī)制。注意:要想讓keepalive機(jī)制正常工作,W5200必須先向?qū)Ψ剑╬eer)發(fā)送過(guò)數(shù)據(jù)。這是keepalive協(xié)議規(guī)定的。)欲想了解參閱5.2.1.1服務(wù)器模式接收過(guò)程與Socketn-th接收(RX)的接收尺寸寄存器(Sn_RX_RSR0),Socketn-th接收(RX)寫(xiě)指針寄存器(Sn_RX_WR)和Sockeh接收(RX)讀指針寄存數(shù)代說(shuō)數(shù)代說(shuō)在每個(gè)階段(phase它傳輸REQSn_IRSockeh中斷寄存器R]0x4002+0x0n00]Sn_IR寄存器用于提供給Sockeh中斷類(lèi)型信息,如建立(Establishment)、終止(Termination)、接收數(shù)據(jù)(Receivingdata)和超時(shí)(Timeout)。當(dāng)觸發(fā)一個(gè)中斷即Sn_IMR的掩 位代說(shuō)7Sn_IR(PRECV)中斷掩6Sn_IR(PFAIL中斷掩5Sn_IR(PNEXT)中斷掩4Sn_IR(SENDOK)中斷掩3Sn_IR(TIMEOUT)中斷當(dāng)ARPTO或TCPTO發(fā)生時(shí),為‘TIMEOUT中斷2Sn_IR(RECV)中斷掩1Sn_IR(DISCON)中斷掩0Sn_IR(CON)中斷掩Sn_SR h狀態(tài)寄存器R]0x4003+0x0n00 的狀態(tài)將會(huì)更改。下表描述了不同Socke h的狀態(tài)。數(shù)代說(shuō)執(zhí)行DISCON或CLOSE令,或ARPTO或TCPTO發(fā)生時(shí),它顯示。而當(dāng)Sn_MR(P3:P0)是Sn_MR_TCP和執(zhí)行OPEN令時(shí),它將被更改為SOCK_INIT。這是建立TCP連接的第一它可以在“TCPSERVER“模式下進(jìn)行LISTEN令和“TCP客戶端”下進(jìn)行CONNECT令。這是SOCKETn以“TCPSERVER”進(jìn)行下,等待從CLIENT”的連接請(qǐng)求(SYNpacket) h以“TCPSERVER”進(jìn)行下,等待從“TCPCLIENT”的連接請(qǐng)求(SYNpacket)。當(dāng)成功建立連接后,SOCKET的狀態(tài)會(huì)從SOCK_LISTEN轉(zhuǎn)到SOCK_ESTABLISHED。但是,如果連接失敗,將出現(xiàn)TCPTO(Sn_IR(TIME_OUT)='1')和狀態(tài)將轉(zhuǎn)換為它會(huì)在成功建立連接后顯示。當(dāng)“TCPCLIENT”里的SYN數(shù)據(jù)包成功在SOCK_LISTEN中處理,或者是成功執(zhí)行CONNECTS命令的時(shí)候,它的狀態(tài)將會(huì)轉(zhuǎn)成這是當(dāng)收到對(duì)方請(qǐng)求斷開(kāi)連接的一個(gè)狀態(tài)。即使P連接是半關(guān)閉的,它亦可以傳送數(shù)據(jù)包。所以,如想完成整個(gè)TCC對(duì)于沒(méi)有經(jīng)過(guò)中斷程序而把SOCKETn這是把SOCKETn開(kāi)啟作為UDP模式的一個(gè)狀態(tài)。當(dāng)Sn_MR(P3:P0)Sn_MR_UDPOPEN命令被執(zhí)行時(shí),這個(gè)SOCKET會(huì)在IPRAW模式下打開(kāi)。當(dāng)如果S0_CR=OPEN和S0_MRP3:P0)=(以太網(wǎng)幀)是可以像UDP模式般傳送。S0_CR=OPENS0_MRP3:P0S0_MR_PPPoE數(shù)代說(shuō)此狀態(tài)表示接請(qǐng)求(SYN數(shù)據(jù)包)已發(fā)送到“TCPSERVER”。此狀態(tài)顯示利用由SOCK_INIT到狀態(tài)下,如果收到由“TCPSERVER”的連接(SYN/ACK數(shù)據(jù)包,它會(huì)自動(dòng)更改為SOCK_ESTBLISHED。如果在TCPTO(Sn_IR超時(shí))='1')出現(xiàn)之前,還沒(méi)有收到“TCPSERVER”發(fā)出的SYN/ACK此狀態(tài)表示已收到一個(gè)從“TCPCLIENT”發(fā)出的連接請(qǐng)求(SYN數(shù)據(jù)包)。當(dāng)W5200成功發(fā)出連接(SYN/ACK數(shù)據(jù)包)到“TCPCLIENT”,它就會(huì)自動(dòng)更改為SOCK_ESTABLISHED。如果失敗就會(huì)觸發(fā)TCPTO(Sn_IR超這些狀況表示SOCKEh已關(guān)閉。這是對(duì)斷線程序中的“主動(dòng)關(guān)閉”或“關(guān)閉”時(shí)的一個(gè)觀察。當(dāng)斷線程序成功完成或TCPTO(Sn_IR(超時(shí))='1')發(fā)生時(shí),它便會(huì)更改為執(zhí)行CONNECT命令中的SOCK_INIT時(shí)的一個(gè)監(jiān)視。如果成功從目的地獲取目標(biāo)硬件的地址(當(dāng)收到ARP-response),它便會(huì)更改為SOCK_UDP、SOCK_IPRAW或是如果失敗,ARPTO(Sn_IR(超時(shí))='1')便會(huì)發(fā)生。如發(fā)生在UDP或IPRAW模式,它便會(huì)回到以前的狀態(tài)(SOCK_UDP或SOCK_IPRAW)TCP到SOCK_CLOSED。-當(dāng)之前和目前的Sn_DIPR值是不同的時(shí)候,ARP7SocketSn_PORT(Socke h源端口寄存器[R/W][0x4004+0x0n00-0x4005+0x0n00][0x0000]當(dāng)使用TCP或UDP模式時(shí),該寄存器會(huì)為每個(gè)SOCKET設(shè)置一個(gè)源端,而這個(gè)設(shè)置需要在例)如SOCKET0的端口=5000(0x1388) Sn_DHAR(Socke h目標(biāo)MAC地址寄存器R/W]0x4006+0x0n00-0x400B+0x0n00]該寄存器會(huì)為Socketn-th設(shè)定目標(biāo)MAC地址。此外,如果Socket0已用于PPPoE模式,那S0_DHARPPPoE當(dāng)在UDP或IPRAW模式下使用SEND_MAC令時(shí),它會(huì)為Sockeh設(shè)定目標(biāo)MAC地址。而在TCP、UDP和IPRAW模式時(shí),Sn_DHAR會(huì)根據(jù)定CONNECT或SEND命令中的ARP程序取得的目標(biāo)MAC地址作出設(shè)定。當(dāng)成功執(zhí)行CONNECT或SEND命令后,主機(jī)可以通過(guò)Sn_DHAR取那PPPoE服務(wù)器MAC地址(從PPPoE程序中取得)、PPPoE服務(wù)器的IP地址、和PPPsessionID就應(yīng)須被設(shè)置。此外,MR(PPPoE)也應(yīng)設(shè)置為'1'。S0_DHAR會(huì)在OPEN命令之前設(shè)置PPPoE服務(wù)器MAC地址。PPPoE服務(wù)器MAC地址是由S0_DHAR執(zhí)行OPENPDHAR里應(yīng)用。而已經(jīng)配置的PPPoE信息,即使是在CLOSE命地址 Sn_DIPR(Socke 為PPPoE服務(wù)器IP設(shè)置一個(gè)已知的地址。它只有在TCP、UDP、IPRAW或PPPoE模式下才有效,在P模式下,當(dāng)作為P客戶端”的時(shí)候,它會(huì)在執(zhí)行T命令之前,為P服務(wù)器“設(shè)置P地址。而當(dāng)作為P服務(wù)器”的時(shí)候,它會(huì)在成功建立連接之后,在為P客戶端”IP例如Socket0的目標(biāo)IP地址192.168.0.11 192168011Sn_DPORTSockeh目標(biāo)端口寄存器)[R/W][0x4010+0x0n00-0x4011+0x0n00][0x00]目標(biāo)端是在Sockeh的Sn_DPORT設(shè)置。如果Socket0已用于PPPoE模式,那S0_DPORT0PPPsessionID設(shè)置一個(gè)已知的號(hào)碼。它只有在TCP、UDP、或PPPoE模式下端傳UP數(shù)據(jù)包。在PPPoE模式下,已知的PPPsessionID是在S0_DPORTOPEN 模正常PPPoE1~1~1~1~Sn_MSS(Sockeh最大分段寄存器)[R/W][0x4012+0x0n00-0x4013+0x0n00][0x0000]該寄存器用于TCP的MSS- umSegmentSize(最大報(bào)文長(zhǎng)度)。當(dāng)TCP是在模式下被啟動(dòng),該寄存器會(huì)顯示MSS的設(shè)置。而它只是模正常PPPoE1~1~1~1~在P或CR模式下,T最大傳輸單元-mrsnt并不是在內(nèi)部處理的,但會(huì)使用預(yù)設(shè)的U。因此,當(dāng)傳輸?shù)臄?shù)據(jù)大于默認(rèn)的U時(shí),主機(jī)應(yīng)該以手T在P或P模式下,如果傳輸?shù)臄?shù)據(jù)大于U時(shí),0會(huì)自動(dòng)將數(shù)據(jù)劃分成U的單元大小。在P模式下,U會(huì)被稱為S。S是從主機(jī)的最大讀寫(xiě)長(zhǎng)度和對(duì)方的最大報(bào)文長(zhǎng)度 Sn_PROTO hIP協(xié)議寄存器R/W]0x4014+0x0n00這是一個(gè)1字節(jié)的寄存器。它用于設(shè)置在IP層里IP報(bào)頭(IPheader)的協(xié)議號(hào)碼字段。它只會(huì) 協(xié)議號(hào)碼已在IANA(互聯(lián)網(wǎng)地址編碼分配機(jī)構(gòu))里定義。如想閱讀細(xì)節(jié),請(qǐng)參考文U例)InternetControlMessageProtocolICMP-互聯(lián)網(wǎng)控制信息協(xié)議)=0x01,InternetGroupManagementProtocol(互聯(lián)網(wǎng)組群管理協(xié)議)=0x02Sn_TOS hIP服務(wù)類(lèi)型寄存器R/W]0x4015+0x0n00]該寄存器設(shè)置在IP層里IPheader的TOS(TypeofService-服務(wù)類(lèi)型)字段。它應(yīng)在執(zhí)行OPEN命令之前設(shè)置。請(qǐng)參考U. hIP生存時(shí)間寄存器R/W]0x4016+0x0n00]該寄存器設(shè)置在IP層里IPheader的TTL(Time-To-Live生存時(shí)間)字段。它應(yīng)在執(zhí)行OPEN命令之前設(shè)置。請(qǐng)參考U. h接收內(nèi)存大小寄存器R/W0x401E+0x0n00該寄存器為每個(gè)SOCKET配置接收內(nèi)存的大小。每個(gè)SOCKET1、2、4、8和16K字節(jié)。當(dāng)每次系統(tǒng)復(fù)位(Reset)時(shí),它將被分配為例1)SOCKET08KBSOCKET1 例2)SOCKET21KBSOCKET3 例3)SOCKET41KBSOCKET5 例4)SOCKET61KBSOCKET7 Sn_TXMEM_SIZE(Sockeh傳輸內(nèi)存大小寄存器)[R/W][0x401E+0x0n00]該寄存器為每個(gè)SOCKET配置傳輸內(nèi)存的大小。每個(gè)SOCKET1、2、4、8和16K字節(jié)。當(dāng)每次系統(tǒng)復(fù)位(Reset)時(shí),它將被分配為2K字節(jié)。而每個(gè)SOCKET的Sn_TXMEM_SIZE的總和(Sn_TXMEM_SIZESUM)應(yīng)是16KB。例1)SOCKET04KBSOCKET1 例2)SOCKET22KBSOCKET3 例3)SOCKET42KBSOCKET5 例4)SOCKET62KBSOCKET7 Sn_TX_FSR(Socke h傳輸空間大小寄存器R]0x4020+0x0n00-0x4021+0x0n00]該寄存器提供Socketn-th傳輸內(nèi)存的可用大小空間(可供傳輸數(shù)據(jù)的字節(jié)大小)。請(qǐng)留意,主機(jī)不能編寫(xiě)大于Sn_TX_FSR的數(shù)據(jù)。因此,在發(fā)送數(shù)據(jù)之前,切記檢查Sn_TX_FSR。如果你的數(shù)據(jù)大小小于或等于Sn_TX_FSR時(shí),在數(shù)據(jù)后,可執(zhí)行SEND或SEND_MAC命令來(lái)傳輸’當(dāng)檢查該寄存器時(shí),用戶應(yīng)先閱讀高字節(jié)(0x4020,0x4120,0x4220,0x4320,0x4420,0x4520,0x4620,例)如2048(0x0800)在S0_TX_FSR時(shí), Sn_TX_RD(Socke h傳輸讀指針寄存器R]0x4022+0x0n00-0x4023+0x0n00]該寄存器顯示傳輸內(nèi)存里最后一個(gè)傳輸?shù)牡刂?。它可使用Sockeh令寄存器中的SENDSn_TX_RD傳輸?shù)絊n_TX_WR,并在傳送完成后自動(dòng)更新。因此,在傳當(dāng)檢查該寄存器時(shí),用戶應(yīng)先閱讀高字節(jié)(0x4022,0x4122,0x4222,0x4322,0x4422,0x4522,0x4622,0x4722),然后閱讀低字節(jié)(0x4023,0x4123,0x4223,0x4323,0x4423,Sn_TX_WR(Socke h傳輸寫(xiě)指針寄存器R/W]0x4024+0x0n00-0x4025+0x0n00]該寄存器提供位置的信息用作編寫(xiě)傳輸數(shù)據(jù)。當(dāng)檢查該寄存器時(shí),用戶應(yīng)先閱讀高字節(jié)(0x4024,0x4124,0x4224,0x4324,0x4424,0x4524,0x4624,0x4724),然后閱讀低字節(jié)(0x40250x41250x4225,0x4325,0x44250x4525,0x4625,0x4725)才會(huì)得到正確的數(shù)值。例)如2048(0x0800)在S0_TX_WR時(shí), ChipBaseAddress=0x0000,512(0x0200)bytesSocket7Socket7Socket6Socket5Socket4Socket3Socket2Socket1Socket0

SocketSocketIfS0_TX_WR0=RealPhysicalAddressis0x8000+(0x8FEE&0x07FF)=494SocketSocket18RealPhysicalAddressis0x8000+0x01EE(494)S0_TX_WR0is0x8800–0x87EE=18byteswritechangesto8Socketn-th傳輸基址地址(此后會(huì)稱為gSn_TX_BASE)和Sockeh傳輸掩碼地址(此后會(huì)稱為gSn_TX_MASK)將會(huì)以TMSR數(shù)值計(jì)算。需要,請(qǐng)參考psedo的初始化代將Sn_TX_WR和gSn_TX_MASK進(jìn)行位與運(yùn)算(bitwise-ANDoperation),將得到的結(jié)果賦予Socket的傳輸內(nèi)存中的偏移地址(此后會(huì)稱為get_offset)?,F(xiàn)在,編寫(xiě)一個(gè)任何大小的傳輸數(shù)據(jù)到get_start_address(*如在編寫(xiě)的時(shí)候超過(guò)了Socket傳輸內(nèi)存的上界,在這種情況下,先把傳輸數(shù)據(jù)編寫(xiě)到上界和把物理地址轉(zhuǎn)到gSn_TX_BASE,然后再編寫(xiě)其余部分的傳輸數(shù)據(jù)。)之后,切記要把Sn_TX_WR的數(shù)值增加到跟編寫(xiě)數(shù)據(jù)的大小相同。最后,提供一個(gè)SEND命令給Sn_CR(Sockeh命令寄存器)。如果有需要,請(qǐng)參考TCP服務(wù)器模式下傳輸部分的psedo代碼([[該寄存器向用戶提供在Socketn-th接收內(nèi)存里已接收數(shù)據(jù)的字節(jié)大小。由于這是以Sn_RX_RD和Sn_RX_WR的數(shù)值進(jìn)行計(jì)算,它會(huì)因Sn_CR(Socketn-th命令寄存器)中的當(dāng)檢查該寄存器時(shí),用戶應(yīng)先閱讀高字節(jié)(0x4026,0x4126,0x4226,0x4326,0x4426,0x4526,0x4626,0x4726),然后閱讀低字節(jié)(0x4027,0x4127,0x4227,0x4327,0x4427,0x4527,0x4627,0x4727)才會(huì)得到正確的數(shù)值。例)如2048(0x0800)Sn_RX_RDSocke h接收讀指針寄存器)[R/W]0x4028+0x0n00-0x4028+0x0n00]該寄存器提供的位置信息接收數(shù)據(jù)。當(dāng)檢查該寄存器時(shí),用戶應(yīng)先閱讀高字節(jié)(0x4028,0x4128,0x4228,0x4328,0x4428,0x4528,0x4628,0x4728),然后閱讀低字節(jié)(0x4029,0x4129,0x4229,0x4329,0x44290x4529,0x4629,0x4729)例)如2048(0x0800)Sockeh接收基址地址(此后會(huì)稱為gSn_RX_BASE)和Socketn-th接收掩碼地址(此后會(huì)稱為gSn_RX_MASK)將會(huì)以RMSR數(shù)值計(jì)算。需要,請(qǐng)參考psedo的5.1將Sn_RX_WR和gSn_RX_MASK進(jìn)行位與運(yùn)算(bitwise-ANDoperation),將得到的結(jié)果賦予Socket的傳輸內(nèi)存中的偏移地址(此后會(huì)稱為get_offset)。Sn_RX_WR(Socketn-th接收寫(xiě)指針寄存器)[R/W][(0xFE402A+0xn00)–(0xFE402B+該寄存器提供位置信息以供編寫(xiě)接收數(shù)據(jù)。當(dāng)檢查該寄存器時(shí),用戶應(yīng)先閱讀高字節(jié)(0x402A,0x412A,0x422A,0x432A,0x442A,0x452A,0x462A,0x472A),然后閱讀低字節(jié)(0x402B,0x412B,0x422B,0x432B,0x442B,0x452B0x462B,0x472B)才會(huì)得到正確的數(shù)值。例)如2048(0x0800)在S0_RX_WR Sn_IMRSockeh中斷掩碼寄存器該寄存器配置ockeh的中斷,以及通知到主機(jī)。R的中斷掩碼位跟R的中斷位是對(duì)應(yīng)的。如果中斷發(fā)生在任何t時(shí),該位會(huì)設(shè)置為’,而與其對(duì)應(yīng)的R位也會(huì)設(shè)置為’。當(dāng)R和R的位同時(shí)是時(shí),R)將成為’。在這個(gè)時(shí)候,如果R是) 位代說(shuō)7Sn_IR(PRECV)6Sn_IR(PFAIL5Sn_IR(PNEXT)43Sn_IR(TIMEOUT)210Sn_IR(CON)_RGceR/W00000+0040]它設(shè)置了P層中P并不支持在層的分段數(shù)據(jù)包。盡管已配置,但P數(shù)據(jù)并沒(méi)有分段,同時(shí)也不建議在此分段。它應(yīng)該在執(zhí)行PN命令之前被配置。例Sn_FRAG00x4000不要分段 功能說(shuō)初始基本設(shè)對(duì)于網(wǎng)絡(luò)設(shè)置信R中的硬件源地址已經(jīng)被規(guī)定,它使用的是以太網(wǎng)C層的唯一的C地址作為其硬件地址。EE負(fù)責(zé)管理C地址的分配。而生產(chǎn)網(wǎng)絡(luò)設(shè)備的制造商會(huì)替其產(chǎn)品分配AC如欲了解MAC地址分配參閱以下U,U設(shè)置Socket的內(nèi)存信Incaseof,assign2KBrx,txmemoryper{gS0_RX_BASE0x0000(Chipbaseaddress)0xC000(InternalRXbufferaddress);替Socket0設(shè)置接收內(nèi)存中的基址地址Sn_RXMEM_SIZE(ch)=(uint8*)2; //分配2K接收內(nèi)存給每個(gè)SOCKETgS0_RX_MASK2K1;0x07FF,在指定的Socket0接收內(nèi)存取得偏移地址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;/*同樣的方法,設(shè)置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發(fā)送或接收的內(nèi)存配置數(shù)據(jù)通數(shù)據(jù)傳完成初始化過(guò)程后,W5200可以‘開(kāi)啟’TCP、UDP、IPRAW、MACRAW模式的Socket,對(duì)W5200可同時(shí)支持8個(gè)Sockets獨(dú)立使用。在本節(jié)中,將會(huì)介紹每個(gè)模TCP是一個(gè)面向連接(connection-oriented)的協(xié)議。TCP使用其自己的IP地址、端、目標(biāo)IP地址、目標(biāo)端來(lái)建立連接Socket。然后通過(guò)此Socket發(fā)送和接收數(shù)據(jù)。求(打開(kāi))建立連接Socket。10TCP服務(wù)器和TCPTCP11TCP套接字初始TCP數(shù)據(jù)通信必需要套接字初始化。初始化會(huì)開(kāi)啟套接字。套接字的開(kāi)啟過(guò)程是選擇00其中一個(gè)套接字,并在該套接字設(shè)置協(xié)議模式R)和源端PO0–在P服務(wù)器”中端),然后執(zhí)行N命令。執(zhí)行命令之后,如果R的狀態(tài)被更SOCK_IT,表示SKET套接字初始化過(guò)程在“TCP服務(wù)器”和“TCP客戶端”的應(yīng)用是相同的。Sockeh在TCP模Sn_MR=Sn_PORT0 Sn_CRSn_CR //設(shè)置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的中斷被啟動(dòng),中斷將發(fā)生。參照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的中斷被啟動(dòng),中斷將發(fā)生。參照IR、IMRSn_IMR和Sn_IR*/}方法一:每當(dāng)收到一個(gè)數(shù)據(jù)包,把Sn_IR(RECV)設(shè)置為‘1’。如主機(jī)接收到下一個(gè)數(shù)據(jù)包前一個(gè)的Sn_IR(RECV跟接下來(lái)的Sn_IR(RECV)重迭。如果主機(jī)不能完全處理每個(gè)):{len src_mask=/*計(jì)算起始地址(物理地址)*/src_ptrgSn_RX_BASEsrc_mask;/*如果SOCKET接收內(nèi)存溢出*/If((src_mask{len src_mask=/*計(jì)算起始地址(物理地址)*/src_ptrgSn_RX_BASEsrc_mask;/*如果SOCKET接收內(nèi)存溢出*/If((src_masklen)gSn_RX_MASK1)){ source_ptr的upper_size字節(jié)到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;/*設(shè)置RECVSn_CR=gSn_RX_BASE的left_size字節(jié)到destination_address/*更新destination_ptr):發(fā)送數(shù)據(jù)的大小不能大于Sockeh已分配的發(fā)送內(nèi)存。如果傳輸數(shù)據(jù)的大小大于已可能會(huì)出現(xiàn)錯(cuò)誤。而較大的數(shù)據(jù)將會(huì)需要的時(shí)間來(lái)完成SEND命令。因此,用戶應(yīng)正確如想檢查E發(fā)送的數(shù)據(jù)長(zhǎng)度的計(jì)算方法是由之前_D的數(shù)值與執(zhí)行ED命令之后的數(shù)值的差別計(jì)算出來(lái)。如果實(shí)際發(fā)送的數(shù)據(jù)少于發(fā)送數(shù)據(jù)長(zhǎng)度,ED因此,當(dāng)實(shí)際發(fā)送數(shù)據(jù)的總與發(fā)送數(shù)據(jù)的長(zhǎng)度是相等時(shí),表示ND:例SendDataLengthSize連同發(fā)送的數(shù)據(jù)長(zhǎng)度,執(zhí)行SEND命(=剩余的數(shù)據(jù)長(zhǎng)度重試SEND命令直到實(shí)際發(fā)送的數(shù)據(jù)長(zhǎng)度的總和與發(fā)送數(shù)據(jù)的長(zhǎng)度是相同{freesize=iffreesize<lengoto /*(物理地址dst_ptrgSn_TX_BASE /*如果SOCKET發(fā)送內(nèi)存溢出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重試發(fā)送剩余的數(shù)據(jù)(不要 }建立(ESTABLISHMENT):檢查中斷請(qǐng)求(FIN數(shù)據(jù)包{if(Sn_SR=={if(Sn_SR==SOCK_CLOSE_WAIT)gotoCLOSED}{if(Sn_IR(DISCON)==‘1’)Sn_IR(DISCON)=‘1’;gotoCLOSED/*在這種情況下,如果Socke h的中斷被啟動(dòng),中斷將發(fā)生。參照IR、IMRSn_IMR和Sn_IR*/}:{/*設(shè)置DISCON命令{/*設(shè)置DISCON命令*/Sn_CR=DISCON;}建立(ESTABLISHMENT)檢查關(guān){if(Sn_SR==SOCK_CLOSED)gotoCLOSED}{if(Sn_SR==SOCK_CLOSED)gotoCLOSED}{if(Sn_IR(DISCON)==‘1’)gotoCLOSED/*在這種情況下,如果Socke h的中斷被啟動(dòng),中斷將發(fā)生。參照IR、IMRSn_IMR和Sn_IR.*/}建立(ESTABLISHMENT)超{if(Sn_SR==SOCK_CLOSED)gotoCLOSED}{if(Sn_IR(TIMEOUTbit)==‘1’)Sn_IR(TIMEOUT)=‘1’;gotoCLOSED/*在這種情況下,如果Socke h的中斷被啟動(dòng),中斷將發(fā)生。參照IR、IMR}超時(shí)會(huì)由以下情況觸發(fā)連接請(qǐng)求N數(shù)據(jù)包或它響應(yīng)/K數(shù)據(jù)包、數(shù)據(jù)包或它響應(yīng)/K數(shù)據(jù)包)、中斷請(qǐng)求{if(Sn_SR==SOCK_CLOSED)gotoCLOSED}{if(Sn_IR(TIMEOUTbit)==‘1’)Sn_IR(TIMEOUT)=‘1’;gotoCLOSED/*在這種情況下,如果Socke h的中斷被啟動(dòng),中斷將發(fā)生。參照IR、IMR}SOCKET關(guān){/*清除SockeSn_IR=0xFF;IR(n)=h剩余的中斷{/*清除SockeSn_IR=0xFF;IR(n)=h剩余的中斷/*設(shè)置CLOSE命令*/Sn_CR=CLOSE;}TCP12TCP連發(fā)送連接請(qǐng)求(SYN包)到“TCP服務(wù)器”。當(dāng)用套接字去連接服務(wù)器時(shí),可能會(huì)觸發(fā)像ARPTO{Sn_DIPR0=server_ip;/*設(shè)置TCP服務(wù)器IP地址*/{Sn_DIPR0=server_ip;/*設(shè)置TCP服務(wù)器IP地址*/ }P是一個(gè)非連接協(xié)議。它的通信不用“連接套接字”。P協(xié)議保證了可靠的數(shù)據(jù)通信,但基于P協(xié)議的數(shù)據(jù)報(bào)不能保證傳輸數(shù)據(jù)的可靠性。因?yàn)镻不使用“連接套接字”,因此它可以通過(guò)已知的宿主P地址和端與其他很多設(shè)備進(jìn)行通信。只用一個(gè)t端口就能與13UDP單播和廣播方單播方式是UDP通信中的一種。它將數(shù)據(jù)發(fā)到目的地。而廣播式的通信則是用‘廣播IP宿主 --廣播 套接字初始Sn_MR=Sn_PORT0=source_port;Sn_CR=OPEN;/*設(shè)置UDP模式/*設(shè)置源端if(Sn_SR!=SOCK_UDP)Sn_CR=CLOSE;goto}檢查收到的數(shù){if(Sn_RX_RSR0!=0x0000)gotoReceivingProcess}}if(Sn_IR(RECV)==‘1’)Sn_IR(RECV)=‘1’;gotoReceivingProcess第{接收過(guò)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;}檢查發(fā)送數(shù)據(jù)/發(fā)送{{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;/*將源地址的左面字節(jié)拷貝到gSn_TX_BASE*/left_size=send_size–upper_size;{memcpy(src_ptr,destination_addr,len);}Sn_TX_WR0+=len;Sn_CR=SEND;}檢查發(fā)送完畢/超{If(Sn_CR==0x00)transmissioniscompleted.If(Sn_IR(TIMEOUTbit)==‘1’)gotonextstage;/*在這種情況下,如果所選擇的套接字中斷被激活,中斷就會(huì)發(fā)生。參考Interrupt}{ {}檢查完成/套接字關(guān){{Sn_IR=0x00FF;IR(n)=Sn_CR=CLOSE;}多廣播通信可以跟許多其他設(shè)備(不用指明)的目標(biāo)進(jìn)行通信的。假設(shè)A、B、C是在一個(gè)指定的多播組中的三個(gè)用戶。如果用戶發(fā)送數(shù)據(jù)到這個(gè)組中的A用戶,B、C也能收到此數(shù)據(jù)。使用這種方式時(shí),目的地址列表要使用P協(xié)議在多播組中。多播組包含“組C地址”、“組P地址”、“組端”。用戶不端。在0中,處理多播中進(jìn)行組的P是在(自動(dòng))經(jīng)行的。當(dāng)用戶以多播方式打開(kāi)他所用的Socketnh時(shí),會(huì)發(fā)送“連接(join)”信息,如果用戶將其關(guān)掉,則會(huì)發(fā)送“離開(kāi)(e)”信息。當(dāng)套接字打開(kāi)后,當(dāng)用戶通信時(shí),t(報(bào)告)”信息周在。套接字初始組IP地址”設(shè)為Sn_DIPR0。然后將“多播組端”設(shè)為Sn_PORT0和Sn_DPORT0。設(shè)置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;/*設(shè)置源 Sn_MR=0x02|0x80;/*在 h模式寄存器設(shè)置UDP模式和多播檢查接收到的數(shù)接收過(guò)檢查發(fā)送數(shù)據(jù)/發(fā)送。然后,要傳送的數(shù)據(jù)到TX緩沖區(qū),執(zhí)行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}檢查發(fā)送完成/超{{while(S0_IR(SENDOK)==‘0’);/*等待發(fā)送完成的中斷*/S0_IR(SENDOK)=‘1’; }檢查完成/套接字關(guān)IPRAW(以IP層為上限的處理模式IPRAW支持IP層協(xié)議,比如根據(jù)協(xié)議號(hào)有ICMP(0x01)和IGMP(0x02)。ICMP的“”和議號(hào)是被IANA定義的,請(qǐng)參考:numbers不支持的套接字通信只允許指定協(xié)議號(hào)的通信。比如15IPRAW套接字初始{{Sn_MR=0x03;Sn_CR=OPEN;if(Sn_SR!=SOCK_IPRAW)Sn_CR=CLOSE;goto}檢查接收數(shù)接收過(guò)圖15接收IPRAW的數(shù)W數(shù)據(jù)包含了6個(gè)字節(jié)的包信息和數(shù)據(jù)信息包含了發(fā)送者(P地址)和數(shù)據(jù)包的長(zhǎng)度。除了處理在P套接字信息中關(guān)于發(fā)送者的端外,W的數(shù)據(jù)接收與P數(shù)據(jù)接收基本上一樣。參考1單播和廣播模式”。如果所傳輸?shù)臄?shù)據(jù)比選用套接字的接收緩檢查發(fā)送數(shù)據(jù)/發(fā)送完成發(fā)送/超檢查完成/套接字關(guān)MACRAW(以MAC層為上限的數(shù)據(jù)處理模式16MACRAW套接字初始S0_MR=0x04;S0_CR=OPEN;if(Sn_SR!=SOCK_MACRAW)S0_CR=CLOSE;goto}檢查接收數(shù)接收過(guò)17接收MACRAWMACRAW數(shù)據(jù)包含“包信息”,“數(shù)據(jù)包”和4字節(jié)的循環(huán)。“包信息”是數(shù)據(jù)包的長(zhǎng)度,細(xì)的“類(lèi)型”信息,清參考下面:{{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數(shù)據(jù)。越接近接收緩存大小,發(fā)生錯(cuò)誤的概率也大。如果用戶可以允許/*通過(guò)使能MAC過(guò)濾來(lái)設(shè)置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);} }}檢查發(fā)送數(shù)據(jù)/發(fā)送用戶想發(fā)送的數(shù)據(jù)的大小過(guò)發(fā)送緩存的大小和缺省MTU。主機(jī)產(chǎn)生與“接收過(guò)程”發(fā)送的以太網(wǎng)包在會(huì)以0填充的方式擴(kuò)充到60字節(jié),然后發(fā)送。{{;}}{memcpy(src_ptrdst_addr,upper_size);}{}檢查發(fā)送完{{’);}檢查結(jié)束/套接字關(guān)外部接SPI接串行接口模式只需要4個(gè)引腳進(jìn)行數(shù)據(jù)通信。這 (Hardwired(Hardwired18SPI設(shè)備操主控制器(SPI的主設(shè)備)發(fā)出一系列指令控制W5200的運(yùn)行。SPI主設(shè)備通過(guò)四個(gè)信號(hào)線與W5200通信:從設(shè)備

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論