Microsoft Word - W5200_DS_V140K.docx

Similar documents
W5500 W5500 은위즈네트의 Hardware TCP/IP 기술을이용한임베디드용인터넷솔루션으로하나의칩에 TCP/IP 프로토콜처리부터 10/100 Ethernet PHY 와 MAC 을모두내장하고있다. W5500 내부에는 TCP, UDP, IPv4, ICMP, IGMP

TCP.IP.ppt

bn2019_2

SRC PLUS 제어기 MANUAL

시스코 무선랜 설치운영 매뉴얼(AP1200s_v1.1)

hd1300_k_v1r2_Final_.PDF

Subnet Address Internet Network G Network Network class B networ

일반적인 네트워크의 구성은 다음과 같다

SMB_ICMP_UDP(huichang).PDF

Microsoft Word doc

1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation

untitled

1217 WebTrafMon II


USB USB DV25 DV25 REC SRN-475S REC SRN-475S LAN POWER LAN POWER Quick Network Setup Guide xdsl/cable Modem PC DVR 1~3 1.. DVR DVR IP xdsl Cable xdsl C

Network seminar.key


TTA Verified : HomeGateway :, : (NEtwork Testing Team)

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

VZ94-한글매뉴얼

Table of Contents 1 Introduction Implementation Connection Process Socket 0 Open in MACRAW mode PPPoE Discovery Proces

Microsoft Word - FS_ZigBee_Manual_V1.3.docx

UDP Flooding Attack 공격과 방어

T100MD+

PWR PWR HDD HDD USB USB Quick Network Setup Guide xdsl/cable Modem PC DVR 1~3 1.. DVR DVR IP xdsl Cable xdsl Cable PC PC DDNS (

MAX+plus II Getting Started - 무작정따라하기

歯Cablexpert제안서.PDF

ARMBOOT 1

Sena Device Server Serial/IP TM Version

W5300 Datasheet

(SW3704) Gingerbread Source Build & Working Guide

PowerPoint 프레젠테이션

untitled

W5300 Datasheet

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

10X56_NWG_KOR.indd

슬라이드 1

chapter4

CPX-E-SYS_BES_C_ _ k1

歯DCS.PDF

-. Data Field 의, 개수, data 등으로구성되며, 각 에따라구성이달라집니다. -. Data 모든 의 data는 2byte로구성됩니다. Data Type는 Integer, Float형에따라다르게처리됩니다. ( 부호가없는 data 0~65535 까지부호가있는

1. GigE Camera Interface를 위한 최소 PC 사양 CPU : Intel Core 2 Duo, 2.4GHz이상 RAM : 2GB 이상 LANcard : Intel PRO/1000xT 이상 VGA : PCI x 16, VRAM DDR2 RAM 256MB

CAN-fly Quick Manual

Chapter11OSPF

CONTENTS 1. Approval Revision Record Scope Numbering of product Product Part No Lot. No Absolu

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

airDACManualOnline_Kor.key

MODBUS SERVO DRIVER( FDA7000 Series ) STANDARD PROTOCOL (Ver 1.00) 1

Microsoft Word - USB복사기.doc

untitled

CPX-E-PB_BES_C_ _ k1

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

Remote UI Guide

소개 TeraStation 을 구입해 주셔서 감사합니다! 이 사용 설명서는 TeraStation 구성 정보를 제공합니다. 제품은 계속 업데이트되므로, 이 설명서의 이미지 및 텍스트는 사용자가 보유 중인 TeraStation 에 표시 된 이미지 및 텍스트와 약간 다를 수

DE1-SoC Board

CPX-E-EC_BES_C_ _ k1


°í¼®ÁÖ Ãâ·Â

[8051] 강의자료.PDF

[ 네트워크 1] 3 주차 1 차시. IPv4 주소클래스 3 주차 1 차시 IPv4 주소클래스 학습목표 1. IP 헤더필드의구성을파악하고요약하여설명할수있다. 2. Subnet ID 및 Subnet Mask 를설명할수있고, 각클래스의사용가능한호스트수와사설 IP 주소및네트

Microsoft Word - ZIO-AP1500N-Manual.doc

Microsoft Word - PEB08_USER_GUIDE.doc

APOGEE Insight_KR_Base_3P11

cam_IG.book

untitled

제20회_해킹방지워크샵_(이재석)

Microsoft PowerPoint - ch03ysk2012.ppt [호환 모드]

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

() Aloha Netowrk ether(,, )network Ehternet, DEC, ( DIX(DEC, Intel, Xerox) IEEE(, ) 5 9,, (Xerox) (Bob Metcalfe), (, ) A

BJFHOMINQJPS.hwp

자바-11장N'1-502

Coriolis.hwp

PowerChute Personal Edition v3.1.0 에이전트 사용 설명서

4 CD Construct Special Model VI 2 nd Order Model VI 2 Note: Hands-on 1, 2 RC 1 RLC mass-spring-damper 2 2 ζ ω n (rad/sec) 2 ( ζ < 1), 1 (ζ = 1), ( ) 1

R50_51_kor_ch1

Microsoft PowerPoint ppt

CD-RW_Advanced.PDF

Microsoft Word - ASG AT90CAN128 모듈.doc

Assign an IP Address and Access the Video Stream - Installation Guide

1

ez-md+_manual01

Microsoft Word - Installation and User Manual_CMD V2.2_.doc

MR-3000A-MAN.hwp

Slide 1


Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

목차 1. 제품 소개 특징 개요 Function table 기능 소개 Copy Compare Copy & Compare Erase

슬라이드 제목 없음

Microsoft PowerPoint - 2.Catalyst Switch Intrastructure Protection_이충용_V1 0.ppt [호환 모드]

Orcad Capture 9.x

DSP_MON 프로그램 메뉴얼

KDTÁ¾ÇÕ-1-07/03

KDTÁ¾ÇÕ-2-07/03

歯규격(안).PDF

LCD Display

슬라이드 1

6주차.key

CANTUS Evaluation Board Ap. Note

歯AG-MX70P한글매뉴얼.PDF

Transcription:

Datasheet Version 1.4.0 http://www.wiznet.co.kr 1

W5200 W5200은위즈네트의 Hardware TCP/IP 기술을이용한임베디드시스템을위한인터넷솔루션중 SPI (Serial Peripheral Interface) 성능을향상시킨제품이다. SPI Interface를채택하여패키지사이즈를줄여작은임베디드시스템의구현이보다용이해졌다. W5200 하나의칩으로 TCP/IP 프로토콜처리및 10/100 Ethernet PHY와 MAC을구현하여개발하고자하는 Application에 Internet Connectivity를손쉽게구현할수있도록지원한다. 위즈네트에서는 TCP, UDP, IPv4, ICMP, IGMP, ARP, PPPoE 등의통신프로토콜을 Full hardware logic으로개발하여여러제품에서사용하고있다. W5200에서는데이터통신을위해서 data communication memory를 32Kbyte로사용하였다. 이에 W5200에서는하드웨어로처리되는 8개의독립적인하드웨어 SOCKET을사용할수있다. SPI Interface 방식은외부 MCU와 W5200의연결을간단하게구현할수있다. MCU와연결을위해 SPI 핀 4개만사용함으로써시스템 MCU의 I/O 핀제약과점점작아지는시스템사이즈에적합한설계가가능하다. 또한, 시스템의소비전력을낮추기위해 WOL (Wake On LAN) 기능과 Power Down mode를제공한다. WOL모드에서외부에서 Wake-up시키기위해 Raw Ethernet Packet 형식의 MAGIC Packet이사용된다. Features - Support Hardwired TCP/IP Protocols : TCP, UDP, ICMP, IPv4 ARP, IGMP, PPPoE - Supports 8 independent sockets simultaneously - Very small 48 Pin QFN Package - Support Power down mode - Support Wake on LAN - Support High Speed Serial Peripheral Interface(SPI MODE 0, 3) - Internal 32Kbytes Memory for Tx/Rx Buffers - 10BaseT/100BaseTX Ethernet PHY embedded - Support Auto Negotiation (Full and half duplex, 10 and 100-based ) - Support Auto MDI/MDIX - Support ADSL connection (with support PPPoE Protocol with PAP/CHAP Authentication mode) - Not support IP Fragmentation - 3.3V operation with 5V I/O signal tolerance - Lead-Free Package - Multi-function LED outputs (Full/Half duplex, Link, Speed) 2

Target Applications W5200은다음과같은 Embedded application에적합하다. - Home Network Devices: Set-Top Boxes, PVRs, Digital Media Adapters - Serial-to-Ethernet: Access Controls, LED displays, Wireless AP relays, etc. - Parallel-to-Ethernet: POS / Mini Printers, Copiers - USB-to-Ethernet: Storage Devices, Network Printers - GPIO-to-Ethernet: Home Network Sensors - Security Systems: DVRs, Network Cameras, Kiosks - Factory and Building Automations - Medical Monitoring Equipments - Embedded Servers 3

Block Diagram 4

Table of Contents 1 Pin Assignment... 8 1.1 MCU Interface Signals... 8 1.2 PHY Signals... 10 1.3 Miscellaneous Signals... 11 1.4 Power Supply Signals... 11 1.5 Clock Signals... 13 1.6 LED Signals... 13 2 Memory Map... 14 3 W5200 Registers... 15 3.1 common registers... 15 3.2 Socket registers... 16 4 Register Descriptions... 17 4.1 Common Registers... 17 4.2 Socket Registers... 24 5 Functional Descriptions... 40 5.1 Initialization... 40 5.2 Data Communications... 43 5.2.1 TCP... 43 5.2.1.1 TCP SERVER... 44 5.2.1.2 TCP CLIENT... 51 5.2.2 UDP... 52 5.2.2.1 Unicast and Broadcast... 52 5.2.2.2 Multicast... 58 5.2.3 IPRAW... 61 5.2.4 MACRAW... 63 6 External Interface... 69 6.1 SPI (Serial Peripheral Interface) mode... 69 6.2 Device Operations... 69 6.3 Process of using general SPI Master device... 70 7 Electrical Specifications... 75 7.1 Absolute Maximum Ratings... 75 7.2 DC Characteristics... 75 7.3 POWER DISSIPATION(Vcc 3.3V Temperature 25 C)... 75 7.4 AC Characteristics... 76 7.4.1 Reset Timing... 76 7.4.2 Crystal Characteristics... 76 7.4.3 SPI Timing... 77 5

7.4.4 Transformer Characteristics... 78 8 IR Reflow Temperature Profile (Lead-Free)... 79 9 Package Descriptions... 80 Document History Information... 82 6

Table of Figure Figure 1 Pin Description W5200... 8 Figure 2 XTAL_VDD Reference Schematic... 11 Figure 3 Power Design... 12 Figure 4 Crystal Reference Schematic... 13 Figure 5 INTLEVEL Timing... 21 Figure 6 Socket Status Transition... 31 Figure 7 Physical Address Calculation... 37 Figure 8 Allocation Internal TX/RX memory of SOCKET n... 42 Figure 9 TCP SERVER and TCP CLIENT... 43 Figure 10 TCP SERVER Operation Flow... 44 Figure 11 TCP CLIENT Operation Flow... 51 Figure 12 UDP Operation Flow... 52 Figure 13 The Received UDP data Format... 54 Figure 14 IPRAW Operation Flow... 61 Figure 15 The receive IPRAW data Format... 62 Figure 16 MACRAW Operation Flow... 63 Figure 17 The received MACRAW data Format... 64 Figure 18 SPI Interface... 69 Figure 19 W5200 SPI Frame Format... 70 Figure 20 Address and OP/DATA Length Sequence Diagram... 70 Figure 21 READ Sequence... 71 Figure 22 Write Sequence... 73 Figure 23 Reset Timing... 76 Figure 24 SPI Timing... 77 Figure 25 Transformer Type... 78 Figure 26 IR Reflow Temperature... 79 Figure 27 Package Dimensions... 80 7

1 Pin Assignment 1.1 MCU Interface Signals Figure 1 Pin Description W5200 Symbol Type Pin No Description A0/DUP I 30 (*)ADDRESS[0] Indirect interface에서 W5200의레지스터나메모리를선택하기위해사용한다. A1/SPD I 31 (*)ADDRESS[1] Indirect interface에서 W5200의레지스터나메모리를선택하기위해사용한다. D7-0 I/O 32, 33, 34, 35, 36, 37, (*)DATA Indirect interface에서 W5200의레지스터나메모리를읽거나쓰기위해사용한다. 38, 39 RSTn I 46 RESET ( Active LOW ) active가 Low인 W5200을초기화하기위한핀이다. RESET Signal은 low 이후최소 2us이상유지해야하고, High de-assert 이후내부 PLL이안정화될때가지최소 8

150ms를유지해야한다. 7 Electrical Specification 참조 CSn I 41 SPI SLAVE SELECT ( Active LOW ) SPI interface에서 SPI Slave인 W5200을선택할때사용한다. (*)CHIP SELECT ( Active LOW ) Indirect interface에서 W5200의내부레지스터나메모리에접근할때사용한다. INTn O 40 INTERRUPT (Active LOW ) W5200의 Interrupt Sources가발행할경우 Low로되며 다음과 같은 경우에 발생한다. socket connecting, disconnecting, data receiving timeout, and WOL (Wake on LAN). Interrupt는 IR(Interrupt Register) or Sn_IR (Socket n interrupt Register) 이 Clear될때 High assert가된다. SCLK/RDn I 42 SPI CLOCK SPI interface에서 SPI Clock signal로사용한다. (*)READ ENABLE ( Active LOW ) Indirect interface에서 W5200의내부레지스터나메모리를읽기위해사용한다. MOSI/WRn I 43 SPI MASTER OUT SLAVE IN SPI interface에서 SPI MOSI로사용한다. (*)WRITE ENABLE ( Active LOW ) Indirect interface에서 W5200의내부레지스터나메모리에 Data를쓰기위해사용한다. Data는이신호의 rising edge에 W5200으로 latched된다. MISO O 44 SPI MASTER IN SLAVE OUT SPI interface에서 SPI MISO로사용한다. PWDN I 45 POWER DOWN ( Active HIGH ) 이핀은 W5200의 Power down을설정하는데사용한다. Low: Normal Mode 활성화 High: Power Down Mode 활성화 SPIEN I 6 (*)SPI ENABLE ( Active HIGH ) SPI interface를 Enable/disable 하기위해사용한다. Low: SPI interface Mode 비활성화 High: SPI interface Mode 활성화 SPI mode 사용하지않으려면, 다시말해, Indirect mode 를사용하려면, 이신호를 low assert 하면된다. 이핀은 RESET period동안활성화된다. (*) 이핀은 Indirect interface mode에서사용되는핀입니다. Indirect interface mode에대한 9

자세한내용은 W5200_AN_Indirect.pdf 문서를참조하세요. 1.2 PHY Signals Symbol Type Pin No Description RXIP RXIN I I 20 21 RXIP/RXIN Signal Pair RXIN/RXIP differential signal, 수신시에 differential 데이터는 RXIN/RXIP differential signal 을통해수신된다. TXOP O 17 TXOP/TXON Signal Pair TXON O 18 TXON/TXOP differential signal, 전송시에 differential 데이터는 TXON/TXOP differential signal 을통해전송된다. BIAS O 12 BIAS Register 28.7kΩ ±1% 저항을통해그라운드에연결된다. Reference schematic 참고. ANE I 29 Auto Negotiation Mode Enable Auto Negotiation Mode의 Enable/Disable을한다. Low: Auto Negotiation Mode 비활성화 High: Auto Negotiation Mode 활성화 A0/DUP I 30 Full Duplex Mode Enable Full Duplex Mode의 Enable/Disable을설정한다. Low: Half Duplex Mode 활성화 High: Full Duplex Mode 활성화이핀은 RESET period동안활성화된다. A1/SPD I 31 Speed Mode Speed Mode를 100M/10M로설정한다. Low: 10M Speed Mode 활성화 High: 100M Speed Mode 활성화이핀은 RESET period동안활성화된다. 10

1.3 Miscellaneous Signals Symbol Type Pin No Description FDXLEDn/M2 SPDLEDn/M1 LINKLEDn/M0 I 3, 4, 5 W5200 MODE SELECT Normal mode : 111 다른 modes는 internal test mode로쓰인다. 이핀은 RESET period동한활성화된다 RSV I 7 Reserved Pin Notes: Pull-Up/Down resistor = Typical values are 10KΩ. 1.4 Power Supply Signals Symbol Type Pin No Description VCC3V3A Power 11, 15, 23 3.3V power supply for Analog part VCC3V3 Power 27, 47 3.3V power supply for Digital part VCC1V8 Power 8, 25 1.8V power supply for Digital part GNDA Ground 13, 19, 22, Analog ground 24 GND Ground 9, 10, 26, Digital ground 28, 48 1V8O O 14 1.8V regulator output voltage Core operation 전원과내부 regulator에의해 1.8V/200mA 전원을만듦 (VCC1A8, VCC1V8) 출력주파수를안정시키기위해 1V8O과 GND사이에 tantalum capacitor를연결하고고주파 noise decoupling을위해 0.1uF capacitor를연결한다. <Notice> 1V8O은 W5200 전원으로만사용하고다른 device와는연결하지않는다. XTALVDD I 16 Figure 2 XTAL_VDD Reference Schematic 10.1uF capacitor 를그라운드와연결한다. 11

W5200E01-M3 Reference schematic 참조 Figure 3 Power Design 다음은안정적인동작을위한권장사항이다. 1. RXIP/RXIN signal pair(rx) 의길이를가능한같게한다. 2. TXOP/TXON signal pair(tx) 의길이를가능한같게한다. 3. RXIP와 RXIN signal은최대한가깝게위치시킨다. 4. TXOP와 TXON signal은최대한가깝게위치시킨다. 5. RX와 TX signal pair는 bias resistor나 crystal 같은 noisy signals과는최대한멀리떨 어지도록한다. 12

1.5 Clock Signals Symbol Type Pin No Description XI XO I O 1 2 25MHz crystal input/output clock input/output, 25MHz Crystal 혹은 Oscillator 를연결한다. XTAL OUT _ XTAL IN Figure 4 Crystal Reference Schematic 1.6 LED Signals Symbol Type Pin No Description FDXLEDn/M2 O 3 Full Duplex/Collision LED Low: Full-duplex High: Half-duplex. SPDLEDn/M1 O 4 Link speed LED Low: 100Mbps High: 10Mbps LINKLEDn/M0 O 5 Link LED Low: Link (10/100M) High: Un-Link blink: TX or RX state on Link 13

2 Memory Map W5200은아래그림처럼 Common register와 SOCKET register, TX memory, RX memory의조합으로구성되어있다. W5200 Memory Map 14

3 W5200 Registers 3.1 common registers Address Register Address Register 0x0000 Mode (MR) Authentication Type in PPPoE Gateway Address 0x001C (PATR0) 0x0001 (GAR0) 0x001D (PATR1) 0x0002 (GAR1) Authentication Algorithm in 0x0003 (GAR2) PPPoE 0x0004 (GAR3) 0x001E (PPPALGO) Subnet Mask Address 0x001F Chip version(versionr) 0x0005 (SUBR0) 0x0020 0x0006 (SUBR1) ~ Reserved 0x0007 (SUBR2) 0x0027 0x0008 (SUBR3) PPP LCP RequestTimer Source Hardware Address 0x0028 (PTIMER) 0x0009 (SHAR0) PPP LCP Magic number 0x000A (SHAR1) 0x0029 (PMAGIC) 0x000B (SHAR2) 0x002A Reserved 0x000C (SHAR3) ~ 0x000D (SHAR4) 0x002F 0x000E (SHAR5) 0x0030 Interrupt Low Level Timer Source IP Address 0x0031 (INTLEVEL0) 0x000F (SIPR0) (INTLEVEL1) 0x0010 0x0011 0x0012 (SIPR1) (SIPR2) (SIPR3) 0x0032 ~ 0x0033 Reserved 0x0013 0x0014 Reserved 0x0034 0x0035 Socket Interrupt (IR2) PHY Status(PSTATUS) 0x0015 Interrupt (IR) 0x0036 Socket Interrupt Mask (IMR2) 0x0016 Interrupt Mask (IMR) Retry Time 0x0017 (RTR0) 0x0018 (RTR1) 0x0019 Retry Count (RCR) 0x001A Reserved 0x001B 15

3.2 Socket registers Note: n is socket number ( 0, 1, 2, 3, 4, 5, 6, 7 ) Address Register 0x4n00 Socket n Mode (Sn_MR) Address Register Receive Memory Size 0x4n01 Socket n Command (Sn_CR) 0x4n1E (Sn_RXMEM_SIZE) 0x4n02 Socket n Interrupt (Sn_IR) Transmit Memory Size 0x4n03 Socket n Status (Sn_SR) 0x4n1F (Sn_TXMEM_SIZE) Socket n Source Port Socket n TX Free Size 0x4n04 (Sn_PORT0) 0x4n20 (Sn_TX_FSR0) 0x4n05 (Sn_PORT1) 0x4n21 (Sn_TX_FSR1) Socket n Destination Hardware Socket n TX Read Pointer Address 0x4n22 (Sn_TX_RD0) 0x4n06 (Sn_DHAR0) 0x4n23 (Sn_TX_RD1) 0x4n07 (Sn_DHAR1) Socket n TX Write Pointer 0x4n08 (Sn_DHAR2) 0x4n24 (Sn_TX_WR0) 0x4n09 (Sn_DHAR3) 0x4n25 (Sn_TX_WR1) 0x4n0A (Sn_DHAR4) Socket n RX Received Size 0x4n0B (Sn_DHAR5) 0x4n26 (Sn_RX_RSR0) Socket n Destination IP Address 0x4n27 (Sn_RX_RSR1) 0x4n0C (Sn_DIPR0) Socket n RX Read Pointer 0x4n0D (Sn_DIPR1) 0x4n28 (Sn_RX_RD0) 0x4n0E (Sn_DIPR2) 0x4n29 (Sn_RX_RD1) 0x4n0F (Sn_DIPR3) Socket n RX Write Pointer Socket n Destination Port 0x4n2A (Sn_RX_WR0) 0x4n10 (Sn_DPORT0) 0x4n2B (Sn_RX_WR1) 0x4n11 (Sn_DPORT1) Socket n Interrupt Mask Socket n Maximum Segment Size 0x4n2C (Sn_IMR) 0x4n12 (Sn_MSSR0) Socket n Fragment Offset in IP 0x4n13 (Sn_MSSR1) header Socket n Protocol in IP Raw mode 0x4n2D (Sn_FRAG0) 0x4n14 (Sn_PROTO) 0x4n2E (Sn_FRAG1) 0x4n15 Socket n IP TOS (Sn_TOS) 0x4n30 Reserved 0x4n16 Socket n IP TTL (Sn_TTL) ~ 0x4n17 0x4nFF ~ Reserved 0x4n1D 16

4 Register Descriptions 4.1 Common Registers MR (Mode Register) [R/W] [0x0000] [0x00] MR 은 S/W reset, ping block mode, PPPoE mode 에사용된다. 7 6 5 4 3 2 1 0 RST WOL PB PPPoE Bit Symbol Description 7 RST S/W Reset 이 Bit가 1 인경우내부 register는초기화되고 reset후에자동으로 clear 된다. 6 Reserved Reserved 5 WOL Wake on LAN 0:Normal Mode 1:WOL mode 만약 1 로설정할경우 Magic Packet을기다리는상태가된다. 4 PB Ping Block Mode 0 : Disable Ping block 1 : Enable Ping block 만약 1 로설정할경우 Ping request에대한 response를하지않는다. 3 PPPoE PPPoE Mode 0 : DisablePPPoE mode 1 : EnablePPPoE mode 사용자가 router와같은장비없이 ADSL을사용하고자한다면, 이 Bit를 1 로설정하여 ADSL 서버에연결한다. 자세한사항은 How to connect ADSL 문서를참고한다. 2 Reserved Reserved 1 Reserved Reserved 0 Reserved Reserved GAR (Gateway IP Address Register) [R/W] [0x0001 0x0004] [0x00] GAR은 default gateway address를설정할때사용한다. Ex) In case of 192.168.0.1 0x0001 0x0002 0x0003 0x0004 192 (0xC0) 168 (0xA8) 0 (0x00) 1 (0x01) 17

SUBR (Subnet Mask Register) [R/W] [0x0005 0x0008] [0x00] SUBR은 subnet Mask address를설정할때사용한다. Ex) In case of 255.255.255.0 0x0005 0x0006 0x0007 0x0008 255 (0xFF) 255 (0xFF) 255 (0xFF) 0 (0x00) SHAR (Source Hardware Address Register) [R/W] [0x0009 0x000E] [0x00] SHAR은 Source Hardware address를설정할때사용한다. Ex) In case of 00.08.DC.01.02.03 0x0009 0x000A 0x000B 0x000C 0x000D 0x000E 0x00 0x08 0xDC 0x01 0x02 0x03 SIPR (Source IP Address Register) [R/W] [0x000F 0x0012] [0x00] SIPR은 Source IP address를설정할때사용한다. Ex) In case of 192.168.0.2 0x000F 0x0010 0x0011 0x0012 192 (0xC0) 168 (0xA8) 0 (0x00) 2 (0x02) IR (Interrupt Register) [R] [0x0015] [0x00] IR은 Interrupt 발생여부를판단하기위해 Host processor에 MCU에서 access한다. IR Bit가 set되면이 INTn 신호는 low 상태 asserted되고 IR의모든 Bit들을 clear하지않는이상 high상태로변하지않는다. IR은 MCU에 Interrupt신호를발생시킨다 7 6 5 4 3 2 1 0 CONFLICT Reserved PPPoE Reserved Reserved Reserved Reserved Reserved Bit Symbol Description 7 CONFLICT IP Conflict ARP 요청에 Source IP address와같은 IP address응답이있다면, 이 Bit는 1 로 set된다. 이 Bit는 1 을 write함으로써 0 으로 clear할수있다. 6 Reserved Reserved 5 PPPoE PPPoE Connection Close PPPoE mode에서이 Bit가 1 인경우는 PPPoE 연결이 closed임을나타낸다. 이 Bit는 1 을 write함으로써 1 으로 clear할수있다. 4 Reserved Reserved 3 Reserved Reserved 2 Reserved Reserved 1 Reserved Reserved 0 Reserved Reserved 18

IMR(Interrupt Mask Register)[R/W][0x0016][0x00] IMR (Interrupt Mask Register) 는 Interrupt를 Mask하기위해사용한다. 각 Interrupt Mask Bit는 Interrupt Register2 (IR2) 의 Bit와같다. Interrupt Mask Bit가 set되어있다면, IR2의해당 Bit가 set되었을때 Interrupt가발생할것이다. 만약 IMR이 0 으로 set되어있다면, IR2의해당 Bit가 set되더라도 Interrupt는발생하지않는다 7 6 5 4 3 2 1 0 S7_IMR S6_IMR S5_IMR S4_IMR S3_IMR S2_IMR S1_IMR S0_IMR Bit Symbol Description 7 S7_IMR IR2(S7_INT) Interrupt Mask 6 S6_IMR IR2(S6_INT) Interrupt Mask 5 S5_IMR IR2(S5_INT) Interrupt Mask 4 S4_IMR IR2(S4_INT) Interrupt Mask 3 S3_IMR IR2(S3_INT) Interrupt Mask 2 S2_IMR IR2(S2_INT) Interrupt Mask 1 S1_IMR IR2(S1_INT) Interrupt Mask 0 S0_IMR IR2(S0_INT) Interrupt Mask RTR (Retry Time-value Register) [R/W] [0x0017 0x0018] [0x07D0] RTR은 timeout 주기를설정한다. 이 register에서 1값이갖는의미는 100us와같다. Default timeout 은 2000 (0x07D0) 즉, 200ms이다. Ex) When timeout-period is set as 400ms, RTR = (400ms / 1ms) X 10 = 4000(0x0FA0) 0x0017 0x0018 0x0F 0xA0 만약 peer로부터응답이없거나정해진 timeout시간보다 delay가길어질경우재전송이발생하며, CONNECT, DISCON, CLOSE, SEND, SEND_MAC, SEND_KEEP 등에서발생한다. RCR (Retry Count Register) [R/W] [0x0019] [0x08] RCR은재전송횟수를설정한다. 만약재전송횟수가 RCR에저장된횟수이상으로발생할경우, Timeout Interrupt가발생한다. (SOCKET n Interrupt Register (Sn_IR) 의 TIMEOUT Bit는 1 로설정함 ) TCP 통신인경우, Sn_IR(TIMEOUT)= 1 과동시에 Sn_SR의값이 SOCK_CLOSED 로변경된다. TCP 통신이아닌경우, Sn_IR(TIMEOUT) = 1 만된다. Ex) RCR = 0x0007 0x0019 0x07 W5200 에서의 Timeout 은 RTR 과 RCR 로 Data 재전송의시간과횟수를설정할수있다. 19

W5200의 Timeout에대해좀더살펴보면, ARP retransmission timeout과 TCP retransmission timeout 2가지가있다. 먼저 ARP( RFC 826 참조, http://www.ietf.org/rfc.html) retransmission timeout 살펴보면, W5200은 IP, UDP, TCP를이용한통신시상대방의 IP address로 MAC address를알기위해자동으로 ARP-request를전송한다. 이때상대방의 ARP-response 수신을기다리는데, RTR의설정대기시간동안 ARP-response의수신이없으면, Timeout이발생하고 ARP-request를 Retransmission한다. 이와같은작업은 RCR + 1 만큼반복하게된다. RCR + 1 개의 ARP-request retransmission이일어나고, 그에대한 ARP-response가없다면, Final timeout이발생하게되고, Sn_IR(TIMEOUT) = 1 된다. ARP-request의 Final timeout(arp TO ) 값은다음과같다. ARP TO = ( RTR X 0.1ms ) X ( RCR + 1 ) TCP packet retransmission timeout을살펴보면, W5200은 TCP packet (SYN, FIN, RST, DATA packet) 을전송하고그에대한 Acknowledgment(ACK) 을 RTR과 RCR에의해설정된대기시간동안기다리게된다. 이때상대방으로부터 ACK가없으면 Timeout이발생하고이전에보냈던 TCP packet을 Retransmission한다. 이와같은작업은 RCR + 1 만큼반복하게된다. RCR + 1 개의 TCP packet retransmission이일어나고, 그에대한 ACK 수신이없다면, Final timeout이발생하게되고, Sn_IR(TIMEOUT) = 1 과동시에 Sn_SR이 SOCK_CLOSED 로변경된다. TCP packet retransmission의 Final timeout(tcp TO ) 값은다음과같다. M TCP TO = ( Σ(RTR X 2 N ) + ((RCR-M) X RTR MAX ) ) X 0.1ms N=0 N : Retransmission count, 0 <= N <= M M : Minimum value when RTR X 2 (M+1) > 65535 and 0 <= M <= RCR RTR MAX : RTR X 2 M Ex) When RTR = 2000(0x07D0), RCR = 8(0x0008), ARP TO = 2000 X 0.1ms X 9 = 1800ms = 1.8s TCP TO = (0x07D0+0x0FA0+0x1F40+0x3E80+0x7D00+0xFA00+0xFA00+0xFA00+0xFA00) X 0.1ms = (2000 + 4000 + 8000 + 16000 + 32000 + ((8-4) X 64000)) X 0.1ms = 318000 X 0.1ms = 31.8s PATR (Authentication Type in PPPoE mode) [R] [0x001C-0x001D] [0x0000] PATR 은 PPPoE 연결을위한인증 type 을알려준다. W5200 은 PAP 와 CHAP 의 2 가지 type 의인증방법 을지원한다. Value 0xC023 0xC223 Authentication Type PAP CHAP 20

PPPALGO (Authentication Algorithm in PPPoE mode)[r][0x001e][0x00] PPPALGO는 PPPoE연결의인증알고리즘을알려준다. 자세한정보는 PPPoE application note를참고하기바란다. VERSIONR (W5200 Chip Version Register)[R][0x001F][0x03] VERSIONR 은 W5200 chip version 을나타내는 register 이다. PTIMER (PPP Link Control Protocol Request Timer Register) [R/W] [0x0028] PTIMER은 LCP echo request를보내는지속시간을나타낸다. 1의값은 25ms를의미한다. Ex) in case that PTIMER is 200, 200 * 25(ms) = 5000(ms) = 5 seconds PMAGIC (PPP Link Control Protocol Magic number Register) [R/W] [0x0029][0x00] PMAGIC은 LCP negotiation도중에 Magic number option을설정하는데사용된다. Application note How to connect ADSL 을참고하기바란다. INTLEVEL (Interrupt Low Level Timer Register)[R/W][0x0030 0x0031][0x0000] INTLEVEL register는 Interrupt Assert wait time(i AWT ) 을설정한다. 다음 Interrupt가발생했을때설정한시간 (I AWT ) 만큼기다린다음칩내부의 INTn신호를 Low로 assert한다. I AWT = (INTLEVEL + 1) * PLL_CLK 1 (when INTLEVEL > 0) Figure 5 INTLEVEL Timing a. Socket0 에서 Timeout Interrupt가발생하면 S0_IR(3) = 1 이되고해당 IR2(0) 도 1 로 set되며 INTn신호는 Low로된다. b. 연속해서 socket1 에서 Connect Interrupt가발생하면 S1_IR(0) = 1 이되고해당 IR2(1) 도 1 로 set된다. c. MCU는 S0_IR을 clear(s0_ir = 0x00) 하고해당 IR2(0) 또한 clear한다. 칩내부의 INTn신호는 High로된다. d. 여기서 S0_IR이 clear되었지만, socket1 Interrupt 때문에 IR2의값은 0x00이아니다. 따라서칩내부의 INTn신호는 Low로되어야한다. 이때 INTLEVEL register의값이 0x000F 1 PLL_CLK is 125MHz 21

라면칩내부의 INTn신호는 I AWT (16 PLL_CLK) time 후에 Low로된다. IR2(W5200 SOCKET Interrupt Register)[R/W][0x0034][0x00] IR2는 W5200 SOCKET Interrupt가발생할경우이것을알려주는 register이다. Interrupt가발생했을때, IR2의해당 Bit가 set된다. 이경우 IR2의모든 Bit들이 0 으로 clear될때까지 INTn 신호는 low상태가된다. Sn_IR Bit들을이용해서 IR2 register를 clear하면 INTn 신호는 high 상태가된다. 7 6 5 4 3 2 1 0 S7_INT S6_INT S5_INT S4_INT S3_INT S2_INT S1_INT S0_INT Bit Symbol Description 7 S7_INT SOCKET 7 에서 Interrupt 가발생한경우, 이 Bit 는 1 로되고이 Interrupt 정 보는 S7_IR 에반영된다. 이 Bit 는사용자에의해 S7_IR 가 0x00 으로 clear 되 면이에따라자동으로 clear 된다. 6 S6_INT SOCKET 6 에서 Interrupt 가발생한경우, 이 Bit 는 1 로되고이 Interrupt 정 보는 S6_IR 에반영된다. 이 Bit 는사용자에의해 S6_IR 가 0x00 으로 clear 되 면이에따라자동으로 clear 된다. 5 S5_INT SOCKET 5 에서 Interrupt 가발생한경우, 이 Bit 는 1 로되고이 Interrupt 정 보는 S5_IR 에반영된다. 이 Bit 는사용자에의해 S5_IR 가 0x00 으로 clear 되 면이에따라자동으로 clear 된다. 4 S4_INT SOCKET 4 에서 Interrupt 가발생한경우, 이 Bit 는 1 로되고이 Interrupt 정 보는 S5_IR 에반영된다. 이 Bit 는사용자에의해 S4_IR 가 0x00 으로 clear 되 면이에따라자동으로 clear 된다. 3 S3_INT SOCKET 3 에서 Interrupt 가발생한경우, 이 Bit 는 1 로되고이 Interrupt 정 보는 S3_IR 에반영된다. 이 Bit 는사용자에의해 S3_IR 가 0x00 으로 clear 되 면이에따라자동으로 clear 된다. 2 S2_INT SOCKET 2 에서 Interrupt 가발생한경우, 이 Bit 는 1 로되고이 Interrupt 정 보는 S2_IR 에반영된다. 이 Bit 는사용자에의해 S2_IR 가 0x00 으로 clear 되 면이에따라자동으로 clear 된다. 1 S1_INT SOCKET 1 에서 Interrupt 가발생한경우, 이 Bit 는 1 로되고이 Interrupt 정 보는 S1_IR 에반영된다. 이 Bit 는사용자에의해 S1_IR 가 0x00 으로 clear 되 면이에따라자동으로 clear 된다. 0 S0_INT SOCKET 0 에서 Interrupt 가발생한경우, 이 Bit 는 1 로되고이 Interrupt 정 보는 S0_IR 에반영된다. 이 Bit 는사용자에의해 S0_IR 가 0x00 으로 clear 되 면이에따라자동으로 clear 된다. 22

PHYSTATUS(W5200 PHY status Register)[R/W][0x0035][0x00] W5200 PHY의상태를나타내는레지스터이다. Bit Symbol Description 7 Reserved Reserved 6 Reserved Reserved 5 LINK Link Status Register[Read Only] 0 : Link down 1 : Link Up 4 POWERSAVE Power save mode of PHY[Read/Write] 2 0 : Disable power save mode(operates normal mode) 1 : Enable power save mode 3 POWERDOWN Power down mode of PHY[Read/Write] 0 : Disable Power down mode(operates normal mode) 1 : Enable Power down mode 2 Reserved Reserved 1 Reserved Reserved 0 Reserved Reserved IMR2 (Socket Interrupt Mask Register2) [R/W] [0x0036] [0x00] IMR2 (Socket Interrupt Mask Register2) 는 Interrupt를 Mask하는데사용한다. 각 Interrupt Mask Bit는 Interrupt register (IR) 의 Bit와같다. Interrupt Mask Bit가 set되어있다면, IR의해당 Bit가 set되었을때 Interrupt가발생할것이다. 만약 IMR2이 0 으로 set되어있다면, IR의해당 Bit가 set되더라도 Interrupt는발생하지않을것이다. 7 6 5 4 3 2 1 0 IM_IR7 Reserved IM_IR5 Reserved Reserved Reserved Reserved Reserved Bit Symbol Description 7 IM_IR7 IP Conflict Enable 6 Reserved Reserved 5 IM_IR5 PPPoE Close Enable 4 Reserved Reserved 3 Reserved Reserved 2 Reserved Reserved 1 Reserved Reserved 2 In this mode, the amplitudes of 10Mbps NLP and FLP will be reduced 3/8 off. And this kind of power save is only for system level not chip level. This mode is only for 10Mbps mode and the special linkpartner which can accept this kind of link-pulse. If link-partner do not support this kind of link-pulse, we recommend disabling the power save mode. The default value of power save mode is 1. 23

0 Reserved Reserved 4.2 Socket Registers Sn 3 _MR (SOCKET n Mode Register) [R/W] [0x4000+0x0n00] [0x00] 4 Sn_MR은 SOCKET n의 option이나 protocol type등을설정한다. 7 6 5 4 3 2 1 0 MULTI MF ND / MC P3 P2 P1 P0 Bit Symbol Description 7 MULTI Multicasting 0 : disable Multicasting 1 : enable Multicasting 이 Bit는 UDP(P3~03: 0010 ) 일경우에만유효하다. Multicasting을사용하기위해 OPEN 명령이전에 SOCKET n destination IP와 port register에각각 multicast group address와 port number를 write한다. MAC Filter 0 : Disable MAC filter 1 : Enable MAC filter 6 MF 이 Bit 는 MACRAW(P3~P0: 0100 ) 일경우에만유효하다. 1 로설정될경우, W5200 은 Broadcasting packet 이나자신에게전송되는 Packet 만을수신하게된다. 0 으로설정될경우, W5200은 Ethernet 상의모든 Packet을수신하게된다. Hybrid TCP/IP stack을구현하고자하는경우, Host의수신 Overhead 를감소시키기위해이 Bit를 1 로설정할것을권장한다. Use No Delayed ACK 0 : Disable No Delayed ACK option 1 : Enable No Delayed ACK option, 이기능은 TCP의경우에만적용됨 (P3-P0: 0001 ) 5 ND/MC 만약이 Bit 가 1 로 set 되어있다면 peer 로부터데이터 packet 을수신한다음곧 바로 ACK packet 이전송될것이다. 만약이 Bit 가 0 이라면 ACK packet 은내부 timeout 메커니즘에따라전송된다. Multicast 0 : using IGMP version 2 1 : using IGMP version 1 이 Bit는 MULTI Bit가 enable상태이고 UDP모드일때유효함 (P3-P0: 0010 ) 추가 3n is SOCKET number (0, 1, 2, 3, 4, 5, 6, 7). 4[Read/Write] [address of socket 0, address of socket 1, address of socket 2, address of socket 3,address of socket 4, address of socket 5, address of socket 6, address of socket 7] [Reset value] 24

적으로 multicast는 IGMP message에 Join/Leave/Report와같은 version number를 Multicast group으로보낸다. 4 Reserved Reserved 3 P3 Protocol 해당 SOCKET의 TCP, UDP, IPRAW 등의 protocol을설정한다. P3 P2 P1 P0 Meaning 0 0 0 0 Closed 2 P2 0 0 0 1 TCP 0 0 1 0 UDP 1 P1 0 0 1 1 IPRAW 0 P0 * S0_MR_MACRAW와 S0_MR_PPPoE는 SOCKET 0에만쓸수있다. P3 P2 P1 P0 Meaning 0 1 0 0 MACRAW 0 1 0 1 PPPoE S0_MR_PPPoE 는임시로 PPPoE server connection/termination 에사용되지만, Connection 이이루어지면, 다른 protocol 로사용할수있다. 25

Sn_CR (SOCKET n Command Register) [R/W] [0x4001+0x0n00] [0x00] Sn_CR은 OPEN, CLOSE, CONNECT, LISTEN, SEND, RECEIVE와같은 SOCKET n의명령을설정하는데사용한다. W5200이명령을인식하고난다음 Sn_CR은 W5200에의해자동으로 clear 된다. Sn_CR이 0x00 으로 clear되었더라도, 해당명령은여전히처리중일수있다. Sn_CR의명령처리가완료되었는지는 Sn_IR이나 Sn_SR을확인하면된다. Value Symbol Description SOCKET n은초기화되고 Sn_MR (P3:P0) 로선택한 protocol에따라 open된다. 아래테이블은 Sn_MR에따른 Sn_SR값을보여준다 Sn_MR(P3:P0) Sn_SR Sn_MR_CLOSE (0x00) - 0x01 OPEN Sn_MR_TCP (0x01) SOCK_INIT (0x13) Sn_MR_UDP (0x02) SOCK_UDP (0x22) Sn_MR_IPRAW (0x03) SOCK_IPRAW (0x32) S0_MR_MACRAW (0x04) SOCK_MACRAW (0x42) S0_MR_PPPoE (0x05) SOCK_PPPoE (0x5F) 0x02 0x04 0x08 LISTEN CONNECT DISCON LISTEN은 TCP mode (Sn_MR(P3:P0) = Sn_MR_TCP) 에서만유효하다이모드에서, SOCKET n 은 TCP CLIENT 로부터 connection-request (SYN packet) 을기다리는 TCP server로설정된다. 이경우 Sn_SR의상태는 SOCKET_INIT에서 SOCKET_LISTEN으로바뀐다. Client의 connection-request가성공적으로 established되면 Sn_SR의상태는 SOCK_LISTEN에서 SOCK_ESTABLISHED로변하고 Sn_IR(0) 은 1 로된다. 반면에 connection failure (SYN/ACK packet전송실패 ) 의경우 Sn_IR(3) 은 1 로 set되고 Sn_SR의상태는 SOCK_CLOSED로변한다. cf> 만약 connection request동안 TCP client의 destination port가존재하지않을경우, W5200은 RST packet을전송하고 Sn_SR의상태는변하지않는다. CONNECT는 TCP mode(sn_mr(p3:p0) = Sn_MR_TCP) 에서만유효하고SOCKET n 이 TCP CLIENT 로동작할경우사용된다. CONNECT는 Sn_DIPR와 Sn_DPORTR 로설정된 TCP SERVER 에게 Connect-request(SYN packet) 를전송한다. Connect-request가성공했을경우 (SYN/ACK packet을수신했을경우 ), Sn_IR(0)= 1 로되고 Sn_SR은 SOCK_ESTABLISHED로변경된다. Connect-request가실패했을경우는다음과같이 3가지가있다. - ARP-process를통해 Destination hardware address를얻지못하여 ARP TO 가발생 (Sn_IR(3)= 1 ) 한경우 - SYN/ACK packet를수신못하고 TCP TO 가발생 (Sn_IR(3)= 1 ) 한경우 - SYN/ACK packet 대신 RST packet을수신했을경우. 위와같은경우 Sn_SR은 SOCK_CLOSED상태로바뀐다. DISCON은 TCP mode일때만유효하다. W5200은 TCP SERVER 와 TCP CLIENT 에상관없이, 접속중인상대방에게 26

Disconnect-request(FIN packet) 를전송하거나 (Active close), 상대방으로부터 Disconnect-request(FIN packet) 을수신했을때 (Passive close), W5200은 FIN packet을전송한다 (Disconnect-process). Disconnect-request가성공했다면 (FIN/ACK packet을수신했을경우 ), Sn_SR은 SOCK_CLOSED로변경된다. 그러나 Disconnect-request가실패했다면, TCP TO 가 발생 (Sn_IR(3)= 1 ) 하고 Sn_SR은 SOCK_CLOSED로변경된다. cf> ISCON 대신 CLOSE를사용할경우, Disconnect-process (disconnectrequest 전송 ) 이, 단지 Sn_SR만 SOCK_CLOSED로변경된다. 그리고통신중상대방으로부터 RST packet을수신할경우, 무조건 Sn_SR은 SOCK_CLOSED로변경된다. 0x10 CLOSE SOCKET n 을 close한다. 이때 Sn_SR은 SOCK_CLOSED로변경된다. SEND는 TX memory의 buffer에있는데이터를송신하려는 Data Length만큼 0x20 0x21 0x22 0x40 SEND SEND_MAC SEND_KEEP RECV 송신한다. 자세한사항은 SOCKET n TX Free Size Register (Sn_TX_FSR0), SOCKET n TX Write Pointer Register (Sn_TX_WR0), SOCKET n TX Read Pointer Register(Sn_TX_RD0) 를참고하기바란다. SEND_MAC은 UDP mode일때만유효하다. 기본동작은 SEND와같다. SEND는자동으로 ARP-process를통해 Destination hardware address를얻은후 Data를전송하는반면, SEND_MAC은 Host가설정한 Sn_DHAR을 Destination hardware address로하여 Data를전송한다. SEND_KEEP은 TCP mode일때만유효하다. Keep alive packet을송신하여 connection이유효한지확인한다. 만약상대방이더이상응답이없어서 connection이유효하지않은경우 connection을종료한다. Timeout Interrupt가발생한다. RECV는 RX read pointer register (Sn_RX_RD0) 를이용해서데이터를수신한다. 자세한사항은 5.2.1.1 SERVER mode의 Receiving Process와 SOCKET n RX Received Size Register (Sn_RX_RSR0), SOCKET n RX Write Pointer Register(Sn_RX_WR0), and SOCKET n RX Read Pointer Register(Sn_RX_RD0) 를참고하기바란다. 아래 command들은 SOCKET0이고 S0_MR(P3:P0)=S0_MR_PPPoE일때만유효하다. Value Symbol Description 0x23 PCON PPPoE Discovery Packet을전송하여 ADSL 연결시작한다. 0x24 PDISCON ADSL connection 종료한다. 0x25 PCR 각과정에서, REQ message 전송한다. 0x26 PCN 각과정에서, NAK message 전송한다. 0x27 PCJ 각과정에서, REJECT message 전송한다. 27

Sn_IR (SOCKET n Interrupt Register) [R] [0x4002+0x0n00] [0x00] Sn_IR register는 SOCKET n의 Interrupt (establishment, termination, receiving data, timeout) type과같은정보를제공한다. Interrupt가발생하고 Sn_IMR의해당 Mask Bit가 1 인경우 Sn_IR의 Interrupt Bit 는 1 로된다. Sn_IR Bit를 clear하기위해서는, 해당 Bit에다시 1 을 write해야한다. 7 6 5 4 3 2 1 0 PRECV PFAIL PNEXT SEND_OK TIMEOUT RECV DISCON CON Bit Symbol Description 7 PRECV Sn_IR(PRECV) Interrupt 'SOCKET=0' 이고 S0_MR(P3:P0)=S0_MR_PPPoE' 인경우의 Receive Interrupt, 지원하지않는옵션데이터를수신시발생한다. 6 PFAIL 5 PNEXT 4 SEND_OK 3 TIMEOUT 2 RECV 1 DISCON Sn_IR(PFAIL) Interrupt 'SOCKET=0' 이고 S0_MR(P3:P0)=S0_MR_PPPoE' 인경우의 PPP Fail Interrupt, PAP 인증이실패한경우발생한다. Sn_IR(PNEXT) Interrupt 'SOCKET=0' 이고 S0_MR(P3:P0)=S0_MR_PPPoE' 인경우의 PPP Next Phase Interrupt, ADSL연결과정에서 phase가변할때발생한다. Sn_IR(SENDOK) Interrupt SEND OK Interrupt, SEND명령이완료되면발생한다. Sn_IR(TIMEOUT) Interrupt TIMEOUT Interrupt, ARP TO 혹은 TCP TO 가발생한경우발생한다. Sn_IR(RECV) Interrupt Receive Interrupt, peer로부터데이터 packet이수신된경우발생한다. Sn_IR(DISCON) Interrupt Disconnect Interrupt, peer로부터 FIN/ACK packet의 FIN이수신된경우발생 한다. 0 CON Sn_IR(CON) Interrupt Connect Interrupt, peer 와연결이성립되어 SOCKET status 가 established 로바 뀔때 1 번발생한다. 28

Sn_SR (SOCKET n Status Register) [R] [0x4003+0x0n00] [0x00] Sn_SR은 SOCKETn의 SOCKET 상태를알려준다. SOCKET status는 Sn_CR의 Command나, packet 송수신중 에변경될수있다. Value Symbol Description 0x00 SOCK_CLOSED SOCKET n의 resource가 release된상태로서 DISCON, CLOSE command 가수행되거나 ARP TO, TCP TO 가발생했을경우이전값에관계없이상태가변한다. 0x13 SOCK_INIT SOCKET n이 TCP mode로 open되고 TCP연결의첫단계로 initialize된 상태이다. 사용자는 LISTEN과 CONNECT명령을 사용할 수 있다. Sn_MR(P3:P0) 이 Sn_MR_TCP이고 OPEN명령을사용했을때, Sn_SR의상태는 SOCK_INIT으로변한다. 0x14 SOCK_LISTEN SOCKET n이 TCP server mode로동작하며, TCP CLIENT 로부터 connection-request(syn packet) 를기다리는상태다. LISTEN 명령을사용하면, Sn_SR의상태는 SOCK_LISTEN으로변한다. SOCK_LISTEN상태에서 TCP CLIENT 의 Connect-request (SYN packet) 를성공적으로처리했을경우 Sn_SR의상태는 SOCK_ESTABLISHED로바뀌고, 실패했을경우 TCP TO 가발생 (Sn_IR(TIME OUT)= 1 ) 하고 SOCK_CLOSED로바뀐다. 0x17 SOCK_ESTABLISHED TCP 연결이성립된상태로서 SOCK_LISTEN상태에서 TCP CLIENT 의 SYN packet 처리를성공했을경우나 CONNECT command에수행이성공했을경우 Sn_SR의상태는 SOCK_ESTABLEISHED로바뀐다. 이상태에서는 DATA packet 송수신이가능하다. 즉 SEND나 RECV command를수행할수있다. 0x1C SOCK_CLOSE_WAIT Peer로부터 disconnect-request(fin packet) 를수신한상태로서 TCP connection이완전히 disconnect된것이아닌 half close 상태이므로 DATA packet 송수신이가능하다. TCP connection을완전히 disconnect 하기위해서는 DISCON 명령을수행해야한다. 하지만단순히 SOCKET 을 close하려면 CLOSE 명령을수행한다. 0x22 SOCK_UDP SOCKET n이 UDP mode로 Open된상태, Sn_MR(P3:P0) = Sn_MR_UDP인상태에서 OPEN 명령이수행되었을때 Sn_SR은 SOCK_UDP상태로바뀐다. TCP mode SOCKET과달리 connection-process없이직접 DATA packet을송수신할수있다. 0x32 SOCK_IPRAW SOCKET n이 IPRAW mode로 Open된상태, Sn_MR(P3:P0) = Sn_MR_IPRAW 인상태에서 OPEN 명령이수행되었을때 Sn_SR은 SOCK_IPRAW상태로바뀐다. UDP mode SOCKET 처럼 connection-process없이직접 IP packet 을송수신할수있다. 0x42 SOCK_MACRAW Socket 0 가 MACRAW mode로 Open된 상태, S0_MR(P3:P0) = S0_MR_MACRAW인상태에서 OPEN 명령이수행되었을때 Sn_SR은 SOCK_MACRAW상태로바뀐다. UDP mode SOCKET처럼 connectionprocess없이 직접 MAC packet (Ethernet frame) 을송수신할수있다. 29

0x5F SOCK_PPPOE Socket 0 가이 PPPoE mode로 Open된상태, S0_MR(P3:P0) = S0_MR_PPPoE인상태에서 OPEN 명령이수행되었을때 Sn_SR은 SOCK_PPPOE상태로바뀐다. 아래의 Socket status는 Sn_SR의천이과정에서관찰되는 Temporary Status들이다. Value Symbol Description 0x15 SOCK_SYNSENT SOCK_SYNSENT상태는 TCP SERVER 에게 Connect-request (SYN packet) 를전송한상태로서, CONNECT 명령에의해 Sn_SR의상태가 SOCK_INIT에서 SOCK_ESTABLISEHD로바뀔때나타난다. 이상태에서 TCP SERVER 로부터 Connect-accept (SYN/ACK packet) 를수신할경우자동으로 SOCK_ ESTABLISHED상태로바뀐다. 하지만 TCP SERVER 로부터 TCP TO 가발생하기전까지 (Sn_IR(TIMEOUT)= 1 ) SYN/ACK packet을수신하지못할경우에는 SOCK_CLOSED 상태로바뀐다. 0x16 SOCK_SYNRECV SOCK_SYNRECV상태는 TCP CLIENT 로부터 connect-request (SYN packet) 를 수신한 상태로서, 이 상태에서 W5200이 connect-request 에대한응답으로 connect-accept (SYN/ACK packet) 을 TCP CLIENT 에게성공적으로전송하였을경우에는 자동으로 SOCK_ESTABLISHED상태로바뀐다. 하지만전송에실패 하였을 경우 Timeout Interrupt가 발생하고 (Sn_IR(TIME OUT)= 1 ) SOCK_CLOSED상태로바뀐다. 0x18 SOCK_FIN_WAIT SOCKETn이 Closing되는상태로서, Active close나 Passive close 0x1A 0X1B SOCK_CLOSING SOCK_TIME_WAIT 인경우의 Disconnect-process 에서나타나는상태다. Disconnectprocess 과정이성공적으로완료되거나, Timeout Interrupt 가발 생하면 (Sn_IR(TIMEOUT)= 1 ) SOCK_ CLOSED 상태로변한다. 0X1D SOCK_LAST_ACK Passive Closing인경우 W5200이전송한 FIN패킷에대한 ACK를 기다리는 상태이며, Timeout Interrupt가 발생하면 (Sn_IR(TIMEOUT)= 1 ) SOCK_ CLOSED상태로변한다 0x01 SOCK_ARP Destination hardware address를찾기위해 peer로 ARP-request 를전송하는상태로서 SOCK_UDP나 SOCK_IPRAW에서 SEND 명령을수행할경우나타나는상태다. Peer로부터 Hardware address 를성공적으로수신한경우 (ARP-response을수신한경우 ), SOCK_UDP, SOCK_IPRAW, SOCK_SYNSENT로각각상태가변하고, 실패할 경우 timeout Interrupt가 발생하고 (Sn_IR(TIMEOUT)= 1 ), UDP나 IPRAW mode일경우이전 Status인 SOCK_UDP나 SOCK_IPRAW로 되돌아 가며, TCP인 경우 SOCK_CLOSED로상태가바뀐다. cf> SOCK_UDP 나 SOCK_IPRAW 에서, 이전 SEND command 에대 한 Sn_DIPR 와현재 SEND command 의 Sn_DIPR 이다를경우에만 30

ARP-process 가동작한다. Figure 6 Socket Status Transition Sn_PORT (SOCKET n Source Port Register) [R/W] [0x4004+0x0n00-0x4005+0x0n00] [0x0000] Sn_PORT는 source port number를설정한다. SOCKETn을 TCP나 UDP mode로사용할때만유효하며, 그외 mode에서는무시된다. OPEN Command 이전에반드시설정해야한다. Ex) In case of Socket 0 Port = 5000(0x1388), configure as below, 0x4004 0x4005 0x13 0x88 31

Sn_DHAR (SOCKET n Destination Hardware Address Register) [R/W] [0x4006+0x0n00-0x400B+0x0n00] [0xFFFFFFFFFFFF] Sn_DHAR은 SOCKET n의 Destination hardware address를설정한다. 또한 SOCKET0이 PPPoE mode로사용될경우 S0_DHAR은이미알고있는 PPPoE server hardware address로설정한다. UDP나 IPRAW mode에서 SEND_MAC command를사용할경우 SOCKETn의 Destination hardware address 를설정한다. 또한 TCP, UDP, IPRAW mode에서 Sn_DHAR은 CONNECT나 SEND command에의한 ARPprocess를통해획득한 Destination hardware address로설정된다. Host는 CONNECT나 SEND command 성공이후 Sn_DHAR을통해 Destination hardware address를알수있다. PPPoE mode에서, W5200의 PPPoE-process를이용할경우 PPPoE server hardware address를따로설정할필요는없다. 하지만 W5200의 PPPoE-process를이용하지못하고 MACRAW mode로 PPPoE-process를직접구현하여처리한경우라할지라도, PPPoE packet을송수신하기위해서는, 직접구현한 PPPoEprocess를통해획득한 PPPoE server hardware address, PPPoE server IP address, PPP session ID를설정하고 MR(PPPoE) 를 1 로반드시설정한다. S0_DHAR은이미알고있는 PPPoE server hardware address를설정하며, OPEN command 이전에설정한다. S0_DHAR을통해설정된 PPPoE server hardware address는 OPEN command 이후 PDHAR에반영된다. 설정된 PPPoE information은 CLOSE command 이후에도내부적으로계속유효하다. Ex) In case of Socket 0 Destination Hardware address = 08.DC.00.01.02.10, configuration is as below, 0x4006 0x4007 0x4008 0x4009 0x400A 0x400B 0x08 0xDC 0x00 0x01 0x02 0x0A Sn_DIPR (SOCKET n Destination IP Address Register)[R/W][0x400C+0x0n00 0x400F+0x0n00] [0x00000000] Sn_DIPR은 SOCKETn의 Destination IP address를설정하거나설정되며, SOCKET0이 PPPoE mode로사용될경우 S0_DIPR은이미알고있는 PPPoE server IP address로설정한다. Sn_DIPR은 TCP, UDP, IPRAW, PPPoE mode에서만유효하고, MACRAW mode에서는무시된다. TCP mode에서, TCP CLIENT 로동작할경우접속하기위한 TCP SERVER 의 IP address로설정하고, CONNECT command 이전에설정한다. TCP SERVER 로동작할경우 TCP CLIENT 와접속성공이후내부적으로 TCP CLIENT 의 IP address로설정된다. UDP나 IPRAW mode에서는, Sn_DIPR은 UDP나 IP DATA packet 전송에사용될 Destination IP address로 SEND나 SEND_MAC command 이전에설정한다. PPPoE mode에서는, S0_DHAR과같은경우로 S0_DIPR는이미알고있는 PPPoE server IP address를설정한다. Ex) In case of Socket 0 Destination IP address = 192.168.0.11, configure as below. 0x400C 0x400D 0x400E 0x400F 192 (0xC0) 168 (0xA8) 0 (0x00) 11 (0x0B) 32

Sn_DPORT (SOCKET n Destination Port Register)[R/W][0x4010+0x0n00-0x4011+0x0n00] [0x00] Sn_DPORT은 SOCKETn의 Destination port number를설정한다. 만약 SOCKET0이 PPPoE mode로사용되는경우 S0_DPORTR은이미알고있는 PPP Session ID로설정한다. Sn_DIPR은 TCP, UDP, PPPoE mode에서만유효하고, 그외의 mode에서는무시된다. TCP mode에서, TCP CLIENT 로동작할경우접속하기위한 TCP SERVER 의 Listen port number로설정하고, CONNECT command 이전에설정한다. UDP mode에서, Sn_DPORTR은 UDP DATA packet 전송에사용될 Port number 로 SEND나 SEND_MAC command 이전에설정한다. PPPoE mode에서는, S0_PDHAR과같은경우로 S0_DPORTR는이미알고있는 PPP Session ID를설정한다. S0_DPORTR을통해설정된 PPP Session ID는 OPEN command 이후 PSIDR에반영된다. Ex) In case of Socket 0 Destination Port = 5000(0x1388), configure as below, 0x4010 0x4011 0x13 0x88 Sn_MSS (SOCKET n Maximum Segment Size Register)[R/W][0x4012+0x0n00-0x4013+0x0n00] [0x0000] Sn_MSSR은 SOCKETn의 MTU(Maximum Transfer Unit) 를설정하거나, 설정된 MTU를알려준다. Host가 Sn_MSSR를설정하지않을경우는 Default MTU로설정된다. TCP나 UDP mode만지원하며, PPPoE를사 용할경우 (MR(PPPoE)= 1 ) PPPoE의 MTU내에서 TCP나 UDP mode의 MTU가결정된다. Mode Normal (MR(PPPoE)= 0 ) PPPoE (MR(PPPoE)= 1 ) Default MTU Range Default MTU Range TCP 1460 1 ~ 1460 1452 1 ~ 1452 UDP 1472 1 ~ 1472 1464 1 ~ 1464 IPRAW 1480 1472 MACRAW 1514 IPRAW나 MACRAW는내부적으로 MTU를처리하지않고 Default MTU가적용되므로, Host는 Default MTU 보다큰 Data를전송할때 Data를 Default MTU 단위로직접 (Manually) 나누어전송해야한다. UDP mode에서는 TCP mode와같은 Connection-process가없고 Host-Written-Value를그대로사용한다. MTU가서로다른상대방과통신할경우, W5200은 ICMP(Fragment MTU) packet을수신할수있다. 이 경우 IR(FMTU)= 1 가되고 Host는 FMTUR과 UIPR을통해 Fragment MTU와 Destination IP address를알 수있다. IR(FMTU)= 1 일경우그상대방과는 UDP 통신이불가능하므로, 해당 SOCKET을 close하고알 아낸 FMTU를 Sn_MSSR로설정한후 OPEN command로 open하여다시통신을시도한다. Ex) In case of Socket 0 MSS = 1460(0x05B4), configure as below, 0x4012 0x4013 0x05 0xB4 33

Sn_PROTO (SOCKET n IP Protocol Register) [R/W] [0x4014+0x0n00] [0x00] Sn_PROTO는 1 byte register로 IP layer에서 IP header의 Protocol number field를설정한다. IPRAW mode 에서만유효하며, 그외 mode는무시된다. Sn_PROTOR은 OPEN command 이전에설정한다. IPRAW mode로 Open된 SOCKETn은 Sn_PROTOR에설정된 Protocol number의 Data만을송수신한다. Sn_PROTOR은 0x00 ~ 0xFF 의범위내에서설정가능하나, W5200은 TCP(0x06), UDP(0x11) protocol number은지원하지않는다. Protocol number는 IANA (Internet Assigned Numbers Authority) 에서정의하고있으며, 더자세한사항은 IANA의 online document (http://www.iana.org/assignments/protocolnumbers) 를참조하기바란다 Ex) Internet Control Message Protocol (ICMP) = 0x01, Internet Group Management Protocol = 0x02 Sn_TOS (SOCKET n IP Type Of Service Register) [R/W] [0x4015+0x0n00] [0x00] Sn_TOS 는 IP layer 에서 IP header 의 TOS(Type of service) field 를설정한다. Sn_TOS 는 OPEN command 이 전에설정해야한다. 자세한사항은 http://www.iana.org/assignments/ip-parameters 참조하기바란다. Sn_TTL (SOCKET n TTL Register) [R/W] [0x4016+0x0n00] [0x80] Sn_TTL 은 IP layer 에서 IP header 의 TTL(Time to live) field 를설정한다. Sn_TTL 은 OPEN command 이전 에설정해야한다. 자세한사항은 http://www.iana.org/assignments/ip-parameters 참조하기바란다. 34

Sn_RXMEM_SIZE (SOCKET n RX Memory Size Register) [R/W] [0x401E+0x0n00] [0x02] Sn_RXMEM_SIZE는각 SOCKET의 RX memory size를설정한다. 각 SOCKET의 RX memory 0, 1, 2, 4, 8, 16Kbyte크기로설정할수있다. Reset후에초기값으로 2Kbyte의값을갖는다. Sn_RXMEM_SIZE SUM ( 각 Sn_RXMEM_SIZE의총합 ) 은최대 16Kbyte를넘을수없다. Value 0x00 0x01 0x02 0x04 0x08 0x10 Memory size 0KB 1KB 2KB 4KB 8KB 16KB Ex1) SOCKET 0 : 8KB, SOCKET 1 : 2KB 0x401E 0x08 Ex2) SOCKET 2 : 1KB, SOCKET 3 : 1KB 0x421E 0x01 Ex3) SOCKET 4 : 1KB, SOCKET 5 : 1KB 0x441E 0x01 Ex4) SOCKET 6 : 1KB, SOCKET 7 : 1KB 0x461E 0x01 0x411E 0x02 0x431E 0x01 0x451E 0x01 0x471E 0x01 Sn_TXMEM_SIZE (SOCKET n TX Memory Size Register) [R/W] [0x401E+0x0n00] [0x02] Sn_TXMEM_SIZE 는각 SOCKET 의 TX memory size 를설정한다. 각 SOCKET 의 TX memory 0, 1, 2, 4, 8, 16Kbyte 크기로설정할수있다. Reset 후에초기값으로 2Kbyte 의값을갖는다. Sn_TXMEM_SIZE SUM ( 각 Sn_TXMEM_SIZE의총합 ) 은최대 16Kbyte를넘을수없다. Ex1) SOCKET 0 : 4KB, SOCKET 1 : 1KB 0x401F 0x04 Ex2) SOCKET 2 : 2KB, SOCKET 3 : 1KB 0x421F 0x02 Ex3) SOCKET 4 : 2KB, SOCKET 5 : 2KB 0x441F 0x02 Ex4) SOCKET 6 : 2KB, SOCKET 7 : 2KB 0x461F 0x02 0x411F 0x01 0x431F 0x01 0x451F 0x02 0x471F 0x02 Sn_TX_FSR (SOCKET n TX Free Size Register) [R] [0x4020+0x0n00-0x4021+0x0n00] 35

[0x0800] Sn_TX_FSR은 SOCKET n의 Internal TX memory의 Free size( 전송가능한데이터의 byte size) 를알려준다. HOST는 Sn_TX_FSR보다크게 TX memory에 Data를 write하면안된다. 따라서데이터전송전에 Sn_TX_FSR를반드시확인하고, 전송할데이터의크기가 Sn_TX_FSR보다작거나같으면 SEND나 SEND_MAC command로데이터를전송한다. TCP mode에서는상대방으로부터데이터수신이확인 (DATA/ACK packet 수신 ) 되면, Sn_TX_FSR은상대방이수신한 DATA packet 크기만큼내부적으로증가하게된다. 그외 mode에서는 Sn_IR(SENDOK) = 1 인경우 Sn_TX_FSR은전송한 Data size만큼내부적으로증가하게된다. 이 register를읽을때, 사용자는정확한값을얻기위해 upper byte (0x4020, 0x4120, 0x4220, 0x4320, 0x4420, 0x4520, 0x4620, 0x4720) 들을먼저읽어야하고다음 lower byte (0x4021, 0x4121, 0x4221, 0x4321, 0x4421, 0x4521, 0x4621, 0x4721) 들을읽어야한다. Ex) In case of 2048(0x0800) in S0_TX_FSR, 0x4020 0x4021 0x08 0x00 Sn_TX_RD (SOCKET n TX Read Pointer Register) [R] [0x4022+0x0n00-0x4023+0x0n00] [0x0000] Sn_TX_RD는 TX memory에서마지막전송이끝날때 address를알려준다. SOCKET n Command Register 의 SEND 명령으로현재 Sn_TX_RD부터 Sn_TX_WR까지데이터를전송한다. 전송이끝나면자동으로그값이갱신된다. 따라서전송이끝나면 Sn_TX_RD와 Sn_TX_WR은같은값을가질것이다. 이 register를읽을때, 사용자는정확한값을얻기위해 upper byte (0x4022, 0x4122, 0x4222, 0x4322, 0x4422, 0x4522, 0x4622, 0x4722) 들을먼저읽어야하고다음 lower byte (0x4023, 0x4123, 0x4223, 0x4323, 0x4423, 0x4523, 0x4623, 0x4723) 들을읽어야한다. Sn_TX_WR (SOCKET n TX Write Pointer Register) [R/W] [0x4024+0x0n00-0x4025+0x0n00] [0x0000] Sn_TX_WR은전송할데이터가 write되어야할위치정보를알려준다. 이 register를읽을때, 사용자는정확한값을얻기위해 upper byte (0x4024, 0x4124, 0x4224, 0x4324, 0x4424, 0x4524, 0x4624, 0x4724) 들을먼저읽어야하고다음 lower byte (0x4025, 0x4125, 0x4225, 0x4325, 0x4425, 0x4525, 0x4625, 0x4725) 들을읽어야한다 Caution: This register value is changed after the send command is successfully executed to Sn_CR. Ex) In case of 2048(0x0800) in S0_TX_WR, 0x4024 0x4025 0x08 0x00 하지만이값은 write할 physical address가아니므로, physical address는다음과같이계산해야한다. 1. Sn_TXMEM_SIZE(n) 에서 SOCKET n TX Base Address (SBUFBASEADDRESS(n)) 와 SOCKET n TX Mask Address (SMASK(n)) 가계산된다. 2. 위에서계산한두값을 Bitwise-AND operation하고, SOCKET의 TX memory 범위에서 36

Sn_TX_WR과 SMASK(n) 를통해 offset address (dst_mask) 를얻는다. 3. Dst_mask와 SBUFBASEADDRESS(n) 를더해서 physical address (dst_ptr) 를얻는다. 이제, 전송할데이터를 dst_ptr에사용자가원하는만큼 write한다. ( 만약 SOCKET의 TX memory의 upper bound이상으로데이터를 write하는경우, TX memory의 upper bound만큼의데이터를먼저 write 한다. 그리고난다음 SBUFBASEADDRESS(n) 에 physical address를변경하여나머지데이터를 write한다. 그후, Sn_TX_WR 값을 writing 데이터크기만큼증가시킨다. 마지막으로 Sn_CR (SOCKET n Command Register) 에 SEND 명령을수행한다. Chip Base Address = 0x0000, 512(0x0200) bytes send Socket 7 (2K) Socket 6 (2K) Socket 5 (2K) Socket 4 (2K) Socket 3 (2K) Socket 2 (2K) Socket 1 (2K) Socket 0 (2K) 0xC000 0xB800 0xB000 0xA800 0xA000 0x9800 0x9000 0x8800 0x8000 Socket 0 0x8800 0x87EE 0x8000 If S0_TX_WR0 = 0x8FEE, Real Physical Address is 0x8000 + (0x8FEE & 0x07FF) = 0x87EE 18 bytes 0x8800 0x87EE Socket 0 0x8800 0x87EE = 0x12, 18 bytes write and remain 494 bytes. And physical Address changes to 0x8000 0x8000 0x8800 Real Physical Address is 0x8000 + 0x01EE(494) = 0x81EE. Socket 0 S0_TX_WR0 is 0x8FEE + 0x0200 = 0x91EE 0x81EE 494 bytes 0x8000 Figure 7 Physical Address Calculation 37

Sn_RX_RSR (SOCKET n Received Size Register) [R] [0x4026+0x0n00-0x4027+0x0n00] [0x0000] Sn_RX_RSR은 SOCKETn의 Internal RX memory의수신데이터 byte size를알려준다. 이값은 SOCKET n Command Register (Sn_CR) RECV 명령어에의해내부적으로변하고 remote peer로부터데이터를수신한다. 이 register를 read할때, 정확한값을얻기위해사용자는상위 byte (0x4026, 0x4126, 0x4226, 0x4326, 0x4426, 0x4526, 0x4626, 0x4726) 를먼저 read 하고그다음하위 byte (0x4027, 0x4127, 0x4227, 0x4327, 0x4427, 0x4527, 0x4627, 0x4727) 를 read한다 Ex) In case of 2048(0x0800) in S0_RX_RSR, 0x4026 0x04027 0x08 0x00 The total size of this value can be decided according to the value of RX Memory Size Register. Sn_RX_RD (SOCKET n RX Read Data Pointer Register) [R/W] [0x4028+0x0n00-0x4029+0x0n00] [0x0000] Sn_RX_RD는수신데이터를 read하기위한 pointer의위치정보를제공한다. 이 register를 read할때, 사용자는정확한값을 read하기위해상위 byte (0x4028, 0x4128, 0x4228, 0x4328, 0x4428, 0x4528, 0x4628, 0x4728) 를먼저 read한다음하위 byte (0x4029, 0x4129, 0x4229, 0x4329, 0x4429, 0x4529, 0x4629, 0x4729) 를 read해야한다. Ex) In case of 2048(0x0800) in S0_RX_RD, 0x4028 0x08 0x4029 0x00 하지만이값은 read할 physical address가아니므로, physical address는다음과같이계산해야한다. 1. Sn_RXMEM_SIZE(n) 에서 SOCKET n RX Base Address (RBUFBASEADDRESS(n)) 와 SOCKET n RX Mask Address (RMASK(n)) 가계산된다. 2. 위에서계산한두값을 bitwise-and operation하고, SOCKET의 RX memory 범위에서 Sn_RX_WR과 RMASK(n) 를통해 offset address (src_mask) 를얻는다. 3. src_mask와 RBUFBASEADDRESS(n) 를더해서 physical address(src_ptr) 를얻는다. 이제, 수신데이터를 src_ptr부터사용자가원하는만큼 read한다. ( 만약 SOCKET의 RX memory의 upper bound이상으로데이터를 read하는경우, RX memory의 upper bound만큼의데이터를먼저 read 한다. 그리고난다음 RBUFBASEADDRESS(n) 에 physical address를변경하여나머지데이터를 read한다. 그후, Sn_RX_RD값을 read한만큼증가시킨다. ( 수신된데이터크기이상으로증가해서는안되므로, 수신전에반드시 Sn_RX_RSR을 check해야한다.) 마지막으로 Sn_CR (SOCKET n Command Register) 에 RECV명령을수행한다.. 38

Sn_RX_WR (SOCKET n RX Write Pointer Register)[R/W][(0x402A+0x0n00) (0x402B+0x0n00)][0x0000] Sn_RX_WR은수신데이터를 write하기위한 pointer의위치정보를제공한다. 0x442A, 0x452A, 0x462A, 0x472A) 를먼저 read하고난다음하위 byte (0x402B, 0x412B, 0x422B, 0x432B, 0x442B, 0x452B, 0x462B, 0x472B) 를 read해야한다. Ex) In case of 2048(0x0800) in S0_RX_WR, 0x402A 0x402B 0x08 0x00 Sn_IMR (SOCKET n Interrupt Mask Register)[R/W][0x402C+0x0n00][0xFF] Sn_IMR은 Host로알려줄 SOCKET n의 Interrupt를설정한다. Sn_IMR의 Interrupt Mask Bit들은 Sn_IR의 Interrupt Bit들과각각대응된다. 임의의 SOCKET Interrupt가발생하고 Sn_IMR의그 Bit가 1 로설정되어있을경우 Sn_IR의대응 Bit가 1 로설정된다. Sn_IMR과 Sn_IR의임의 Bit가모두 1 일때 IR(n) = 1 이된다. 이때 IMR(n) = 1 이라면 Host에 Interrupt가발생한다.( /INT signal low assert) 7 6 5 4 3 2 1 0 PRECV PFAIL PNEXT SEND_OK TIMEOUT RECV DISCON CON Bit Symbol Description 7 PRECV Sn_IR(PRECV) Interrupt Mask Valid only in case of SOCKET = 0 & S0_MR(P3:P0) = S0_MR_PPPoE 6 PFAIL Sn_IR(PFAIL) Interrupt Mask Valid only in case of SOCKET = 0 & S0_MR(P3:P0) = S0_MR_PPPoE 5 PNEXT Sn_IR(PNEXT) Interrupt Mask Valid only in case of SOCKET = 0 & S0_MR(P3:P0) = S0_MR_PPPoE 4 SENDOK Sn_IR(SENDOK) Interrupt Mask 3 TIMEOUT Sn_IR(TIMEOUT) Interrupt Mask 2 RECV Sn_IR(RECV) Interrupt Mask 1 DISCON Sn_IR(DISCON) Interrupt Mask 0 CON Sn_IR(CON) Interrupt Mask Sn_FRAG (SOCKET n Fragment Register)[R/W][0x402D+0x0n00-0x402E+ 0x0n100][0x4000] Sn_FRAG는 IP layer에서 IP header의 Fragment field를설정한다. W5200은 IP layer의 packet fragment를 지원하지않는다. 따라서 Sn_FRAG를설정하더라도 IP data는 fragment되지않으며이를설정하는것 은권장하지않는다. Sn_FRAG는 OPEN command 이전에설정한다. Ex) Sn_FRAG0 = 0x4000 (Don t Fragment) 0x402D 0x402E 0x40 0x00 39

5 Functional Descriptions W5200은 Register와 Memory operation을통해간단히 Internet에연결할수있다. 이장에서는 W5200가어떻게동작되는지를설명한다. 5.1 Initialization Basic Setting W5200의동작을위해아래의 Register들을사용자의네트워크환경에알맞게설정한다. 1. Mode Register (MR) 2. Interrupt Mask Register (IMR) 3. Retry Time-value Register (RTR) 4. Retry Count Register (RCR) 위의 Register들의보다자세한내용은 Register Descriptions을참조한다. Setting network information 통신을위한기본 Network 정보설정 : 다음의기본적인 Network 정보를반드시설정해주어야한다. 1. SHAR(Source Hardware Address Register) SHAR에의해설정되는 Source hardware address는모든 Device에대해유일한 Hardware address(ethernet MAC address) 값을 Ethernet MAC layer에서사용하도록정해져있다. 이 MAC address의할당은 EEE에서관장하고있으며, Network device를생산하는 Manufacture는생산된 Network device에 IEEE로부터할당받은 MAC address를부여하여야한다. http://www.ieee.org/, http://standards.ieee.org/regauth/oui/index.shtml를참조하라 2. GAR(Gateway Address Register) 3. SUBR(Subnet Mask Register) 4. SIPR(Source IP Address Register) 40

Set socket memory information W5200의설정가능한 TX, RX의최대메모리사이즈는 16Kbytes이다. 16Kbytes의범위안에서는 0KB, 1KB, 2KB, 4KB, 8KB, 16KB의크기로 8개의소켓까지자유롭게설정이가능하지만 TX, RX의사이즈가각각 16Kbyte를넘어가서는안된다. 다음은 SOCKET n의 RX/TX Memory를설정하는의사코드를예로나타낸것이다. In case of, assign 2KB rx, tx memory per SOCKET gs0_rx_base = 0x0000(Chip base address) + 0xC000(Internal RX buffer address); // Set base address of RX memory for SOCKET 0 Sn_RXMEM_SIZE(ch) = (uint8 *) 2; // Assign 2K rx memory per SOCKET gs0_rx_mask = 2K 1; // 0x07FF, for getting offset address within assigned SOCKET 0 RX memory gs1_rx_base = gs0_rx_base + (gs0_rx_mask + 1); gs1_rx_mask = 2K 1; 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_base = 0x0000(Chip base address) + 0x8000(InternalTX buffer address); // Set base address of TX memory for SOCKET 0 Sn_TXMEM_SIZE(ch) = (uint8 *) 2; // Assign 2K rx memory per SOCKET gs0_tx_mask = 2K 1; /* Same method, set gs1_tx_base, gs1_tx_mask, gs2_tx_base, gs2_tx_mask, gs3_tx_base, gs3_tx_mask, gs4_tx_base, gs4_tx_mask, gs5_tx_base, gs5_tx_mask, gs6_tx_base, gs6_tx_mask, gs7_tx_base, gs7_tx_mask */ 41

Figure 8 Allocation Internal TX/RX memory of SOCKET n 42

5.2 Data Communications Initialization 과정후 W5200은 TCP, UDP, IPRAW, MACRAW mode의 SOCKET을 open하여상대방과 data 를송수신할수있게된다. W5200은독립적으로동시에사용가능한 SOCKET을총 8개까지지원한다. 이 section에서는각 mode에따른통신방법에대해서설명한다. 5.2.1 TCP TCP는 Connection-oriented protocol이다. TCP는자신의 IP address와 Port number 그리고상대방의 IP address와 Port number를한쌍으로 Connection SOCKET을형성하게되고, 형성된 Connection SOCKET 을통해 Data를송수신한다. Connection SOCKET의형성방법에는 TCP SERVER 와 TCP CLIENT 2가지가있다. 이는어디에서 connect-request(syn packet) 을전송하느냐에따라구분할수있다. TCP SERVER 은상대방의 connect-request 전송을대기하며, 전송된 connect-request을 accept하여 Connection SOCKET을형성한다 (Passive-open). TCP CLIENT 는자신이 connect-request를상대방에게전송하여 Connection SOCKET 형성을먼저요구한다 (Active-open). SERVER CLIENT CLIENT SERVER OPEN LISTEN Connect-Request OPEN CONNECT Connect-Request ESTABLISHED ESTABLISHED Data Communications Data Communications CLOSED Disconnect-Request Or Disconnect-Request CLOSED TCP SERVER Figure 9 TCP SERVER and TCP CLIENT Disconnect-Request Or Disconnect-Request TCP CLIENT 43

5.2.1.1 TCP SERVER Figure 10 TCP SERVER Operation Flow SOCKET Initialization TCP Data communication을위해 SOCKET Initialization 과정이필요하다. 이는 SOCKET을 open하는일이다. SOCKET open 과정은 W5200의 8개의 SOCKET 중하나를선택하여선택된 SOCKET의 Protocol mode(sn_mr(p3:p0)) 와 Source port number( TCP SERVER 에서는 Listen port number라고함 ) 인 Sn_PORT0을설정한후, OPEN command를수행함으로써이루어진다. OPEN command 이후 Sn_SR이 SOCK_INIT으로변경되면 SOCKET initialization 과정은완료된다. SOCKET initialization 과정은 TCP SERVER 와 TCP CLIENT 의구분없이동일하게적용된다. 다음은 SOCKET n을 TCP mode로 Open 과정이다 44

START: Sn_MR = 0x01; // sets TCP mode Sn_PORT0 = source_port; // sets source port number Sn_CR = OPEN; // sets OPEN command /* wait until Sn_SR is changed to SOCK_INIT */ if (Sn_SR!= SOCK_INIT) Sn_CR = CLOSE; goto START; LISTEN LISTEN command를수행하여 TCP SERVER 로동작시킨다. /* listen SOCKET */ Sn_CR = LISTEN; /* wait until Sn_SR is changed to SOCK_LISTEN */ if (Sn_SR!= SOCK_LISTEN) Sn_CR = CLOSE; goto START; ESTABLISHMENT Sn_SR이 SOCK_LISTEN일때상대방으로부터 SYN packet을수신하게되면 Sn_SR은 SOCK_SYNRECV로변경되고 SYN/ACK packet을전송후 SOCKET n은 Connection이형성되고 Sn_SR은 SOCK_ESTABLISHED 로바뀐다. SOCKET n의 Connection이형성된이후부터 data 송수신이가능해진다. SOCKET n의 connection 형성을확인하는방법은 2가지가있다 First method : if (Sn_IR(CON) == 1 ) /* When an interrupt occurs and the mask bit of Sn_IMR is 1, the interrupt bit of Sn_IR becomes 1 */ Sn_IR(CON) = 1 ; /*In order to clear the Sn_IR bit, the host should write the bit as 1. When all the bits of Sn_IR is cleared ( 0 ), IR(n) is automatically cleared.*/ goto ESTABLISHED stage; /* In this case, if the interrupt of SOCKET n is activated, interrupt occurs. Refer to IR, IMR Sn_IMR and Sn_IR. */ Second method : if (Sn_SR == SOCK_ESTABLISHED) goto ESTABLISHED stage; 45

ESTABLISHMENT : Check received data 상대방으로부터의 TCP data 수신을확인한다. First method : if (Sn_IR(RECV) == 1 ) Sn_IR(RECV) = 1 ; goto Receiving Process stage; /* In this case, if the interrupt of SOCKET n is activated, interrupt occurs. Refer to IR, IMR Sn_IMR and Sn_IR. */ Second Method : if (Sn_RX_RSR0!= 0x0000) goto Receiving Process stage; First method는매수신 DATA packet 마다 Sn_IR(RECV) 이 1 로설정된다. Host가이전에수신한 DATA packet의 Sn_IR(RECV) 를미처처리못하고 W5200이다음 DATA packet을수신할경우, 이전 Sn_IR(RECV) 에중복설정되어 Host는그다음의수신 DATA packet에대한 Sn_IR(RECV) 를인지할수가없게된다. 따라서 Host가각 Sn_IR(RECV) 에대한 DATA packet을완벽하게처리하지못한다면이방법은권장되지않는다. ESTABLISHMENT : Receiving process 이과정에서는내부 RX memory에수신된 TCP 데이터를처리한다. TCP mode에서상대방이전송한 Data 크기가 Socket n의 RX memory free size보다클경우 W5200은그 data를수신할수없으며, RX memory free size가전송한데이터크기보다클때까지 connection을유지한체기다린다. /* first, get the received size */ len = Sn_RX_RSR; // len is received size /* calculate offset address */ src_mask = Sn_RX_RD&gSn_RX_MASK; // src_mask is offset address /* calculate start address(physical address) */ src_ptr = gsn_rx_base + src_mask; // src_ptr is physical start address /* if overflow SOCKET RX memory */ If((src_mask + len) > (gsn_rx_mask + 1)) /* copy upper_size bytes of source_ptr to destination_address */ upper_size = (gsn_rx_mask + 1) src_mask; memcpy(src_ptr, dst_ptr, upper_size); /* update destination_ptr */ dst_address += upper_size; /* copy left_size bytes of gsn_rx_base to destination_address */ 46

left_size = len upper_size; memcpy(gsn_rx_base, dst_address, left_size); else copy len bytes of source_ptr to destination_address */ memcpy(src_ptr, dst_ptr, len); /* increase Sn_RX_RD as length of len */ Sn_RX_RD += len; /* set RECV command */ Sn_CR = RECV; ESTABLISHMENT: Check send data / Send process 전송할 data 크기는할당된 Socket n의 Internal TX memory보다클수없으며, 전송할 data 크기가설정된 MSS보다클경우 MSS 단위로나뉘어져전송된다. 다음 data를전송하기위해선반드시이전의 SEND command가완료되었는지확인해야한다. 이전 SEND command 완료전에다시 SEND command 를수행할경우오류가발생할수있다. Data의크기가클수록 SEND command 완료시간도길어지므로, 전송 Data를적정한크기로나누어전송하는것이유리하다. SEND command 수행후 Data의전송의완료를확인하기위해서는송신하려는 Data length와실제송신된 Data Length가같은지반드시확인해야한다. 실제송신된 Data Length는 SEND command 수행전후의 Sn_TX_RD register 값의차이로계산할수있다. 만약, 실제송신된 Data Length의값이송신하려는 Data length 보다작을경우 SEND command를이용하여남겨진 Data를모두송신해야한다. 따라서, 남겨진 Data기모두전송되어실제송신된 Data Length의합의값이송신하려는 Data length 와같아야 send process가정상적으로완료된다. 아래에는 Send process의간단한예를보여준다. Ex) 보내려는 Data Length= 10, 1) Data Length를이용하여 SEND Command 를수행한다. 2) 실제전송된 Data Length 값을계산한다. 만약에실제전송된 Data Length 7 (=Sn_TX_RD_after_SEND-Sn_TX_RD_befor_SEND) 이라면, 남겨진 Data Length는 3이된다. 3) 실제전송된 Data Length 값의합이보내려는 Data Length 값과일치할때까지 SEND Command를반복하여수행한다. Note: Return값의합이보내려는 Data Length 값과일치할때까지 Data copy를 Data copy를수행해서는안된다. 47

/* first, get the free TX memory size */ FREESIZE: freesize = Sn_TX_FSR; if (freesize<len) goto FREESIZE; // len is send size Sn_TX_RD /* calculate offset address */ dst_mask= Sn_TX_WR0 &gsn_tx_mask; // dst_mask is offset address /* calculate start address(physical address) */ dst_ptr = gsn_tx_base + dst_mask; // destination_address is physical start address /* if overflow SOCKETTX memory */ if ( (dst_mask + len) > (gsn_tx_mask + 1) ) /* copy upper_size bytes of source_addr to destination_address */ upper_size = (gsn_tx_mask + 1) dst_mask; memcpy(src_addr, dst_ptr, upper_size); /* update source_addr*/ source_addr += upper_size; /* copy left_size bytes of source_addr to gsn_tx_base */ left_size = len upper_size; memecpy(source_addr, gsn_tx_base, left_size); else /* copy len bytes of source_addr to destination_address */ memcpy(source_addr, dst_ptr, len); /* increase Sn_TX_WR as length of len */ Sn_TX_WR0 += send_size; /* set SEND command */ Sn_CR = SEND; /* return real packet size */ return ( read_ptr_after_send - read_ptr_befor_send ) /* if return value is not equal len (len is send size), retry send left data without copying data*/ 48

ESTABLISHMENT : Check disconnect-request(fin packet) 상대방으로부터 disconnect-request(fin packet) 를수신했는지확인한다. FIN packet 수신은다음과같이확인할수있다. First method : if (Sn_IR(DISCON) == 1 ) Sn_IR(DISCON)= 1 ; goto CLOSED stage; /* In this case, if the interrupt of SOCKET n is activated, interrupt occurs. Refer to IR, IMR Sn_IMR and Sn_IR. */ Second method : if (Sn_SR == SOCK_CLOSE_WAIT) goto DISCONNECT stage; ESTABLISHMENT : Check disconnect / disconnecting process 더이상상대방과의 data communication이필요가없는경우나상대방으로부터 FIN packet을수신했을경우는 connection SOCKET을 disconnect한다. /* set DISCON command */ Sn_CR = DISCON; ESTABLISHMENT : Check closed DISCON이나 CLOSE command에의해 Socket n이 Disconnect 혹은 close 되었는지확인한다. First method : if (Sn_IR(DISCON) == 1 ) goto CLOSED stage; /* In this case, if the interrupt of SOCKET n is activated, interrupt occurs. Refer to IR, IMR Sn_IMR and Sn_IR. */ Second method : if (Sn_SR == SOCK_CLOSED) goto CLOSED stage; 49

ESTABLISHMENT: Timeout Timeout은 connect-request(syn packet) 나그것에대한응답 (SYN/ACK packet), DATA packet이나그것의응답 (DATA/ACK packet), disconnect-request(fin packet) 나그것의응답 (FIN/ACK packet) 등, 모든 TCP packet을전송할때발생할수있다. RTR과 RCR에설정된 Timeout 시간동안위 packet들을전송하지못하면 TCP final timeout(tcp TO ) 이발생하게되고 Sn_SR은 SOCK_CLOSED로전이한다. TCP TO 의확인 은다음과같이할수있다. First method : if (Sn_IR(TIMEOUT bit) == 1 ) Sn_IR(TIMEOUT)= 1 ; goto CLOSED stage; /* In this case, if the interrupt of SOCKET n is activated, interrupt occurs. Refer to IR, IMR Sn_IMR and Sn_IR. */ Second method : if (Sn_SR == SOCK_CLOSED) goto CLOSED stage; SOCKET Close Disconnect-process에의해이미 disconnection된 SOCKET이나 TCP TO 에의해 Close된 SOCKET을완전히 close하거나, Host가 disconnect-process없이필요에의해 SOCKET을 close할경우사용할수있다. /* clear the remained interrupts of SOCKET n*/ Sn_IR = 0xFF; IR(n) = 1 ; /* set CLOSE command */ Sn_CR = CLOSE; 50

5.2.1.2 TCP CLIENT TCP client 는 CONNECT state 를제외한모든 state 가 TCP SERVER 와동일하다. 자세한내용은 52.1.1 TCP SERVER 를참조하기바란다. Figure 11 TCP CLIENT Operation Flow CONNECT TCP SERVER 에게 connect-request (SYN packet) 를전송한다. TCP SERVER 와의 Connection SOCKET 형 성과정에서 ARP TO, TCP TO 와같은 Timeout 이발생할수있다. Sn_DIPR0 = server_ip; /* set TCP SERVER IP address*/ Sn_DPORT0 = server_port; /* set TCP SERVER listen port number*/ Sn_CR = CONNECT; /* set CONNECT command */ 51

5.2.2 UDP UDP는 Connection-less protocol이다. UDP는 TCP와달리 Connection을형성하지않고 data를송수신한다. TCP는신뢰성있는 data 통신을보장하는반면, UDP는 data 통신의신뢰성을보장하지않는 datagram 통신을하는 protocol이다. UDP는 connection을사용하지않기때문에자신의 IP address와 Port number를알고있는많은상대방과의통신이허락된다. 이와같은 datagram 통신은하나의 SOCKET을이용하여많은상대방과통신을할수있는이점이있는반면, 전송된 data의손실이나원치않는상대방으로부터의 data 수신과같은여러문제가발생할수있다. 이와같은문제를해결하고신뢰성을보장하기위해서, Host가직접손실된 data를재전송하거나, 원치않는상대방으로부터의수신 data를무시해야한다. UDP 통신은 unicast, broadcast, multicast 통신을지원하며, 다음과같은통신 Flow를따른다. Figure 12 UDP Operation Flow 5.2.2.1 Unicast and Broadcast Unicast 통신은가장일반적인 UDP 통신으로, 한번에하나의상대방에게 Data를전송한다. 반면, Broadcast 통신은 Broadcasting IP address을이용하여한번의통신으로수신가능한모든상대방에게 Data를전달한다. 예로 A, B, C 에게 Data를전송할경우, Unicast 통신은 A, B, C 각각에대해서한번씩 Data를전송을한다. 이때 A, B, C에대한 Destination hardware address를획득하는과정 (ARPprocess) 에서 ARP TO 가발생할수있으며, ARP TO 가발생한상대방에게는 Data를전송할수가없다. Broadcast 통신은 Broadcasting IP address로한번의 Data 전송을통하여 A, B, C 모두에게동시에 Data 를전달한다. 이때 A, B, C에대한 Destination hardware address를획득할필요가없으며, ARP TO 역시발생하지않는다 Note: Broadcast IP => HOST IP와 Subnet Mask의보수를 OR 연산하면 Broadcast IP가생성된다. ex> IP: 222.98.173.123, Subnet Mask: 255.255.255.0 이면 broadcast IP: 222.98.173.255 52

Description Decimal Binary HOST IP 222.098.173.123 11011110.01100010.10101101.01111011 Bit Complement Subnet mask 000.000.000.255 00000000.00000000.00000000.11111111 Bitwise OR - - Broadcast IP 222.098.173.255 11011110.01100010.10101101.11111111 SOCKET Initialization UDP data communication을위해 SOCKET initialization 과정이필요하다. 이는 SOCKET을 open하는일이다. SOCKET open 과정은 W5200의 8개의 SOCKET 중하나를선택하고, 선택된 SOCKET의 protocol mode(sn_mr(p3:p0)) 와상대방과의통신에사용할 source port number인 Sn_PORT0을설정한후, OPEN command를수행한다. OPEN command 이후 Sn_SR이 SOCK_UDP으로변경되면 SOCKET initialization 과정은완료된다. START: Sn_MR = 0x02; /* sets UDP mode */ Sn_PORT0 = source_port; /* sets source port number */ Sn_CR = OPEN; /* sets OPEN command */ /* wait until Sn_SR is changed to SOCK_UDP */ if (Sn_SR!= SOCK_UDP) Sn_CR = CLOSE; goto START; Check received data 상대방으로부터의 UDP data 수신을확인한다. TCP 통신과동일한방법으로확인이가능하다. 물론 TCP와같은이유로 Second method를권장한다. 5.2.1.1 TCP SERVER 의해당절을참조하라. First method : if (Sn_IR(RECV) == 1 ) Sn_IR(RECV) = 1 ; goto Receiving Process stage; /* In this case, if the interrupt of SOCKET n is activated, interrupt occurs. Refer to IR, IMR Sn_IMR and Sn_IR. */ Second Method : if (Sn_RX_RSR0!= 0x0000) goto Receiving Process stage; Receiving process 이과정에서는 Internal RX memory 에수신된 UDP Data 를처리한다. 수신된 UDP data 의구조는아래와 같다. 53

Figure 13 The Received UDP data Format 수신된 UDP data는 8bytes의 PACKET-INFO와 data packet으로이루어지며, PACKET-INFO는송신자의정보 (IP address, Port number) 와 data packet의길이가포함된다. UDP는많은송신자로부터 UDP data를수신할수가있다. 송신자의구분은 PACKET-INFO의송신자정보를통해확인할수있다. 송신자가 Broadcasting IP address를이용하여 broadcast한경우도수신된다. Host는 PACKET-INFO의송신자정보를분석하여필요없는수신 data packet은무시해야한다. 송신자의 data 크기가 SOCKET의 Internal RX memory free size보다클경우그 data는수신할수없으며, 또한 fragment된 data 역시수신할수없다. /* calculate offset address */ src_mask = Sn_RX_RD &g Sn_RX_MASK; // src_mask is offset address /* calculate start address(physical address) */ src_ptr = gsn_rx_base + src_mask; // src_ptr is physical start address /* read head information (8 bytes) */ header_size = 8; /* if overflow SOCKET RX memory */ if ( (src_mask + header_size) > (gsn_rx_mask + 1) ) /* copy upper_size bytes of src_ptr to header_addr*/ upper_size = (gsn_rx_mask + 1) src_mask; memcpy(src_ptr, header, upper_size); /* update header_addr*/ header_addr += upper_size; /* copy left_size bytes of gsn_rx_base to header_address */ left_size = header_size upper_size; memcpy(gsn_rx_base, header, left_size); /* update src_mask */ src_mask = left_size; else /* copy header_size bytes of get_start_address to header_address */ memcpy(src_ptr, header, header_size); /* update src_mask */ 54

src_mask += header_size; /* update src_ptr */ src_ptr = gsn_rx_base + src_mask; /* save remote peer information & received data size */ peer_ip = header[0 to 3]; peer_port = header[4 to 5]; get_size = header[6 to 7]; /* if overflow SOCKET RX memory */ if ( (src_mask + get_size) > (gsn_rx_mask + 1) ) /* copy upper_size bytes of src_ptr to destination_address */ upper_size = (gsn_rx_mask + 1) src_mask; memcpy(src_ptr, destination_addr, upper_size); /* update destination_addr*/ destination_addr += upper_size; /* copy left_size bytes of gsn_rx_base to destination_address */ left_size = get_size upper_size; memcpy(gsn_rx_base, destination_addr, left_size); else /* copy len bytes of src_ptr to destination_address */ memcpy(src_ptr, destination_addr, get_size); /* increase Sn_RX_RD as length of len+ header_size */ Sn_RX_RD = Sn_RX_RD + header_size + get_size; /* set RECV command */ Sn_CR = RECV; 55

Check send data / sending process 전송할 data크기는할당된 SOCKET의 internal TX memory보다클수없으며, 전송할 data 크기가 MTU 보다클경우 MTU 단위로자동으로나누어져전송된다. Broadcast할경우에는 Sn_DIPR0을 Broadcasting IP address로설정한다. /* first, get the free TX memory size */ FREESIZE: freesize = Sn_TX_FSR0; if (freesize<len) goto FREESIZE; // len is send size /* Write the value of remote_ip, remote_port to the SOCKET n Destination IP Address Register(Sn_DIPR), SOCKET n Destination Port Register(Sn_DPORT). */ Sn_DIPR0 = remote_ip; Sn_DPORT0 = remote_port; /* calculate offset address */ dst_mask = Sn_TX_WR0 & gsn_tx_mask; // dst_mask is offset address /* calculate start address(physical address) */ dst_ptr = gsn_tx_base + dst_mask; // dst_ptr is physical start address /* if overflow SOCKETTX memory */ if ( (dst_mask + len) > (gsn_tx_mask + 1) ) /* copy upper_size bytes of source_address to dst_ptr */ upper_size = (gsn_tx_mask + 1) dst_mask; memcpy(src_ptr, destination_addr, upper_size); /* update source_address*/ source_address += upper_size; /* copy left_size bytes of source_address to gsn_tx_base */ left_size = send_size upper_size; memcpy(src_ptr, destination_addr, left_size); else /* copy len bytes of source_address to dst_ptr */ memcpy(src_ptr, destination_addr, len); /* increase Sn_TX_WR0 as length of len */ Sn_TX_WR0 += len; 56

/* set SEND command */ Sn_CR = SEND; Check complete sending / Timeout 다음 Data를전송하기위해선반드시이전 SEND command가완료되었는지확인해야한다. Data의크기가클수록 SEND command 완료시간도길어지므로, 전송 Data를적정한크기로나누어전송하는것이유리하다. UDP data 전송시 ARP TO 가발생할수있고, ARP TO 가발생할경우 UDP data 전송은실패한다. First method : /* check SEND command completion */ while(sn_ir(sendok)== 0 ) /* wait interrupt of SEND completion */ /* check ARP TO */ if (Sn_IR(TIMEOUT)== 1 ) Sn_IR(TIMEOUT)= 1 ; goto Next stage; Sn_IR(SENDOK) = 1 ; /* clear previous interrupt of SEND completion */ Second method : If (Sn_CR == 0x00) transmission is completed. If (Sn_IR(TIMEOUT bit) == 1 ) goto next stage; /* In this case, if the interrupt of SOCKET n is activated, interrupt occurs. Refer to Interrupt Register(IR), Interrupt Mask Register (IMR) and SOCKET n Interrupt Register (Sn_IR). */ Check Finished / SOCKET close 통신이모두끝난경우 Socket n을 close한다. /* clear remained interrupts */ Sn_IR = 0x00FF; IR(n) = 1 ; /* set CLOSE command */ Sn_CR = CLOSE; 57

5.2.2.2 Multicast Broadcast 통신이불특정다수와통신하는반면, multicast 통신은특정 multicast-group에등록된다수와통신을한다. A, B, C가특정 multicast-group에등록되어있고, A가등록된 multicast-group으로 data를전송할경우 B, C 역시 A의전송 data를수신할수있다. multicast 통신을하기위해선 IGMP protocol을이용하여 multicast-group에등록하여야한다. multicast-group은 group hardware address, Group IP address, group port number로구분된다. Group hardware address와 IP address는이미지정되어있는 address를사용하고, group port number는임의로사용할수있다. Group hardware address는지정범위 ( 01:00:5e:00:00:00 에서부터 01:00:5e:7f:ff:ff ) 내에서선택되며, Group IP address는 D-class IP address 범위 ( 224.0.0.0 에서 239.255.255.255 까지, http://www.iana.org/assignments/multicast-addresses참조 ) 내에서선택된다. 이때 6bytes의 group hardware address와 4bytes의 IP address의하위 23Bit는같도록선택해야한다. 예로, Group IP address 를 224.1.1.11 로선택할경우 group hardware address는 01:00:5e:01:01:0b 로선택된다. RFC1112 참조 (http://www.ietf.org/rfc.html). W5200에서는 multicast-group 등록에필요한 IGMP 처리는내부적으로 (Automatically) 이루어진다. SOCKET n을 multicast mode로 open할경우 IGMP의 Join message, close할경우 Leave message가내부적으로전송된다. SOCKET open 이후통신시주기적으로 Report message가내부적으로전송된다. W5200은 IGMP version 1과 version 2만을지원하며상위 version을사용하고자한다면, IPRAW mode SOCKET을이용하여 host가직접 IGMP를처리해야한다. SOCKET Initialization Multicast 통신을위해 8개의 SOCKET 중하나를선택하고, Sn_DHAR0을 multicast-group hardware address로 Sn_DIPR0을 multicast-group IP address로설정한다. Sn_PORT0과 Sn_DPORT0을 multicastgroup port number로설정한다. Sn_MR(P3:P0) 를 UDP로 Sn_MR (MULTI) 를 1 로설정한후 OPEN command를수행한다. OPEN command 이후 Sn_SR이 SOCK_UDP으로변경되면 SOCKET initialization 과정은완료된다. START: /* set Multicast-Group information */ Sn_DHAR0 = 0x01; /* set Multicast-Group H/W address(01:00:5e:01:01:0b) */ Sn_DHAR1 = 0x00; Sn_DHAR2 = 0x5E; Sn_DHAR3 = 0x01; Sn_DHAR4 = 0x01; Sn_DHAR5 = 0x0B; Sn_DIPR0 = 211; /* set Multicast-Group IP address(211.1.1.11) */ Sn_DIPR1 = 1; Sn_DIPR2 = 1; Sn_DIRP3 = 11; Sn_DPORT0 = 0x0BB8; /* set Multicast-GroupPort number(3000) */ 58

Sn_PORT0 = 0x0BB8; /* set SourcePort number(3000) */ Sn_MR = 0x02 0x80; /* set UDP mode & Multicast on SOCKET n Mode Register */ Sn_CR = OPEN; /* set OPEN command */ /* wait until Sn_SR is changed to SOCK_UDP */ if (Sn_SR!= SOCK_UDP) Sn_CR = CLOSE; goto START; Check received data 5.2.2.1 Unicast & Broadcast. 참조 Receiving process 5.2.2.1 Unicast & Broadcast. 참조 Check send data / Sending Process SOCKET initialization에서이미 multicast-group에대한정보를설정하였으므로, unicast통신처럼상대방의 IP address와 port number를설정할필요가없다. 따라서전송할 data를 internal TX memory로 copy 한후 SEND command를수행한다. /* first, get the free TX memory size */ FREESIZE: freesize = Sn_TX_FSR; if (freesize<len) goto FREESIZE; // len is send size /* calculate offset address */ dst_mask = Sn_TX_WR0 &gsn_tx_mask; // dst_mask is offset address /* calculate start address(physical address) */ dst_ptr = gsn_tx_base + dst_mask; // dst_ptr is physical start address /* if overflow SOCKETTX memory */ if ( (dst_mask + len) > (gsn_tx_mask + 1) ) /* copy upper_size bytes of source_addr to destination_address */ upper_size = (gsn_tx_mask + 1) dst_mask; memcpy((0x0000 + source_addr), (0x0000 + dst_ptr), upper_size); /* update source_addr*/ source_addr += upper_size; /* copy left_size bytes of source_addr to gsn_tx_base */ left_size = len upper_size; 59

memcpy( source_addr, gsn_tx_base, left_size); else /* copy len bytes of source_addr to dst_ptr */ memcpy( source_addr, dst_ptr, len); /* increase Sn_TX_WR as length of len */ Sn_TX_WR0 += send_size; /* set SEND command */ Sn_CR = SEND; Check complete sending / Timeout Data 통신에필요한모든 Protocol 처리는 Host 가관장하므로 Timeout 은발생하지않는다. /* check SEND command completion */ while(s0_ir(sendok)== 0 ); /* wait interrupt of SEND completion */ S0_IR(SENDOK) = 1 ; /* clear previous interrupt of SEND completion */ Check finished / SOCKET close 5.2.2.1 Unicast & Broadcast. 참조 60

5.2.3 IPRAW IPRAW는 TCP와 UDP의하위 protocol 계층인 IP layer를이용한 Data 통신이다. IPRAW는 protocol number에따라 ICMP(0x01), IGMP(0x02) 와같은 IP layer의 protocol을지원한다. ICMP의 ping이나 IGMP v1/v2는 W5200에서 Hardware logic으로이미구현되어있다. 하지만필요에따라 Host는 Socket n을 IPRAW mode로 open하여이를직접구현하여처리할수있다. IPRAW mode SOCKET을사용할경우, 어 떤 protocol을사용할지반드시 IP header의 protocol number field를설정하여야한다. Protocol number 는 IANA에의해이미정의되어있다 (http://www.iana.org/assignments/protocol-numbers 참조 ). Protocol number는 SOCKET Open 이전에 Sn_PROTO에반드시설정한다. W5200은 IPRAW mode에서 TCP(0x06) 나 UDP(0x11) protocol number는지원하지않는다. IPRAW mode SOCKET의통신은지정된 protocol number만의통신을허용한다. ICMP로설정된 SOCKET은 IGMP와같이설정되지않은그외의 Protocol Data를수신할수없다. Figure 14 IPRAW Operation Flow SOCKET Initialization SOCKET을선택하고 Protocol number를설정한다. Sn_MR (P3:P0) 를 IPRAW mode로설정하고 OPEN command를수행한다. OPEN command 이후 Sn_SR이 SOCK_IPRAW로변경되면 SOCKET initialization 과정은완료된다. START: /* sets Protocol number */ /* The protocol number is used in Protocol Field of IP Header. */ Sn_PROTO = protocol_num; /* sets IP raw mode */ 61

Sn_MR = 0x03; /* sets OPEN command */ Sn_CR = OPEN; /* wait until Sn_SR is changed to SOCK_IPRAW */ if (Sn_SR!= SOCK_IPRAW) Sn_CR = CLOSE; goto START; Check received data 5.2.2.1 Unicast & Broadcast. 참조 Receiving process Internal RX Memory 에수신된 IPRAW Data 를처리한다. 수신된 IPRAW Data 의구조는아래의그림과같 다. Figure 15 The receive IPRAW data Format IPRAW data는 6 bytes의 PACKET-INFO와 data packet으로이루어지며, PACKET-INFO는송신자의정보 (IP address) 와 data packet의길이가포함된다. IPRAW mode의 data 수신은 UDP의 PACKET-INFO에서송신자의 port number 처리를제외하고는 UDP data 수신과모두동일하다. 5.2.2.1 Unicast & Broadcast 참조. 송신자의 Data 크기가 SOCKET n의 RX memory free size보다클경우그 data는수신할수없으며, 또한 fragmented data 역시수신할수없다. Checks send data / Sending process 전송할 data 크기는할당된 SOCKET n의 internal TX memory보다클수없고, default MTU보다클수없다. IPRAW data 전송은 UDP data 전송에서 destination port number를설정하는것을제외하고모두동일하다. 자세한사항은 5.2.2.1 Unicast & Broadcast 를참조하기바란다 Complete sending / Timeout UDP 와동일, 5.2.2 UDP 참조. Check finished / SOCKET closed UDP 와동일, 5.2.2 UDP 참조 62

5.2.4 MACRAW MACRAW 통신은 Ethernet MAC을기반으로그상위 protocol을 host가목적에맞게유연하게사용할수있도록하는통신방법이다. MACRAW mode는오직 SOCKET 0만사용가능하다. SOCKET 0를 MACRAW로사용할경우 SOCKET 1에서 7까지는 hardwired TCP/IP stack을그대로사용할뿐만아니라, SOCKET 0를마치 NIC(Network Interface Controller) 처럼사용할수있어 software TCP/IP stack을구현할수있다. 이와같이 W5200은 hardwired TCP/IP와 software TCP/IP를모두구현할수있는 hybrid TCP/IP stack을지원한다. W5200이지원하는 8개의 SOCKET보다더많은 SOCKET들이요구될경우, 높은성능을요구하는 SOCKET들은 hardwired TCP/IP stack으로구현하고, 그외는 MACRAW mode를이용하여 software TCP/IP로구현하여 SOCKET 수의한계를극복할수있다. MACRAW mode의 SOCKET 0는 SOCKET 1에서 7까지사용되고있는 protocol들을제외한모든 protocol들을처리할수있다. MACRAW 통신은아무런처리없이순수 Ethernet packet만의통신이므로 MACRAW 설계자는이러한 protocol을분석하고처리할수있는 software TCP/IP stack를직접구현해야한다. MACRAW data는 Ethernet MAC을기반으로하기때문에 6bytes의 source hardware address, 6bytes의 destination hardware address, 2 bytes의 Ethernet type 총 14bytes을기본으로포함해야한다 Figure 16 MACRAW Operation Flow 63

SOCKET Initialization SOCKET을선택하고 Sn_MR(P3:P0) 를 MACRAW mode로설정한후 OPEN command를수행한다. OPEN command 이후 Sn_SR이 SOCK_MACRAW로변경되면 SOCKET initialization 과정은완료된다. 이때통신에필요한모든정보 (Source hardware address, Source IP address, Source port number, Destination hardware address, Destination IP address, Destination port number, 각종 Protocol header, ETC) 는 MACRAW Data의일부분이므로이와관련된별도의 register 설정은필요없다. START: /* sets MAC raw mode */ S0_MR = 0x04; /* sets OPEN command */ S0_CR = OPEN; /* wait until Sn_SR is changed to SOCK_MACRAW */ if (Sn_SR!= SOCK_MACRAW) S0_CR = CLOSE; goto START; Check received data 5.2.2.1 Unicast & Broadcast 참조 Receiving process SOCKET 0 의 internal RX memory 에수신된 MACRAW data 를처리한다. MACRAW data 의구조는 Figure 17 과같다. Figure 17 The received MACRAW data Format MACRAW data는 2 bytes의 PACKET-INFO, data packet, 4bytes의 CRC로이루어진다. PACKET-INFO는 data packet의길이이며, data packet은 6bytes destination MAC address, 6bytes source MAC address, 2bytes type, 46~1500 bytes payload로이루어진다. Data packet의 Payload는 Type에따라 ARP, IP와같은 Internet protocol로이루어진다. Type에관한정보는 http://www.iana.org/assignments/ethernetnumbers를참조하기바란다. /* calculate offset address */ src_mask = Sn_RX_RD & gsn_rx_mask; // src_mask is offset address /* calculate start address(physical address) */ src_ptr = gsn_rx_base + src_mask; // src_ptr is physical start address 64

/* get the received size */ len = get_byte_size_of_data_packet // get byte size of DATA packet from Packet-INFO /* if overflow SOCKET RX memory */ If((src_mask + len) > (gsn_rx_mask + 1)) /* copy upper_size bytes of get_start_address to destination_address */ upper_size = (gsn_rx_mask + 1) src_mask; memcpy(src_ptr, dst_addr, upper_size); /* update destination_address */ dst_addr += upper_size; /* copy left_size bytes of gsn_rx_base to destination_address */ left_size = len upper_size; memcpy(src_ptr, dst_addr, left_size); else /* copy len bytes of src_ptr to destination_address */ memcpy(src_ptr, dst_addr, len); /* increase Sn_RX_RD as length of len */ Sn_RX_RD += len; /* extract 4 bytes CRC from internal RX memory and then ignore it */ memcpy(src_ptr, dst_addr, len); /* set RECV command */ Sn_CR = RECV; <Notice> Internal RX memory의 free size가 W5200이수신해야할 MACRAW data의크기보다작을경우, 수신되어서는안되는 MACRAW data의 PACKET-INFO와 data packet의일부가 internal RX memory에저장되는문제가간혹발생할수있다. 이는상기 sample code에서 PACKET-INFO 분석의오류를야기시켜올바른 MACRAW data 수신처리를할수없게된다. 이문제는 internal RX memory가 Full에가까울수록발생할확률이높아진다. 이문제는 MACRAW data의소실을어느정도감안한다면아래와같이해결할수있다. Internal RX memory의처리를최대한빨리하여 Full에도달하는것을방지한다. SOCKET Initialization 과정의 Sample code에서 S0_MR의 MF(MAC Filter) Bit를설정하여자신에해당하는 MACRAW data만을수신하도록하여수신부하를줄인다. 65

START: /* sets MAC raw mode with enabling MAC filter */ S0_MR = 0x44; /* sets OPEN command */ S0_CR = OPEN; /* wait until Sn_SR is changed to SOCK_MACRAW */ if (Sn_SR!= SOCK_MACRAW) S0_CR = CLOSE; goto START; Internal RX memory의 free size가 1528 - default MTU(1514)+PACKET-INFO(2) + data packet(8) + CRC(4) - 보다작을경우 SOCKET0을 close한후지금까지수신한모든 MACRAW data를처리하고다시 SOCKET 0를 open하여정상처리한다. 이때 SOCKET 0 close이후수신되는 MACRAW data는손실될수도있다. /* check the free size of internal RX memory */ if((sn_rxmem_size(0) * 1024) - Sn_RX_RSR0(0) < 1528) recved_size = Sn_RX_RSR0(0); /* backup Sn_RX_RSR */ Sn_CR0 = CLOSE; /* SOCKET Closed */ while(sn_sr!= SOCK_CLOSED); /* wait until SOCKET is closed */ /* process all data remained in internal RX memory */ while(recved_size> 0) /* calculate offset address */ src_mask = Sn_RX_RD&gSn_RX_MASK; // src_mask is offset address /* calculate start address(physical address) */ src_ptr = gsn_rx_base + src_mask; // src_ptr is physical start address /* if overflow SOCKET RX memory */ If((src_mask + len) > (gsn_rx_mask + 1)) /* copy upper_size bytes of get_start_address to destination_address */ upper_size = (gsn_rx_mask + 1) src_mask; memcpy(src_ptr, dst_addr, upper_size); /* update destination_address */ dst_address += upper_size; /* copy left_size bytes of gsn_rx_base to destination_address */ left_size = len upper_size; memcpy(src_ptr, dst_addr, left_size); 66

else /* copy len bytes of src_ptr to destination_address */ memcpy(src_ptr, dst_addr, len); /* increase Sn_RX_RD as length of len */ Sn_RX_RD += len; /* extract 4 bytes CRC from internal RX memory and then ignore it */ memcpy(src_ptr, dst_addr, len); /* calculate the size of remained data in internal RX memory*/ recved_size = recved_size 2 len 4; /* Reopen the SOCKET */ /* sets MAC raw mode with enabling MAC filter */ S0_MR = 0x44; /* or S0_MR = 0x04 */ /* sets OPEN command */ S0_CR = OPEN; /* wait until Sn_SR is changed to SOCK_MACRAW */ while (Sn_SR!= SOCK_MACRAW); else /* process normally the DATA packet from internal RX memory */ /* This block is same as the code of Receiving process stage*/ Check send data / sending process 전송할 Data 크기는할당된 SOCKET 0의 internal TX memory보다클수없고, 또한 default MTU보다클수없다. Host는 Receiving process 과정과같이 data packet 형식과동일한 MACRAW data를생성하고그 data를전송한다. 이때생성된 data의크기가 60 bytes 미만일경우실제 Ethernet으로전송되는 packet은내부적으로 60bytes가되도록 Zero padding 하여전송한다. /* first, get the free TX memory size */ FREESIZE: freesize = S0_TX_FSR; if (freesize<send_size) goto FREESIZE; /* calculate offset address */ dst_mask = Sn_TX_WR0 &gsn_tx_mask; // dst_mask is offset address /* calculate start address(physical address) */ dst_ptr = gsn_tx_base + dst_mask; // dst_ptr is physical start address 67

/* if overflow SOCKETTX memory */ if ( (dst_mask + len) > (gsn_tx_mask + 1) ) /* copy upper_size bytes of source_addr to destination_address */ upper_size = (gsn_tx_mask + 1) dst_mask; memcpy(src_ptr, dst_addr, upper_size); /* update source_addr*/ source_addr += upper_size; /* copy left_size bytes of source_addr to gsn_tx_base */ left_size = len upper_size; memcpy(src_ptr, dst_addr, left_size); else /* copy len bytes of source_addr to destination_address */ memcpy(src_ptr, dst_addr, len); /* increase Sn_TX_WR as length of len */ Sn_TX_WR += send_size; /* set SEND command */ S0_CR = SEND; Check complete sending Data 통신에필요한모든 protocol 처리는 host 가관리하기때문에 timeout 은발생하지않지않는다. /* check SEND command completion */ while(s0_ir(sendok)== 0 ); /* wait interrupt of SEND completion */ S0_IR(SENDOK) = 1 ; /* clear previous interrupt of SEND completion */ Check finished / SOCKET close 5.2.2.1 Unicast & Broadcast 참조 68

6 External Interface W5200 은외부 MCU 와의통신을위해 SPI interface 를제공하고있다. 6.1 SPI (Serial Peripheral Interface) mode Serial Peripheral Interface Mode 는 Data 통신을위해아래의그림과같이 4 핀이필요하다. Figure 18 SPI Interface 6.2 Device Operations W5200은 External Host로부터보내진 Instruction Set에의해제어된다. W5200은 SPI Slave로동작하며 External Host는 SPI Master로동작하게된다. SPI Masters는 W5200와 SPI bus인 Slave Chip Select (CSn), Serial Clock (SCLK), MOSI (Master Out Slave In), MISO (Master In Slave Out) 을이용하여통신한다. SPI Protocol은 Mode 0-3, 4개의모드로정의되어있다. 각모드는 SPI Clock의극성과위상에따라 Data을처리하는방법이달라진다. W5200은 SPI Slave모드로동작하며 SPI mode 0 과 3을지원한다. SPI Mode 0과 3의 inactive일때 SCLK의극성이다르며 active시동일하게동작한다. SPI Mode가 0과 3일경우 Data는항상 SCLK의 Rising edge때 latch되며, Data의출력은 Falling edge 일때이루어진다. 69

6.3 Process of using general SPI Master device 1. Inactive일경우 CSn를 High 로설정한다. 2. SPI Master 디바이스의 SPI 관련레지스터들을설정한다. 3. CSn를 Low 로설정한다. (data transfer start) 4. SPI Master 디바이스의 SPDR register에전송할 Address를 Write한다. 5. SPI Master 디바이스의 SPDR register에전송할 OP code / data length를 Write한다. 6. SPI Master 디바이스의 SPDR register (SPI Data Register) 에전송할 Data를 Write한다. 7. 수신이완료될때까지기다린다. 8. 만약모든 Data의전송이완료되면 CSn를 High 로설정한다. Figure 19 W5200 SPI Frame Format Figure 20 Address and OP/DATA Length Sequence Diagram 70

READ Processing READ Processing Sequence Diagram은그림 20과같다. READ processing을시작하기위해 CSn 를 low 로 driving 한뒤, Address, OP Code, Data Length, Dummy Data를차례대로 MOSI에입력한다. 그러면 MISO를통해 Data를읽을수있다. Address, OP code, Data Length와 Data 관련자세한 Sequences는그림 19을참고한다. OP Code (OP) 에는 READ OP와 WRITE OP이렇게두종류가있다. OP 가 0일때 read operation이선택되며, OP 가 1일경우 write operation이선택된다. W5200의 SPI는 byte 단위의 byte READ processing과복수의 Data를처리하는 burst READ processing이제공된다. byte READ processing일경우, 16-Bit Address, 1-Bit OP code(0x0), 15- Bit Data Length와 8-Bit Data이렇게 4 instruction이필요하다. 반면에 Burst READ processing 은 Data instruction만으로수행된다. Data length로 byte READ processing과 Burst READ processing이구분된다. 만약, Data length가 1일경우 byte READ processing이수행되며, Data length가 2 이상일경우 Burst READ processing이수행된다. MISO 핀은반드시 CSn의 Falling edge 이후 low 로 Driving되어야한다. Figure 21 READ Sequence /* Pseudo Code for Read data of 8bit per packet */ #define data_read_command 0x00 uint16 addr; // Address : 16bits int16 data_len; // Data length :15bits uint8 data_buf[]; // Array for data SpiSendData(); // Send data from MCU to W5200 SpiRecvData(); // Receive data from W5200 to MCU ISR_DISABLE(); // Interrupt Service Routine disable CSoff(); // CS=0, SPI start 71

// SpiSendData SpiSendData(((addr+idx) & 0xFF00) >> 8); // Address byte 1 SpiSendData((addr+idx) & 0x00FF); // Address byte 2 // Data write command + Data length upper 7bits SpiSendData((data_read_command ((data_len& 0x7F00) >> 8))); // Data length bottom 8bits SpiSendData((data_len& 0x00FF)); // Read data:on data_len> 1, Burst Read Processing Mode. for(int idx = 0; idx<data_len; idx++) SpiSendData(0); // Dummy data data_buf[idx] = SpiRecvData(idx); // Read data CSon(); // CS=1, SPI end ISR_ENABLE(); // Interrupt Service Routine disable 72

WRITE Processing Figure 21은 WRITE Processing Sequence Diagram을보여준다. WRITE processing을시작하기위해 CSn를 low 로 driving 한뒤, Address, OP Code, Data Length, Data를차례대로 MOSI에입력한다. W5200의 SPI는 byte 단위의 byte WRITE processing과복수의 Data를처리하는 burst WRITE processing이제공된다. byte WRITE processing일경우, 16-Bit Address, 1-Bit OP code (0x1), 15- Bit Data Length와 8-Bit Data이렇게 4 instruction로구성된다. 반면에 Burst WRITE processing 은 Data instruction만으로수행된다. Data length로 byte WRITE processing과 Burst WRITE processing이구분된다. 만약, Data length가 1일경우 byte WRITE processing이수행되며, Data length가 2 이상일경우 Burst WRITE processing이수행된다. MOSI 핀은반드시 CSn의 Falling edge 이후 low 로 Driving되어야한다 Figure 22 Write Sequence /* Pseudo Code for Write data of 8bit per packet */ #define data_write_command 0x80 uint16 addr; // Address : 16bits int16 data_len; // Data length :15bits uint8 data_buf[];// Array for data SpiSendData(); // Send data from MCU to W5200 ISR_DISABLE(); // Interrupt Service Routine disable CSoff(); // CS=0, SPI start SpiSendData(((addr+idx) & 0xFF00) >> 8); // Address byte 1 SpiSendData((addr+idx) & 0x00FF); // Address byte 2 73

// Data write command + data length upper 7bits SpiSendData((data_write_command ((data_len& 0x7F00) >> 8))); // Data length bottom 8bits SpiSendData((data_len& 0x00FF)); // Write data: On data_len> 1, Burst Write Processing Mode. for(int idx = 0; idx<data_len; idx++) SpiSendData(data_buf[idx]); CSon();// CS=1, SPI end IINCHIP_ISR_ENABLE();// Interrupt Service Routine disable 74

7 Electrical Specifications 7.1 Absolute Maximum Ratings Symbol Parameter Rating Unit V DD DC Supply voltage -0.5 to 3.63 V V IN DC input voltage -0.5 to 5.5 (5V tolerant) V I IN DC input current 5 ma T OP Operating temperature -40 to +85 C T STG Storage temperature -55 to 125 C *COMMENT: Stressing the device beyond the Absolute Maximum Ratings may cause permanent damage. 7.2 DC Characteristics Symbol Parameter Test Condition Min Typ Max Unit V DD DC Supply voltage Junction 2.97 3.63 V temperature is from -55 C to 125 C V IH High level input voltage 2.0 5.5 V V IL Low level input voltage - 0.3 0.8 V V OH High level output voltage IOH = 4 ~8 ma 2.4 V V OL Low level output voltage IOL = 4 ~8mA 0.4 V I I Input Current V IN = V DD 5 A 7.3 POWER DISSIPATION(Vcc 3.3V Temperature 25 C) Condition Min Typ Max Unit 100M Link - 160 175 ma 10M Link - 110 125 ma Un-Link - 125 140 ma 100M Transmitting - 160 175 ma 10M Transmitting - 110 125 ma Power Down mode - 2 4 ma 75

7.4 AC Characteristics 7.4.1 Reset Timing Figure 23 Reset Timing Symbol Description Min Max T RC Reset Cycle Time 2 us - T PL RSTn internal PLOCK - 150 ms 7.4.2 Crystal Characteristics Parameter Frequency Frequency Tolerance (at 25 ) Shunt Capacitance Drive Level Load Capacitance Aging (at 25 ) 25 MHz ±30 ppm 7pF Max 59.12uW/MHz 27pF ±3ppm / year Max Range 76

7.4.3 SPI Timing Figure 24 SPI Timing Symbol Description Min Max Units F SCK SCK Clock Frequency 80/33.3 5 MHz T WH SCK High Time 6 ns T WL SCK Low Time 6 ns T CS CSn High Time 5 ns T CSS CSn Setup Time 5 - ns T CSH CSn Hold Time 5 ns T DS Data In Setup Time 3 ns T DH Data In Hold Time 3 ns T OV Output Valid Time 5 ns T OH Output Hold Time 0 ns T CHZ CSn High to Output Hi-Z 2.1 6 ns 5 Theoretical Guaranteed Speed Even though theoretical design speed is 80MHz, the signal in the high speed may be distorted because of the circuit crosstalk and the length of the signal line. The minimum guaranteed speed of the SCLK is 33.3 MHz which was tested and measured with the stable waveform. 6 2.1ns is when pn loaded with 30pF. The time is shorter with lower capacitance. 77

7.4.4 Transformer Characteristics Parameter Transmit End Receive End Turn Ratio 1:1 1:1 Inductance 350 uh 350 uh Figure 25 Transformer Type 내부 PHY모드를사용하는경우, Auto MDI/MDIX (Crossover) 를위해서 symmetric transformer 를사용해야한다. 78

8 IR Reflow Temperature Profile (Lead-Free) Moisture Sensitivity Level : 3 Dry Pack Required: Yes Average Ramp-Up Rate (Ts max to Tp) Preheat Temperature Min (Ts min ) Temperature Max (Ts max ) Time (ts min to ts max ) Time maintained above: Temperature (TL) Time (tl) Peak/Classification Temperature (Tp) Time within 5 C of actual Peak Temperature (tp) Ramp-Down Rate Time 25 C to Peak Temperature 3 C/second max. 150 C 200 C 60-120 seconds 217 C 60-150 seconds 265 + 0/-5 C 30 seconds 6 C/second max. 8 minutes max. Figure 26 IR Reflow Temperature 79