W7100 Data Sheet

Similar documents
untitled

[8051] 강의자료.PDF

hd1300_k_v1r2_Final_.PDF

SRC PLUS 제어기 MANUAL

TCP.IP.ppt

SMB_ICMP_UDP(huichang).PDF

T100MD+


ºÎ·ÏB

Microsoft Word - FS_ZigBee_Manual_V1.3.docx

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

CANTUS Evaluation Board Ap. Note

MicrocontrollerAcademy_Lab_ST_040709

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

슬라이드 1

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

한글사용설명서

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

VZ94-한글매뉴얼

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

bn2019_2

(1) 주소지정방식 Address Mode 메모리접근 분기주소 명령어 직접번지 Reg. 지정 Reg. 간접 Base Index 간접 Immediate 상대번지 절대번지 Long 주소 Reg. 간접 Byte Access Bit Access 내부 Data M

1

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

ez-md+_manual01

APOGEE Insight_KR_Base_3P11


歯DCS.PDF

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

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

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

CAN-fly Quick Manual

1217 WebTrafMon II

untitled

Microsoft Word - ASG AT90CAN128 모듈.doc

Microsoft Word doc

Remote UI Guide

歯Cablexpert제안서.PDF

Sena Device Server Serial/IP TM Version

6주차.key

PowerPoint 프레젠테이션

(SW3704) Gingerbread Source Build & Working Guide

untitled

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 (

UDP Flooding Attack 공격과 방어

Network seminar.key

歯15-ROMPLD.PDF

PRO1_09E [읽기 전용]

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

untitled

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

歯AG-MX70P한글매뉴얼.PDF

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

CPX-E-EC_BES_C_ _ k1

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

歯FDA6000COP.PDF

전자실습교육 프로그램

Microsoft Word - PEB08_USER_GUIDE.doc

untitled

BJFHOMINQJPS.hwp

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

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

chapter4


CPX-E-PB_BES_C_ _ k1

ARMBOOT 1

Slide 1

歯메뉴얼v2.04.doc

Microsoft Word - CL5000,5500_KOR_UM_ _.doc

MR-3000A-MAN.hwp

PowerPoint 프레젠테이션

슬라이드 1

디지털공학 5판 7-8장

À̵¿·Îº¿ÀÇ ÀÎÅͳݱâ¹Ý ¿ø°ÝÁ¦¾î½Ã ½Ã°£Áö¿¬¿¡_.hwp

DSP_MON 프로그램 메뉴얼

Siemens

airDACManualOnline_Kor.key

PowerPoint Presentation

CD-6208_SM(new)

Microsoft PowerPoint - ch07.ppt

인켈(국문)pdf.pdf

Coriolis.hwp

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

Microsoft Word - USB복사기.doc

Voice Portal using Oracle 9i AS Wireless

Microsoft Word - JAVS_UDT-1_상세_메뉴얼.doc

YD-3533.xls

목차 1. 개요 USB 드라이버 설치 (FTDI DRIVER) FTDI DRIVER 실행파일 USB 드라이버 확인방법 DEVICE-PROGRAMMER 설치 DEVICE-PROGRAMMER

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

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

Microsoft PowerPoint - es-arduino-lecture-03

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

Microsoft Word - SRA-Series Manual.doc

Ultimate High Performance Audio tx-usb Operating Instructions Rev : 1.0

Chapter11OSPF

Chap06(Interprocess Communication).PDF

Microsoft PowerPoint 의 이해.pptx

X-VA-MT3809G-MT3810G-kor

untitled

Transcription:

W7100A Datasheet Version 1.2.3 2013~2014 WIZnet Co.,Ltd. All Rights Reserved. For more information, visit our website at http://www.wiznet.co.kr W7100A Datasheet v1.2.3 1

Table of Contents 1 Overview... 11 1.1 Introduction... 11 1.2 W7100A Features... 11 1.3 W7100A Block Diagram & Features... 12 1.3.1 ALU (Arithmetic Logic Unit)... 12 1.3.2 TCPIPCore... 14 1.4 Pin Description... 16 1.4.1 Pin Layout... 16 1.4.2 Pin Description... 17 1.4.2.1 Configuration... 18 1.4.2.2 Timer... 18 1.4.2.3 UART... 19 1.4.2.4 DoCD Compatible Debugger... 19 1.4.2.5 Interrupt / Clock... 19 1.4.2.6 GPIO... 20 1.4.2.7 External Memory Interface... 21 1.4.2.8 Media Interface... 21 1.4.2.9 Network Indicator LED... 21 1.4.2.10 Power Supply Signal... 22 1.5 64pin package description... 24 1.5.1 Difference between 100 and 64pin package... 24 2 Memory... 25 2.1 Code Memory... 26 2.1.1 Code Memory Wait States... 28 2.2 Data Memory... 28 2.2.1 Data Memory Wait States... 28 2.3 External Data Memory Access... 28 2.3.1 Standard 8051 Interface... 29 2.3.2 Direct Interface... 30 2.4 Internal Data Memory and SFR... 31 2.5 SFR definition... 32 2.5.1 Program Code Memory Write Enable Bit... 32 2.5.2 Program Code Memory Wait States Register... 33 2.5.3 Data Pointer Extended Registers... 34 2.5.4 Data Pointer Registers... 35 2.5.5 Clock Control Register... 36 W7100A Datasheet v1.2.3 2

2.5.6 Internal Memory Wait States Register... 37 2.5.7 Address Latch Enable Register... 38 2.5.8 External Memory Wait States Register... 38 2.5.9 Stack Pointer... 38 2.5.10 New & Extended SFR... 38 2.5.11 Peripheral Registers... 41 3 Interrupt... 42 4 I/O Ports... 46 5 Timers... 50 5.1 Timers 0, 1... 50 5.1.1 Overview... 50 5.1.2 Interrupts... 51 5.1.3 Timer0 Mode0... 52 5.1.4 Timer0 Mode1... 53 5.1.5 Timer0 Mode2... 53 5.1.6 Timer0 Mode3... 53 5.1.7 Timer1 Mode0... 54 5.1.8 Timer1 Mode1... 55 5.1.9 Timer1 Mode2... 55 5.1.10 Timer1 Mode3... 56 5.2 Timer2... 56 5.2.1 Overview... 56 5.2.2 Interrupts... 58 6 UART... 61 6.1 Interrupts... 62 6.2 Mode0, Synchronous... 63 6.3 Mode 1, 8-Bit UART, Variable Baud Rate, Timer 1 or 2 Clock Source... 64 6.4 Mode 2, 9-Bit UART, Fixed Baud Rate... 64 6.5 Mode 3, 9-Bit UART, Variable Baud Rate, Timer1 or 2 Clock Source... 64 6.6 Examples of Baud Rate Setting... 65 7 Watchdog Timer... 66 7.1 Overview... 66 7.2 Interrupts... 66 7.3 Watchdog Timer Reset... 67 7.4 Simple Timer... 68 7.5 System Monitor... 68 7.6 Watchdog Related Registers... 68 7.7 Watchdog Control... 69 W7100A Datasheet v1.2.3 3

7.7.1 Clock Control... 70 7.8 Timed Access Registers... 70 8 TCPIPCore... 72 8.1 Memory Map... 72 8.2 Registers list... 72 8.2.1 Common Registers... 72 8.2.2 SOCKET Registers... 74 8.3 Register Description... 85 8.3.1 Common Register... 85 8.3.2 SOCKET Registers... 91 9 Functional Description... 108 9.1 Initialization... 108 9.2 Data Communication... 113 9.2.1 TCP... 113 9.2.1.1 TCP SERVER... 114 9.2.1.2 TCP CLIENT... 120 9.2.2 UDP... 121 9.2.2.1 Unicast & Broadcast... 121 9.2.2.2 Multicast... 126 9.2.3 IPRAW... 129 9.2.4 MACRAW... 131 10 Electrical Specification... 138 10.1 Absolute Maximum Ratings... 138 10.2 DC Characteristics(Input, Output, I/O)... 138 10.3 Power consumption(driving voltage 3.3V)... 139 10.4 AC Characteristics... 139 10.5 Crystal Characteristics... 140 10.6 Transformer Characteristics... 140 11 IR Reflow Temperature Profile (Lead-Free)... 141 12 Package Descriptions... 142 12.1 Package type: LQFP 100... 142 12.2 Package type: QFN 64... 144 13 Appendix: Performance Improvement about W7100A... 146 13.1 Summary... 146 13.2 8 Bit Arithmetic Functions... 146 13.2.1 Addition... 146 13.2.2 Subtraction... 147 13.2.3 Multiplication... 148 W7100A Datasheet v1.2.3 4

13.2.4 Division... 149 13.3 16-Bit Arithmetic Functions... 149 13.3.1 Addition... 149 13.3.2 Subtraction... 150 13.3.3 Multiplication... 150 13.4 32-bit Arithmetic Functions... 151 13.4.1 Addition... 151 13.4.2 Subtraction... 151 13.4.3 Multiplication... 152 W7100A Datasheet v1.2.3 5

List of Figures Figure 1.1 W7100A Block Diagram... 12 Figure 1.2 Accumulator A Register... 12 Figure 1.3 B Register... 13 Figure 1.4 Program Status Word Register... 13 Figure 1.5 PSW Register... 13 Figure 1.6 TCPIPCore Block Diagram... 14 Figure 1.7 W7100A Pin Layout... 16 Figure 1.8 W7100A QFN 64 Pin Layout... 17 Figure 1.9 Power Design... 23 Figure 2.1 Code / Data Memory Connections... 25 (Example ICs : MAX811, MIC811, DS1811)... 25 Figure 2.2. Boot Sequence Flowchart... 26 Figure 2.3 APP Entry Process... 27 Figure 2.4 Changing the code memory Status at RB = 0... 27 Figure 2.5 Data Memory Map... 28 Figure 2.6 Standard 8051 External Pin Access Mode (EM[2:0] = 001 )... 29 Figure 2.7 Standard 8051 External Pin Access Mode (EM[2:0] = 011 )... 30 Figure 2.8 Direct 8051 External Pin Access Mode (EM[2:0] = 101 )... 30 Figure 2.9 Direct 8051 External Pin Access Mode (EM[2:0] = 111 )... 31 Figure 2.10 Internal Memory Map... 31 Figure 2.11 SFR Memory Map... 32 Figure 2.12 PWE bit of PCON Register... 32 Figure 2.13 Code memory Wait States Register... 33 Figure 2.14 Waveform for code memory Synchronous Read Cycle with Minimal Wait States (WTST = 4 )... 33 Figure 2.15 Waveform for code memory Synchronous Write Cycle with Minimal Wait States(WTST = 4 )... 34 Figure 2.16 Data Pointer Extended Register... 34 Figure 2.17 Data Pointer Extended Register... 34 Figure 2.18 MOVX @RI Extended Register... 34 Figure 2.19 Data Pointer Register DPTR0... 35 Figure 2.20 Data Pointer 1 Register DPTR1... 35 Figure 2.21 Data Pointer Select Register... 35 Figure 2.22 Clock Control Register STRETCH bits... 36 Figure 2.23 Internal Memory Wait States Register... 37 Figure 2.24 Address Latch Enable Control register... 38 W7100A Datasheet v1.2.3 6

Figure 2.25 First Byte of Internal Memory Wait States Register... 38 Figure 2.26 Second Byte of Internal Memory Wait States Register... 38 Figure 2.27 Stack Pointer Register... 38 Figure 2.28 PHY Status Register... 39 Figure 2.29 Internal PHY Configuration Register... 39 Figure 2.30 W7100A Configuration Register... 40 Figure 2.31 Core clock count register... 40 Figure 2.32 Core clock count register... 40 Figure 2.33 Core clock count register... 40 Figure 2.34 Core clock count register... 41 Figure 3.1 Interrupt Enable Register... 43 Figure 3.2 Interrupt Priority Register... 43 Figure 3.3 Timer 0, 1 Configuration Register... 43 Figure 3.4 UART Configuration Register... 44 Figure 3.5 Extended Interrupt Enable Register... 44 Figure 3.6 Extended Interrupt Priority Register... 44 Figure 3.7 Extended Interrupt Flag Register... 45 Figure 3.8 Watchdog Control Register... 45 Figure 4.1 Port0 Pull-down register... 46 Figure 4.2 Port0 Register... 46 Figure 4.3 Port1 Register... 46 Figure 4.4 Port2 Register... 47 Figure 4.5 Port3 Register... 47 Figure 4.6 Port0 Pull-down register... 48 Figure 4.7 Port1 Pull-down register... 48 Figure 4.8 Port2 Pull-down register... 48 Figure 4.9 Port3 Pull-down register... 48 Figure 4.10 Port0 Pull-up register... 48 Figure 4.11 Port1 Pull-up register... 49 Figure 4.12 Port2 Pull-up register... 49 Figure 4.13 Port3 Pull-up register... 49 Figure 5.1 Timer 0, 1 Control Mode Register... 50 Figure 5.2 Timer 0, 1 Configuration Register... 51 Figure 5.3 Interrupt Enable Register... 51 Figure 5.4 Interrupt Priority Register... 51 Figure 5.5 Timer 0, 1 Configuration Register... 52 Figure 5.6 Timer Counter0, Mode0: 13-Bit Timer/Counter... 52 Figure 5.7 Timer/Counter0, Mode1: 16-Bit Timer/Counter... 53 W7100A Datasheet v1.2.3 7

Figure 5.8 Timer/Counter0, Mode2: 8-Bit Timer/Counter with Auto-Reload... 53 Figure 5.9 Timer/Counter0, Mode3: Two 8-Bit Timers/Counters... 54 Figure 5.10 Timer/Counter1, Mode0: 13-Bit Timer/Counter... 55 Figure 5.11 Timer/Counter1, Mode1: 16-Bit Timers/Counters... 55 Figure 5.12 Timer/Counter1, Mode2: 8-Bit Timer/Counter with Auto-Reload... 56 Figure 5.13 Timer2 Configuration Register... 57 Figure 5.14 Timer/Counter2, 16-Bit Timer/Counter with Auto-Reload... 58 Figure 5.15 Interrupt Enable Register Timer2... 58 Figure 5.16 Interrupt Priority Register Timer2... 58 Figure 5.17 Timer2 Configuration Register TF2... 58 Figure 5.18 Timer/Counter2, 16-Bit Timer/Counter with Capture Mode... 59 Figure 5.19 Timer2 for Baud Rate Generator Mode... 60 Figure 6.1 UART Buffer Register... 61 Figure 6.2 UART Configuration Register... 61 Figure 6.3 UART Bits in Power Configuration Register... 62 Figure 6.4 UART Bits in Interrupt Enable Register... 63 Figure 6.5 UART Bits in Interrupt Priority Register... 63 Figure 6.6 UART Configuration Register... 63 Figure 6.7 Timing Diagram for UART Transmission Mode0 (clk = 88.4736 MHz)... 63 Figure 6.8 Timing Diagram for UART Transmission Mode1... 64 Figure 6.9 Timing Diagram for UART Transmission Mode2... 64 Figure 6.10 Timing Diagram for UART Transmission Mode3... 64 Figure 7.1 Watchdog Timer Structure... 66 Figure 7.2 Interrupt Enable Register... 66 Figure 7.3 Extended Interrupt Enable Register... 67 Figure 7.4 Extended interrupt Priority Register... 67 Figure 7.5 Watchdog Control Register... 67 Figure 7.6 Watchdog Control Register... 69 Figure 7.7 Clock Control register Watchdog bits... 70 Figure 8.1 TCPIPCore Memory Map... 72 Figure 8.2 SOCKET n Status transition... 99 Figure 8.3 Calculate Physical Address... 105 Figure 9.1 Allocation TX/RX memory of SOCKET n... 112 Figure 9.2 TCP SERVER & TCP CLIENT... 113 Figure 9.3 TCP SERVER Operation Flow... 114 Figure 9.4 TCP CLIENT Operation Flow... 120 Figure 9.5 UDP Operation Flow... 121 Figure 9.6 The received UDP data format... 123 W7100A Datasheet v1.2.3 8

Figure 9.7 IPRAW Operation Flow... 130 Figure 9.8 The received IPRAW data format... 131 Figure 9.9 MACRAW Operation Flow... 132 Figure 9.10 The received MACRAW data format... 133 W7100A Datasheet v1.2.3 9

List of Tables Table 2.1 External memory access mode... 29 Table 2.2 WTST Register Values... 33 Table 2.3 DPTR0, DPTR1 Operations... 35 Table 2.4 MD[2:0] Bit Values... 36 Table 2.5 Ram WTST Bit Values... 37 Table 2.6 TCPIPCore / Flash WTST Bit Values... 37 Table 3.1 External Interrupt Pin Description... 42 Table 3.2 W7100A Interrupt Summary... 42 Table 4.1 I/O Ports Pin Description... 46 Table 4.2 Read-Modify-Write Instructions... 47 Table 5.1 Timers 0, 1 Pin Description... 50 Table 5.2 Timers 0, 1 Mode... 50 Table 5.3 Timer0, 1 interrupts... 52 Table 5.4 Timer2 Pin Description... 56 Table 5.5 Timer2 Modes... 56 Table 5.6 Timer2 Interrupt... 59 Table 6.1 UART Pin Description... 61 Table 6.2 UART Modes... 62 Table 6.3 UART Baud Rates... 62 Table 6.4 UART Interrupt... 63 Table 6.5 Examples of Baud Rate Setting... 65 Table 7.1 Watchdog Interrupt... 67 Table 7.2 Summary for Watchdog Related Bits... 68 Table 7.3 Watchdog Bits and Actions... 69 Table 7.4 Watchdog Intervals... 70 Table 7.5 Timed Access Registers... 70 Table 9.1 Timer / Counter Mode... 109 Table 9.2 Baud rate... 109 Table 9.3 Mode of UART... 109 W7100A Datasheet v1.2.3 10

1 Overview 1.1 Introduction imcu W7100A는 8051호환마이크로컨트롤러, 64KB SRAM과 hardwired TCP/IP Core 를내장한고성능 one-chip 인터넷솔루션이다. Hardwired TCP/IP 코어는 Ethernet MAC과 PHY 를내장한 TCP/IP stack으로서시장에서그성능을증명해왔다. Hardwired TCP/IP stack에포함된 TCP, UDP, IPv4, ICMP, ARP, IGMP 그리고 PPPoE는수년간다양한응용분야에이용되어왔다. 1.2 W7100A Features Fully software compatible with industrial standard 8051 Pipelined architecture which enables execution of instructions 4~5 times faster than a standard 8051 10BaseT/100BaseTX Ethernet PHY embedded Power down mode supported for saving power consumption Hardwired TCP/IP Protocols: TCP, UDP, ICMP, IPv4 ARP, IGMP, PPPoE, Ethernet Auto Negotiation (Full-duplex and half duplex), Auto MDI/MDIX ADSL connection with PPPoE Protocol with PAP/CHAP Authentication mode support 8 independent sockets which are running simultaneously 32Kbytes Data buffer for the Network Network status LED outputs (TX, RX, Full/Half duplex, Collision, Link, and Speed) Not supports IP fragmentation 2 Data Pointers (DPTRs) for fast memory blocks processing Advanced INC & DEC modes Auto-switch of current DPTR 64KBytes Data Memory (RAM) 255Bytes data FLASH, 64KBytes Code Memory, 2KBytes Boot Code Memory Up to 16M bytes of external (off-chip) data memory Interrupt controller 2 priority levels 4 external interrupt sources 1 Watchdog interrupt Four 8-bit I/O Ports Three timers/counters Full-duplex UART Programmable Watchdog Timer DoCD compatible debugger High Product Endurance Minimum 100,000 program/erase cycles Minimum 10 years data retention W7100A Datasheet v1.2.3 11

1.3 W7100A Block Diagram & Features Figure 1.1 W7100A Block Diagram W7100A 내부블록다이어그램을그림1.1에나타내었다. ALU 산술, 논리연산을수행한다. Accumulator (ACC) 와 Program Status Word (PSW), B 레지스터, 그리고 arithmetic unit, logic unit, multiplier, divider등관련된 Logic을포함하고있다. SFR Special function register를제어한다. 표준, 사용자지정 register들과관련된 logic을포함하고있다. 사용자가정의한외부장비를 direct addressing mode 명령을이용해서빠르게 access (read, write, modify) 할수있다. 1.3.1 ALU (Arithmetic Logic Unit) W7100A는표준 8051 microcontroller와완벽하게호환된다. 그리고관련된모든명령을포함하고있다. W7100A는고속명령어수행을가능하게하는많은구조적장점을가지고있다. W7100A MCU의 ALU는광범위한 data 처리를하고이것은 8-bit ALU, ACC (0xE0) register, B (0xF0) register와 PSW (0xD0) register 로구성된다. ACC (0xE0) 7 6 5 4 3 2 1 0 Reset ACC.7 ACC.6 ACC.5 ACC.4 ACC.3 ACC.2 ACC.1 ACC.0 0x00 Figure 1.2 Accumulator A Register B register는곱셈연산과나눗셈연산중에사용된다. 다른경우에, B register는보통 SFR처럼동작한다. W7100A Datasheet v1.2.3 12

B (0xF0) 7 6 5 4 3 2 1 0 Reset B.7 B.6 B.5 B.4 B.3 B.2 B.1 B.0 0x00 Figure 1.3 B Register ALU는덧셈, 뺄셈, 곱셈, 나눗셈과같은산술연산과증가 (increment), 감소 (decrement), BCD-decimal-add-adjust, 비교 (compare) 연산등을수행한다. 논리 unit은다른연산들을 수행하기위해 AND, OR, Exclusive OR, complement, rotation을이용한다. Boolean 프로세서 는 set, clear, complement, jump-if-not-set, jump-if-set-and-clear 그리고 move to/from carry 와같은 bit연산을수행한다. PSW (0xD0) 7 6 5 4 3 2 1 0 Reset CY AC F0 RS1 RS0 OV F1 P 0x00 Figure 1.4 Program Status Word Register CY Carry flag AC Auxiliary carry F0 General purpose flag 0 Register bank select bits RS[1:0] Function Description RS[1:0] 00 -Bank 0, data address 0x00-0x07 01 -Bank 1, data address 0x08-0x0F 10 -Bank 2, data address 0x10-0x17 11 -Bank 3, data address 0x18-0x1F OV Overflow flag F1 General purpose flag 1 P Parity flag Figure 1.5 PSW Register PSW register는 MCU의현재상태를반영할수있는몇몇 bit들을포함하고있다. W7100A Datasheet v1.2.3 13

1.3.2 TCPIPCore Figure 1.6 TCPIPCore Block Diagram Ethernet PHY W7100A는 10BaseT/100BaseTX Ethernet PHY를내장하고있다. Half-duplex와 Full-duplex를모두지원하며 Auto-negotiation과 Auto-MDI/MDIX를지원한다. 또한 Link, TX, RX 상태, Collision, Speed와 Duplex 6개의네트워크 indicator LED 출력을지원한다. TCPIP Engine TCPIP 엔진은 WIZnet의네트워크프로토콜기술을기반으로하는 Hardwired logic이다. - 802.3 Ethernet MAC(Media Access Control) CSMA/CD (Carrier Sense Multiple Access with Collision Detect) 을지원하며프로토콜은 48-bit source/destination MAC address를기반으로하고있다. - PPPoE(Point-To-Point Protocol over Ethernet) 이프로토콜은 Ethernet을통해 PPP서비스를이용한다. Ethernet 프레임전송시에 Payload (PPP 프레임 ) 를 encapsulate하고, 수신시에 PPP 프레임을 de-capsulate한다. PPPoE는 PPPoE서버와 PAP/CHAP인증을이용해서 PPP 통신을한다. - ARP(Address Resolution Protocol) ARP는 IP address를이용한 MAC address resolution protocol이다. 이프로토콜은서로 MAC address를결정하기위해 ARP-reply와 ARP-request를교환한다. - IP (Internet Protocol) IP 계층 (layer) 에서동작하며데이터통신을지원한다. IP fragmentation 은지원하지 W7100A Datasheet v1.2.3 14

않기때문에 fragmented packet은수신할수없다. TCP나 UDP를제외한모든프로토콜 number를지원한다. TCP나 UDP의경우 hardwired embedded TCPIP stack을지원한다. - ICMP(Internet Control Message Protocol) ICMP는 information, unreachable destination 을지원하는프로토콜이다. Ping request ICMP packet이수신되면, Ping reply ICMP packet을송신한다. - IGMPv1/v2(Internet Group Management Protocol version 1/2) IGMP Join/Leave와같은 IGMP 메시지를처리하는프로토콜이다. IGMP는오직 UDP multicast mode에서만동작한다. Version 1 과 2 인 IGMP logic만지원한다. 새로운버전의 IGMP을사용하려면, 직접 IGMP를 IP 계층에구현해야만한다. - UDP(User Datagram Protocol) UDP계층에서데이터통신을지원하는프로토콜이다. 사용자는 unicast, multicast, broadcast와같은사용자데이터그램을지원한다. - TCP(Transmission Control Protocol) 이프로토콜은 TCP 계층에서동작하며데이터통신을지원한다. TCP 서버와클라이언트 mode를지원한다. W7100A Datasheet v1.2.3 15

W7100A Datasheet v1.2.3 16 1.4 Pin Description 1.4.1 Pin Layout Package type: LQFP 100 VCC3V3 P2.7/A15 P2.6/A14 P2.5/A13 P2.4/A12 P2.3/A11 P2.2/A10 P2.1/A9 GND P2.0/A8 P0.7/AD7 P0.6/AD6 P0.5/AD5 VCC3V3 P0.4/AD4 P0.3/AD3 P0.2/AD2 VCC1V8 P0.1/AD1 P0.0/AD0 1V8O VCC3V3 PM0 PM1 PM2 GND VCC1V8 XTLN1 XTLP1 GNDA VCC1A8 GNDA XTLP0 XTLN0 VCC1A8 RESETBG VCC3A3 TM3 TM2 TM1 TM0 BOOTEN GND GND nrst T0 T1 GATE0 GATE1 T2 T2EX RXD VCC1V8 TXD DCDCLK DCDDI DCDDO P1.0/A0 P1.1/A1 P1.2/A2 P1.3/A3 P1.4/A4 P1.5/A5 P1.6/A6 P1.7/A7 P3.0/A16 P3.1/A17 GND P3.2/A18 VCC3V3 P3.3/A19 P3.4/A20 P3.5/A21 P3.6/A22 P3.7/A23 VCC1V8 SPDLED 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 60 59 58 57 56 55 54 53 52 51 41 42 43 44 45 46 47 48 49 50 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 85 84 83 82 81 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 VCC3V3 nint0 nint1 nint2 nint3 FDXLED COLLED RXLED TXLED LINKLED GNDA RXIP RXIN VCC1A8 TXOP TXON GNDA VCC3A3 nrd nwr ALE PLOCK GNDA imcu W7100A Figure 1.7 W7100A Pin Layout

Package type: QFN 64 Figure 1.8 W7100A QFN 64 Pin Layout 1.4.2 Pin Description 아래테이블에 Pin 기능들을설명하였다. Tri state pin 이나내부신호는없다. Type I O IO Pu Pd Description 입력 8mA 출력 driving 전류입 / 출력 (Bidirectional) 4.7KΩ저항내부 pulled-up 85KΩ저항내부 pulled-down W7100A Datasheet v1.2.3 17

1.4.2.1 Configuration Pin name Pin number I/O Pu/Pd Description 100pin 64pin nrst 8 9 I Pu Global asynchronous reset, Active low TM3-0 1,2, 2,3, I Pd Must be connected to GND; value 0000 3,4 4,5 PM2-0 70, - I Pd PHY Mode 71, PM 72 2 1 0 Description 0 0 0 Normal Operation Mode, 모든기능과 Auto-negotiation기능활성화 0 0 1 100 BASE-TX FDX/HDX 기능과 Autonegotiation기능활성화 0 1 0 10 BASE-T FDX/HDX 기능과 Autonegotiation 기능활성화 0 1 1 Reserved 1 0 0 100 BASE-TX FDX 직접선택 1 0 1 100 BASE-TX HDX 직접선택 1 1 0 10 BASE-T FDX 직접선택 1 1 1 10 BASE-T HDX 직접선택 FDX : Full-Duplex, HDX : Half-Duplex BOOTEN 5 6 I Pd Boot Enable/Disable 0 사용자 Application 실행 Code FLASH 의시작주소 0x0000로 jump 1- Enable Boot Boot ROM의 Boot code실행 PLOCK 77 51 O - PLL Lock line, 내부 PLL의 locked 상태를알려줌 1.4.2.2 Timer Pin name Pin number I/O Pu/Pd Description 100pin 64pin Timer0, 1 Interface T0 9 - I Pu Timer0 외부 clock 입력 T1 10 - I Pu Timer1 외부 clock 입력 GATE0 11 - I Pd Timer0 gate 컨트롤 GATE1 12 - I Pd Timer1 gate 컨트롤 W7100A Datasheet v1.2.3 18

Timer2 Interface T2 13 - I Pu Timer2 외부 clock 입력 T2EX 14 - I Pu Timer2 Capture/Reload trigger 1.4.2.3 UART Pin name Pin number I/O Pu/Pd Description 100pin 64pin RXD 15 10 I - Serial 수신입력 TXD 17 12 O - Serial 송신출력 1.4.2.4 DoCD Compatible Debugger Pin name Pin number I/O Pu/Pd Description 100pin 64pin DCDCLK 18 13 O - DoCD clock DCDDI 19 14 I Pu DoCD 데이터입력 DCDDO 20 15 O DoCD 데이터출력 1.4.2.5 Interrupt / Clock Pin name Pin number I/O Pu/Pd Description 100pin 64pin nint0 22 17 I - 외부 interrupt0 nint1 23 - I Pu 외부 interrupt1 nint2 24 - I Pu 외부 interrupt2 nint3 25 - I Pu 외부 interrupt3 XTLN0 61 40 O - WIZnet Core용 clock output, 25MHz Crystal 혹은 Ceramic resonator 병렬연결, Oscillator를사용할경우 floating 함 XTLP0 62 41 I - WIZnet Core용 clock input, 25MHz Crystal 혹은 Ceramic resonator와병렬연결, Oscillator를사용할경우 1.8V OSC의 output과연결함 XTLN1 67 45 O - MCU Core용 clock output, 11.0592MHz Crystal 혹은 Ceramic resonator와병렬연결, Oscillator를사용할경우 floating 함 XTLP1 66 44 I - MCU Core용 clock input, 11.0592MHz Crystal 혹은 Ceramic resonator와병렬연결, Oscillator를사용할경우 1.8V OSC의 output과연결함 W7100A Datasheet v1.2.3 19

1.4.2.6 GPIO Pin name Pin number I/O Pu/Pd Description 100pin 64pin P0.0 81 52 IO - Port0 입 / 출력, 외부메모리 Data0, Addr0 P0.1 82 53 IO - Port0 입 / 출력, 외부메모리 Data1, Addr1 P0.2 84 55 IO - Port0 입 / 출력, 외부메모리 Data2, Addr2 P0.3 85 56 IO - Port0 입 / 출력, 외부메모리 Data3, Addr3 P0.4 86 57 IO - Port0 입 / 출력, 외부메모리 Data4, Addr4 P0.5 87 59 IO - Port0 입 / 출력, 외부메모리 Data5, Addr5 P0.6 89 60 IO - Port0 입 / 출력, 외부메모리 Data6, Addr6 P0.7 90 61 IO - Port0 입 / 출력, 외부메모리 Data7, Addr7 P1.0 26 18 IO - Port1 입 / 출력, 외부메모리 Addr0 P1.1 27 19 IO - Port1 입 / 출력, 외부메모리 Addr1 P1.2 28 20 IO - Port1 입 / 출력, 외부메모리 Addr2 P1.3 29 21 IO - Port1 입 / 출력, 외부메모리 Addr3 P1.4 30 22 IO - Port1 입 / 출력, 외부메모리 Addr4 P1.5 31 23 IO - Port1 입 / 출력, 외부메모리 Addr5 P1.6 32 24 IO - Port1 입 / 출력, 외부메모리 Addr6 P1.7 33 25 IO - Port1 입 / 출력, 외부메모리 Addr7 P2.0 91 62 IO - Port2 입 / 출력, 외부메모리 Addr8 P2.1 93 64 IO - Port2 입 / 출력, 외부메모리 Addr9 P2.2 94 1 IO - Port2 입 / 출력, 외부메모리 Addr10 P2.3 95 - IO - Port2 입 / 출력, 외부메모리 Addr11 P2.4 96 - IO - Port2 입 / 출력, 외부메모리 Addr12 P2.5 97 - IO - Port2 입 / 출력, 외부메모리 Addr13 P2.6 98 - IO - Port2 입 / 출력, 외부메모리 Addr14 P2.7 99 - IO - Port2 입 / 출력, 외부메모리 Addr15 P3.0 34 - IO - Port3 입 / 출력, 외부메모리 Addr16 P3.1 35 - IO - Port3 입 / 출력, 외부메모리 Addr17 P3.2 37 - IO - Port3 입 / 출력, 외부메모리 Addr18 P3.3 39 - IO - Port3 입 / 출력, 외부메모리 Addr19 P3.4 40 - IO - Port3 입 / 출력, 외부메모리 Addr20 P3.5 41 - IO - Port3 입 / 출력, 외부메모리 Addr21 P3.6 42 - IO - Port3 입 / 출력, 외부메모리 Addr22 P3.7 43 - IO - Port3 입 / 출력, 외부메모리 Addr23 주의 : GPIO의입 / 출력 driving 전압은 Px_PU/Px_PD SFR을설정하여제어한다. 참고 : 외부메모리를사용하는경우, GPIO0~3은외부메모리주소와데이터전송에이용됨. W7100A Datasheet v1.2.3 20

자세한사항은 2.3 External Data Memory Access 참고. 1.4.2.7 External Memory Interface Pin name Num I/O Type Description ALE 78 O Data memory address bus [7:0] latch enable nwr 79 OL External data memory write nrd 80 OL External data memory read 참고 : 외부메모리를 Standard 8051 Interface로사용시, ALE pin을제어하여 P0[7:0] 을 Data와 Address로번갈아사용 1.4.2.8 Media Interface Pin name Pin number I/O Pu/Pd Description 100pin 64pin TXON 52 32 O - TXON/TXOP 신호쌍, 전송시에 differential 데 TXOP 53 33 O - 이터는 TXON/TXOP 신호쌍을통해전송됨 RXIN 55 35 I - RXIN/RXIP 신호쌍, 수신시에 differential 데이 RXIP 56 36 I - 터는 RXIN/RXIP 신호쌍을통해수신됨 RESETBG 59 38 I - PHY Off-chip 저항, 12.3kΩ ±1% 저항을통해그라운드에연결됨, Reference schematic 을참고 최상의성능을위해서는, 1. RXIP/RXIN 신호쌍 (RX) 을가능한같은길이로만듦. 2. TXOP/TXON 신호쌍 (TX) 을가능한같은길이로만듦. 3. RXIP와 RXIN 신호를가능한가깝게위치시킴. 4. TXIP와 TXIN 신호를가능한가깝게위치시킴. 5. RX와 TX 신호쌍은 noisy 신호와멀리위치시킴. 6. TX/RX 신호쌍의간격을일정하게유지함. 자세한사항은 W5100 Layout Guide.pdf 를참고. 1.4.2.9 Network Indicator LED Pin name Pin number I/O Pu/Pd Description 100pin 64pin SPDLED 45 27 O - Link speed LED Low: 100Mbps High: 10Mbps FDXLED 46 - O - Full duplex LED Low: Full-duplex High: Half-duplex W7100A Datasheet v1.2.3 21

COLLED 47 - O - Collision LED Low: Collision detected (only half-duplex) RXLED 48 - O - Receive activity LED Low: Receive signal detected on RXIP/RXIN TXLED 49 - O - Transmit activity LED Low: Transmit signal detected on TXOP/TXON LINKLED 50 28 O - Link LED Low: Link (10/100M) is detected 1.4.2.10 Power Supply Signal Pin Pin number I/O Pu/ Description name 100pin 64pin Pd VCC3A3 58, 75 37, 49 Power - Analog 3.3V power supply 안정적인전원공급을위해 VCC3A3 과 GNDA사이에 10uF tantalum capacitor를연결 VCC3V3 21,38, 73,87, 100 16, 58 Power - Digital 3.3V power supply 각 VCC와 GND쌍에는 0.1uF decoupling capacitor 를연결, 1uH ferrite bead는 VCC3V3과 VCC3A3을구분하는데사용 VCC1A8 54,60, 34, 42 Power - Analog 1.8V power supply 64 VCC1V8 16,44, 68, 83 39,46, 54, 11 Power - Digital 1.8V power supply 각 VCC와 GND쌍에는 0.1uF decoupling capacitor 를연결 GNDA 51,57, 63,65, 76 31, 43, 50 Power - Analog ground PCB 레이아웃에 analog ground 면적은가능한크게디자인하는것이좋음 GND 6, 7, 36, 69, 92 7, 8, 26, 47, 63 Power - Digital ground PCB 레이아웃에 digital ground 면적은가능한크게디자인하는것이좋음 1V8O 74 48 Power - 1.8V regulated output voltage Core operation 전원과내부 regulator에의해 1.8V/150mA 전원을만듦 (VCC1A8, VCC1V8) 출력주파수를안정시키기위해 1V8O과 GND사이에 3.3uF tantalum capacitor를연결하고고주파 noise decoupling을위해 0.1uF capacitor를연결 함 W7100A Datasheet v1.2.3 22

VCC1V8에연결된 1V80에 1uH inductor 를연결하고 VCC1A8에연결함 <Notice> 1V80은 W7100A 전원으로만사용하고다른 device와는연결하지않음 Figure 1.9 Power Design W7100A Datasheet v1.2.3 23

1.5 64pin package description 1.5.1 Difference between 100 and 64pin package Difference 64 pin 100 pin Deleted pin T0, T1, GATE0, GATE1, T2, T2EX, nint1, nint2, nint3, FDXLED, COLLED, RXLED, TXLED, PM2, PM1, PM0, EXTALE, EXTDATAWR, EXTDATARD, - GPIO3[0:7], GPIO2[3:7] External memory X O PHY mode setting only use SFR use SFR and PM pins GPIO max 19pin max 32pin *Note: 64pin package의경우 PHY모드를 SFR을이용해서설정해야만한다. 그러므로칩초기화시 PHYCONF SFR의 MODE_EN bit를설정해서 MODE2~0 bit를이용해서 PHY mode를설정할수있도록한다. 그다음 MODE2~0의값을설정하고 PHY_RSTn bit를이용해서 PHY를 reset해야만칩이초기화되어정상동작한다. 그러므로 64pin package칩을사용할때는반드시아래코드가초기화루틴에포함되어있어야만한다. PHYCONF SFR에대한자세한내용은 section 2.5.10 New & Extended SFR 을참조하기바란다. PHYCONF = 0x08; // MODE_EN bit enable PHYCONF &= 0xF8; // MODE2 ~ 0 value is 0 (normal mode) PHYCONF = 0x20; // Set the PHY_RSTn bit (reset bit) Delay(); // Delay for reset timing (refer to the section 10 Reset Timing ) PHYCONF &= ~(0x20); // Clear the PHY_RSTn bit W7100A Datasheet v1.2.3 24

2 Memory W7100A의메모리는 Code Memory 와 Data Memory 의두가지타입으로나뉜다. Code, Data memory별로각각 memory lock을설정할수있다. Lock기능을설정하면외부에서메모리를 read하는것을방지할수있다. Memory lock이설정되면 W7100A Debugger를사용할수없기때문에주의해야한다. Lock기능사용에대한보다자세한내용은 WizISP Program Guide 문서를참조하기바란다. W7100A의 Memory 구성을 Figure 2.1에간략히나타내었다. Figure 2.1 Code / Data Memory Connections *Note: 전원공급장치의전압이충분치않은동안의시스템오작동을방지하기위하여외부전원공급장치의저전압검출기 (Low Voltage Detector) 사용을권장하며, 이를통해비휘발성메모리 (Non-volatile Memory) 와 SRAM, CPU의손상을예방할수있다. WIZnet 웹사이트의 imcu7100evb Schematic을참조하기바란다. (Example ICs : MAX811, MIC811, DS1811) W7100A Datasheet v1.2.3 25

2.1 Code Memory Code Memory 는 0x0000부터 0x07FF까지의주소를갖는 Boot ROM과 0x0000부터 0xFFFF까지의주소를갖는 Code FLASH로구성된다. 시스템이 reset된다음 Boot ROM의 code가실행되는데이때 BOOTEN핀에따라동작이달라진다. Figure 2.2는시스템부팅후에 BOOTEN핀에따른 BootROM코드의 flow를나타내고있다. BOOTEN = 1인경우 ISP 프로세스가실행되고, BOOTEN = 0인경우 APP Entry와사용자 Application코드가실행된다. ISP 프로세스는 WizISP program을이용해서 W7100A에사용자 code를 write할때사용한다. 그리고 APP Entry는사용자 Application code가실행될수있도록 memory map switching이일어날수있도록한다. 초기상태에서 W7100A는아래 Figure 2.3에서와같이 Boot ROM, APP Entry 그리고 FLASH영역의세가지메모리영역을갖는다. 하지만그림에서알수있듯이, Boot ROM과 APP Entry는 FLASH영역과서로겹치는부분이있다. 이둘은서로 0x0000 ~ 0x07FF와 0xFFF7 ~ 0xFFFF에서 FLASH영역과겹친다. 그래서 W7100A는초기화시 Boot ROM과 APP Entry영역은 code메모리로 FLASH영역은 data메모리로설정된다. Figure 2.2. Boot Sequence Flowchart FLASH영역을 data memory로설정했기때문에사용자 application code를 FLASH에 write할수있다. 하지만이상태에서는 FLASH를 code메모리로사용할수없다. FLASH를코드메모리로사용하기위해서는 memory map switching이필요하다. 이때문에사용자는부팅시 BOOTEN = 0으로선택하여 APP모드를선택한다. 그러면 Boot ROM 코드는 APP Entry로즉시 jump한다. 그후 APP Entry는 Boot ROM을 un-map하고 FLASH를 map시켜서 Code FLASH로사용할수있도록한다. code memory map switching이끝나면 APP Entry는 Code FLASH의시작주소인 0x0000으로 jump한다. 이과정은 Figure 2.3에나타내었다. W7100A Datasheet v1.2.3 26

Figure 2.3 APP Entry Process 하지만여전히 FLASH와 APP Entry는서로겹치는 address영역을가지므로, FLASH 64KB를전부사용하기위해서는 APP Entry를 un-map해야한다. 이를위해 startup code에서 WCONF(0xFF) 의 RB비트를 0 으로설정해줘야한다. 그러면 Figure 2.4와같이 APP Entry는 un-map된다. Figure 2.4 Changing the code memory Status at RB = 0 WCONF (0xFF) 7 6 5 4 3 2 1 0 Reset RB ISPEN EM2 EM1 EM0 RESERVED FB BE 0x00 Code FLASH가 0xFFF7이상의주소를가지게된다면, 반드시아래코드를 startup code에삽 입해야한다. 이방법을이용하면, W7100A는 system reset후에즉시 APP Entry address를 disable할것이다. ANL 0FFH, #07FH ; Clear Reboot flag W7100A Datasheet v1.2.3 27

BOOTEN 핀을 0 으로설정하고 Startup code 에서 WCONF register 의 RB 비트를 clear 하면내 부 Code FLASH memory 64KB 를모두 code memory 로사용할수있다. 2.1.1 Code Memory Wait States Code memory wait state는내부 WTST (0x92) register에의해설정되고 wait state의종류도 WTST register의값에의해결정된다. 자세한내용은 section 2.5.10 New & Extended SFR 을참고하기바란다. 2.2 Data Memory W7100A는내부에 64KB RAM, 64KB TCPIPCore, 255Byte Data FLASH를포함하고있다. Data FLASH는사용자의 IP, MAC, subnet mask, port번호등을저장하는데사용할수있다. 또한 W7100A는외부메모리를최대 16Mbyte까지확장할수있다. 이 memory들은 MOVX 명령으로만 access할수있다. Figure 2.5는 W7100A의 Data Memory map 을나타낸다. 2.2.1 Data Memory Wait States Figure 2.5 Data Memory Map Data memory wait state는 CKCON (0x8E) register에의해설정된다. CKCON register에설정된값에따라 wait state 수가결정된다. section 2.5.10 New & Extended SFR 을참조하기바란다. 2.3 External Data Memory Access 외부메모리를사용할때, 외부 address, data 핀의 access mode는크게 2가지방법이있다. 첫번째는 standard 8051에서사용하는방법으로 address line에 latch를사용하는방법이고, 두번째는 address line에 direct로모든라인을연결하는방법이다. 물론 address와 data 핀은모두 GPIO(General Purpose I/O) 의용도로사용이가능하다. 외부메모리 accessing speed 에대한정보는 section 10 Electrical specification 을참조하기바란다. W7100A Datasheet v1.2.3 28

아래테이블에 EM[2:0] 설정에따른 external data memory access mode들을정리하였다. Table 2.1 External memory access mode Mode EM[2:0] P0[7:0] P1[7:0] P2[7:0] P3[7:0] Standard 1 001 Addr[7:0]/Data[7:0] GPIO Addr[15:8] GPIO Standard 2 011 Addr[7:0]/Data[7:0] GPIO Addr[15:8] Addr[23:16] Direct 1 101 Data[7:0] Addr[7:0] Addr[15:8] GPIO Direct 2 111 Data[7:0] Addr[7:0] Addr[15:8] Addr[23:16] 2.3.1 Standard 8051 Interface 이방법은일반적인 8051의외부인터페이스와동일하다. Port0의 address와 data신호를구분하기위해 ALE (Address Latch Enable) pin을이용하여 latch enable 신호를제어한다. ALE신호가유지되는시간은 ALECON register를통해제어할수있으며, 보다자세한내용은 section 2.5.10 New & Extended SFR 을참조하기바란다. SFR register인 WCONF(0xFF) 에위치한 EM[2:0](External Memory Mode) 의 setting에따라접근할수있는 address의범위가두가지로나뉜다. 먼저 EM[2:0] 을 001 로 setting하게되면 port0을 address/data bus로사용하고, port2를상위 address(addr[15:8]) 로사용하므로총 16-bit address를사용하게된다. Address/data line으로사용되지않는 port1, port3은 GPIO로사용된다. Note : Standard 8051 interface를이용한외부메모리인터페이스는 WR / RD 신호 enable 전에 ALE 신호가발생되어야하나, 현재 WR/RD 신호가 enable 된이후에 ALE 신호가발생하는 Erratum이있다. 때문에 WR/RD를 ALE와 OR하여외부메모리의 nwr, noe로연결하면문제가해결된다. 더자세한내용은 W7100A Errata sheet - Erratum3 을참조하라구성은아래의그림과같다. D[7:0] P0[7:0] W7100A AD[7:0] Latch A[15:0] External Device nwe ALE noe WCONF (0xFF) P1[7:0] EM[2:0]=001 P2[7:0] GPIO A[15:8] P3[7:0] GPIO nwr nrd ALE OR OR Figure 2.6 Standard 8051 External Pin Access Mode (EM[2:0] = 001 ) W7100A Datasheet v1.2.3 29

다음으로 EM[2:0] 을 011 로설정하게되면 port0은 address/data bus로사용하게되고, port2는상위 address(addr[15:0]) 로사용된다. 그리고 port3을최상위 address(addr[23:16]) 로사용할수있어 address의범위가 24-bit로늘어난다. 마지막으로 port1은 GPIO로사용이가능하다. 자세한구성은아래의블록도와같다. D[7:0] P0[7:0] W7100A AD[7:0] Latch A[23:0] External Device nwe ALE noe WCONF (0xFF) P1[7:0] EM[2:0]=011 P2[7:0] GPIO A[15:8] P3[7:0] nwr nrd A[23:16] ALE OR OR Figure 2.7 Standard 8051 External Pin Access Mode (EM[2:0] = 011 ) 2.3.2 Direct Interface 이방법은 standard 8051의외부연결방법과는다르게 address와 data 라인을직접연결하여사용하는것이다. 먼저 EM[2:0] 을 101 로 setting하게되면, port0을 data line (data[7:0]) 으로사용하게되며, port1을하위 address(addr[7:0]) 으로사용하고, port2를상위 address(addr[15:8]) 로사용하게된다. 그리고남아있는 port3은 GPIO로사용이가능하다. 이방법을사용하게되면 latch 없이 address/data 라인의연결이가능하다. 자세한구성은아래의블록도와같다. P0[7:0] D[7:0] W7100A P1[7:0] A[7:0] A[15:0] External Device WCONF (0xFF) EM[2:0]=101 P2[7:0] A[15:8] P3[7:0] GPIO Figure 2.8 Direct 8051 External Pin Access Mode (EM[2:0] = 101 ) W7100A Datasheet v1.2.3 30

다음으로 EM[2:0] 을 111 로 setting 하게되면, port0, port1, port2 의구성은위의구성과 같고, port3 을최상위 address(addr[23:16]) 로사용할수있다. 자세한구성은아래의블록도 와같다. P0[7:0] D[7:0] W7100A P1[7:0] A[7:0] A[23:0] External Device WCONF (0xFF) P2[7:0] EM[2:0]=111 A[15:8] A[23:16] P3[7:0] Figure 2.9 Direct 8051 External Pin Access Mode (EM[2:0] = 111 ) 2.4 Internal Data Memory and SFR 아래그림은내부 memory 와 Special Function Register (SFR) map 을보여준다. Figure 2.10 Internal Memory Map W7100A의내부 RAM은 0x00 ~ 0x1F까지 8개의 register들로구성된 4개의 register bank들을포함하고있고, 0x20부터 128bits (16bytes) 의 bit-addressable 부분과 208bytes의 scratchpad 부분으로구성되어있다. Indirect addressing mode로 0x80부터 0xFF까지 addressing하면, 최상위부터 128 Bytes 는내부 memory로 accessing된다. 하지만 direct addressing mode로 0x80부터 0xFF까지 addressing하면이부분은 SFR memory로 accessing된다. W7100A Datasheet v1.2.3 31

Figure 2.11 SFR Memory Map New SFR New additional SFR Extended SFR Standard 8051에서확장된 SFR Standard Standard 8051 SFR Figure 2.11의표에서왼쪽행 0혹은 8로끝나는 SFR은 bit addressable register이다. 2.5 SFR definition 이 section 에서는 W7100A 의 SFR 과그기능들에대해설명한다. 더자세한사항은 section 2.5.11 Peripheral SFR 을참고하기바란다. 2.5.1 Program Code Memory Write Enable Bit PCON register 내부에 Program Write Enable (PWE) bit는 MOVX 명령이수행되는동안 Program Write signal을제어한다. PWE bit를 1 로설정하면 MOVX @DPTR, A 명령은 accumulator register의데이터를 DPTR (active DPH:DPL) register를통해설정된 code memory address에 write한다. MOVX @Rx, A 명령은 accumulator register의데이터를 P2 (bits 15:8) register와 RX(bits 7:0) register를통해설정된 code memory address에 write한다. PCON (0x87) 7 6 5 4 3 2 1 0 Reset SMOD0 - - PWE - 0 0 0 0x00 Figure 2.12 PWE bit of PCON Register Note: 1. PCON.2 ~ PCON.0 bit는 reserved이며반드시 0으로설정해야한다. W7100A Datasheet v1.2.3 32

2.5.2 Program Code Memory Wait States Register Wait state register는 code memory access time을설정하는데쓰인다. WTST (0x92) 7 6 5 4 3 2 1 0 Reset - - - - - WTST.2 WTST.1 WTST.0 0x07 Figure 2.13 Code memory Wait States Register Note: 1. 위 bit들은오직 program fetch나 MOVC명령에영향을준다. Code memory write는 MOVX명령에의해수행되므로, CKCON register는 CODE-W R pulse width를제어한다. 2. Read cycle은최소 4 clock에서최대 8 clock까지주기를갖는다. Table 2.2 WTST Register Values WTST[2:0] Access Time [clk] 7 8 6 7 5 6 4 5 3 Not Used 2 Not Used 1 Not Used 0 Not Used 명령어 fetching 을수행하는도중에는, code memory 는오직 MOVC 명령에의해서만 access 될 수있다. Code memory 는최소 4 wait states 로 read 할수있다. 그 Timing 다이어그램을아 래그림에나타내었다. Figure 2.14 Waveform for code memory Synchronous Read Cycle with Minimal Wait States (WTST = 4 ) Note: 1. clk 시스템 clock 주파수 (88.4736 MHz) 2. ADDRESS 실제수정된 program byte 의주소 3. CODE_RD Code memory의 read신호 4. CODE Data write to the actual modified program byte W7100A Datasheet v1.2.3 33

Code memory 는최소 4 wait states 의 MOVX 명령으로 write 할수있다. W7100A core 는 wait state 를통해고속과저속 memory 모두에서잘동작할수있다. 아래그림은 Timing diagram 을보여준다. Figure 2.15 Waveform for code memory Synchronous Write Cycle with Minimal Wait State s(wtst = 4 ) Note: 1. clk 시스템 clock 주파수 (88.4736 MHz) 2. ADDRESS 실제수정된 program byte 의주소 3. CODE Data write to the actual modified program byte 4. CODE_WR Code memory의 write신호 5. PRG Code memory 상태 2.5.3 Data Pointer Extended Registers Data pointer extended register DPX0, DPX1, MXAX는 64KB이상의데이터를 accessing할때 최상위 memory address값을갖는다. Reset후 DPX0, DPX1, MXAX는초기값으로 0x00을갖는다. DPX0 (0x93) 7 6 5 4 3 2 1 0 Reset DPXP.7 DPX.6 DPX.5 DPX.4 DPX.3 DPX.2 DPX.1 DPX.0 0x00 Figure 2.16 Data Pointer Extended Register DPX1 (0x95) 7 6 5 4 3 2 1 0 Reset DPX1.7 DPX1.6 DPX1.5 DPX1.4 DPX1.3 DPX1.2 DPX1.1 DPX1.0 0x00 Figure 2.17 Data Pointer Extended Register MXAX (0xEA) 7 6 5 4 3 2 1 0 Reset MXAM.7 MXAX.6 MXAX.5 MXAX.4 MXAX.3 MXAX.2 MXAX.1 MXAX.0 0x00 Figure 2.18 MOVX @RI Extended Register MOVX 명령이 DPTR0/DPTR1 register 를이용해서수행되면, 최상위 address A[23:16] 는항상 DPX0(0x93)/DPX1(0x95) 에설정된값을갖는다. MOVX 명령이 R0 혹은 R1 register 를이용해서 W7100A Datasheet v1.2.3 34

수행되면, 최상위 address A[23:16] 는 MXAX(0xEA) 의값을갖고 A[15:8] 은 P2(0xA0) 의값을갖 는다. 2.5.4 Data Pointer Registers Dual data pointer register들은 data block copy속도를향상시키기위해만들어졌다. DPTR0 와 DPTR1은 4개의 SFR영역에위치하고있다. Active DPTR register는 SEL bit (0x86.0) 를통해선택할수있다. 만약 SEL bit가 0 이면, DPTR0 (0x83:0x82) 가선택된다. 반대로 SEL bit가 1 이면 DPTR1 (0x85:0x04) 가선택된다. DPTR0(0x83:0x82) DPH0(0x83) DPL0(0x82) Reset 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 0x0000 Figure 2.19 Data Pointer Register DPTR0 DPTR1(0x85:0x84) DPH1(0x85) DPL1(0x84) Reset 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 0x0000 Figure 2.20 Data Pointer 1 Register DPTR1 DPS (0x86) 7 6 5 4 3 2 1 0 Reset ID1 ID0 TSL - - - - SEL 0x00 Figure 2.21 Data Pointer Select Register Note: TSL - Toggle select enable. When TSL is set, this bit toggles the SEL bit by execu ting the following instructions. INC DPTR MOV DPTR, #data16 MOVC A, @A + DPTR MOVX @DPTR, A MOVX A, @DPTR When TSL = 0, DPTR related instructions will not affect the state of the SEL bit. Unimplemented bit - Read as 0 or 1. Table 2.3 DPTR0, DPTR1 Operations ID1 ID0 SEL = 0 SEL = 1 0 0 INC DPTR INC DPTR1 0 1 DEC DPTR INC DPTR1 W7100A Datasheet v1.2.3 35

1 0 INC DPTR DEC DPTR1 1 1 DEC DPTR DEC DPTR1 선택된 data pointer register는다음명령을수행하는데사용한다. MOVX @DPTR, A MOVX A, @DPTR MOVC A, @A + DPTR JMP @A + DPTR INC DPTR MOV DPTR, #data16 2.5.5 Clock Control Register Clock control register CKCON (0x8E) 은 data memory read/write signal pulse width정보를가 지고있는 MD[2:0] bit를포함하고있다. CKCON (0x8E) 7 6 5 4 3 2 1 0 Reset WD1 WD0 - - - MD2 MD1 MD0 0x07 Figure 2.22 Clock Control Register STRETCH bits Data memory read/write signal은 MOVX명령을수행하는동안활성화된다. MD[2:0] bit는 slow RAM, LCD display와같은 I/O device들의통신을제어하는데쓰인다. Reset후 MD[2:0] bit 는 0x07의초기값을갖는데, 이값은느린 device들이제대로동작할수있는값이다. 사용자는 MD[2:0] 값을 I/O device의속도에따라그값을변경할수있다. 또한 program이실행중이라도상관없이 MD[2:0] 의값을변경할수있다. Table 2.4 MD[2:0] Bit Values MD[2:0] Pulse Width[clock] 7 8 2 3 1 Not Used 0 Not Used Read/write pulse width 는최소 3 clock 에서최대 8 clock 까지설정할수있다. W7100A Datasheet v1.2.3 36

2.5.6 Internal Memory Wait States Register Internal Memory Wait States Register INTWTST(0x9C) 는내부에있는 64KB Ram, TCPIPCore, 255Byte Internal Flash 의 access time 을설정하는데쓰인다. INTWTST (0x9C) 7 6 5 4 3 2 1 0 Reset Ram WTST TCPIPCore WTST Flash WTST 0xFF Figure 2.23 Internal Memory Wait States Register - Ram WTST : 내부의 64Kbytes Ram의 access time을설정하는데사용되며, 2bit로구성되어, 0~3의값으로설정될수있다. - TCPIPCore WTST : TCPIPCore의 access time을설정하는데사용되며, 3bit로구성되어, 0~7의값으로설정될수있다. - Flash WTST : 내부의 64KBytes / 255Bytes Flash의 access time을설정하는데사용되며, 3bit로구성되어, 0~7의값으로설정될수있다. Internal ram WTST 는아래의표와같이 access time 이설정된다. Table 2.5 Ram WTST Bit Values WTST Pulse Width[clock] 3 5 2 4 1 3 0 2 TCPIPCore, Internal flash WTST 는아래의표와같이 access time 이설정된다. Table 2.6 TCPIPCore / Flash WTST Bit Values WTST Pulse Width[clock] 7 10 6 9 5 8 4 7 3 6 2 5 1 4 0 3 W7100A Datasheet v1.2.3 37

2.5.7 Address Latch Enable Register ALECON이 0 으로설정되면, ALE가 1 clock후에바로 1 에서 0 으로천이된다. ALECON이 n 으로설정되면 ALE 신호는 1+n clock을유지한다음 0 으로천이된다. ALE maintain duration = ALECON + 1 clock ALECON의초기값은 0xFF이다. 따라서사용자는외부장치의속도에맞춰 ALECON의값을설정후사용하면된다. ALECON (0x9F) 7 6 5 4 3 2 1 0 Reset AC.7 AC.6 AC.5 AC.4 AC.3 AC.2 AC.1 AC.0 0xFF Figure 2.24 Address Latch Enable Control register 2.5.8 External Memory Wait States Register EXTWTST(0x9D, 0x9E) 는외부메모리 Access속도를제어하기위해사용한다. 총 16bit를이 용해서 0 ~ 65535까지값을설정할수있다. EXTWTST0 (0x9D) 7 6 5 4 3 2 1 0 Reset EW.7 EW.6 EW.5 EW.4 EW.3 EW.2 EW.1 EW.0 0xFF Figure 2.25 First Byte of Internal Memory Wait States Register EXTWTST1 (0x9E) 7 6 5 4 3 2 1 0 Reset EW.15 EW.14 EW.13 EW.12 EW.11 EW.10 EW.9 EW.8 0xFF Figure 2.26 Second Byte of Internal Memory Wait States Register 2.5.9 Stack Pointer W7100A는내부 RAM공간에 8-bit stack pointer SP(0x81) 를가지고있다. SP (0x81) 7 6 5 4 3 2 1 0 Reset SP.7 SP.6 SP.5 SP.4 SP.3 SP.2 SP.1 SP.0 0x07 Figure 2.27 Stack Pointer Register 이 pointer는 data가저장되기전 PUSH나 CALL명령에의해증가하고, 반대로데이터가 pop되기전 POP, RET, RETI명령에의해감소한다. 즉, stack pointer는항상마지막유효 stack byte를가리키고있다. 2.5.10 New & Extended SFR PHY_IND(0xEF) : PHY 의현재상태를알려주는 SFR 이다. W7100A Datasheet v1.2.3 38

PHY_IND (0xEF) 7 6 5 4 3 2 1 0 Reset FDX SPD LINK 0x00 Figure 2.28 PHY Status Register Note: FDX : 0 Full duplex / 1 Half duplex SPD : 0 100Mbps / 1 10Mbps LINK : 0 The link is down / 1 The link is up ISPID(0xF1): ID Register for ISP. ISPADDR16(0xF2): 16bit Address Register for ISP ISPDATA(0xF4): Data Register for ISP. CKCBK(0xF5): CKCON Backup Register. DPX0BK(0xF6): DPX0 Backup Register. DPX1BK(0xF7): DPX1 Backup Register. DPSBK(0xF9): DPX Backup Register. PHYCONF (0xFE): W7100A PHY operation mode, reset, power down configuration register PHYCONF (0xFE) 7 6 5 4 3 2 1 0 Reset - - PHY_RSTn PHY_PWDN MODE_EN MODE2 MODE1 MODE0 0x00 Figure 2.29 Internal PHY Configuration Register Note: PHY_RSTn: W7100A의내부 Ethernet PHY를 reset한다. 이 bit를 1로 set하고 reset t iming을참고하여다시 0으로 clear한다. Reset timing에대한보다자세한내용은 section 10 Electrical Specification 을참조하기바란다. PHY_PWDN: W7100A power down 모드를설정한다. 1일때 power down 모드로동작하고 0일때 normal모드로동작한다. MODE_EN: 1이면 MODE2 ~ 0 bit를사용하여 W7100A의동작모드를설정한다. 64pi n package에서는반드시이 bit를설정한다음 MODE2 ~ 0bit를설정하여동작모드를설정해야만한다. MODE2 ~ 0: PHY모드설정 bit, 설정값들에대한정보는 1.4.2 Pin Description 의 PM2 ~ 0핀설정값과동일하다. - : Reserved, must be set to 0 ex> usage of mode selection using MODE2 ~ 0 PHYCONF = 0x08; // MODE_EN bit enable PHYCONF &= 0xF8; // MODE2 ~ 0 value is 0 (normal mode; auto configuration mode) PHYCONF = 0x20; // Set the PHY_RSTn bit (reset bit) W7100A Datasheet v1.2.3 39

Delay(); //Delay for reset timing(refer to the section 10 Electrical Specification ) PHYCONF &= ~(0x20); // Clear the PHY_RSTn bit WCONF(0xFF): W7100A configuration register WCONF (0xFF) 7 6 5 4 3 2 1 0 Reset RB ISPEN EM2 EM1 EM0 Reserved FB BE 0x00 Figure 2.30 W7100A Configuration Register Note: RB : 1 ISP 동작이끝나면 (APP Entry(0xFFF7 ~ 0xFFFF) RD/WR Enable) 재부팅함 0 - ISP동작이끝나도재부팅하지않음 ISPEN : 0 - ISP enable, 1 ISP disable EM[2:0] : 외부메모리모드설정, section 2.3 External Data Memory Access 참조 FB : FLASH Busy Flag for ISP. Read only. BE : Boot Enable (1 Boot Running / 0 Apps Running). Read only. CLKCNT0(0xDC): W7100A core clock count register bit0 ~ 7. CLK_CNT0 (0xDC) 7 6 5 4 3 2 1 0 Reset Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 0x00 Figure 2.31 Core clock count register Note: CLK_CNT는 32bit 값으로매 core clock마다증가한다. 이 SFR은 core clock을 count 하는데사용하거나시간을재는데사용할수있다. ex> 1 second = about 88000000 clock count (icore clock is about 88MHz) CLKCNT0(0xDD): W7100A core clock count register bit8 ~ 15. CLK_CNT1 (0xDD) 7 6 5 4 3 2 1 0 Reset Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 0x00 Figure 2.32 Core clock count register CLKCNT0(0xDE): W7100A core clock count register bit16 ~ 23. CLK_CNT2 (0xDE) 7 6 5 4 3 2 1 0 Reset Bit23 Bit22 Bit21 Bit20 Bit19 Bit18 Bit17 Bit16 0x00 Figure 2.33 Core clock count register W7100A Datasheet v1.2.3 40

CLKCNT0(0xDF): W7100A core clock count register bit24 ~ 31. CLK_CNT3 (0xDF) 7 6 5 4 3 2 1 0 Reset Bit31 Bit30 Bit29 Bit28 Bit27 Bit26 Bit25 Bit24 0x00 Figure 2.34 Core clock count register 2.5.11 Peripheral Registers P0, P1, P2, P3 : Port register. 자세한사항은 section 4 I/O Ports 를참고하기바란다. TCON(0x88) : Timer 0, 1 configuration register. 자세한사항은 section 5.1 Timer 0, 1 을참고하기바란다. TMOD(0x89) : Timer 0, 1 control mode register. 자세한사항은 section 5.1 Timer 0, 1 을참고하기바란다. TH0(0x8C), TL0(0x8A) : Timer 0의 Counter register. 자세한사항은 section 5.1 Timer 0, 1 을참고하기바란다. TH1(0x8D), TL1(0x8B) : Timer 1의 Counter register. 자세한사항은 section 5.1 Timer 0, 1 을참고하기바란다. SCON(0x98) : UART Configuration Register. 자세한사항은 section 6 UART 를참고하기바란다. SBUF(0x99) : UART Buffer Register. 자세한사항은 section 6 UART 를참고하기바란다. IE(0xA8) : UART Bits in Interrupt Enable Register. 자세한사항은 section 6 UART 를참고하기바란다. IP(0xB8) : UART Bits in Interrupt Priority Register. 자세한사항은 section 6 UART 를참고하기바란다. TA(0xC7) : Timed Access Register. 자세한사항은 section 7 Watchdog Timer 를참고하기바란다. T2CON(0xC8) : Timer 2 Configuration Register. 자세한사항은 section 5.2 Timer 2 를참고하기바란다. RLDH(0xCB), RLDL(0xCA) : Capture Registers of Timer 2. 자세한사항은 section 5.2 Timer 2 를참고하기바란다. TH2(0xCD), TL2(0xCC) : Counter Register of Timer 2. 자세한사항은 section 5.2 Timer 2 를참고하기바란다. PSW(0xD0) : Program Status Word Register. 자세한사항은 section 1.3.1. ALU 를참고하기바란다. WDCON(0xD8) : Watchdog Control Register. 자세한사항은 section 7 Watchdog Timer 를참고하기바란다. W7100A Datasheet v1.2.3 41

3 Interrupt Interrupt pin 기능들을아래테이블에정리하였다. 모든 pin들은단방향성 (unidirectional) 이고, tri-state 신호는없다. Table 3.1 External Interrupt Pin Description Pin Active Type Pu/Pd Description nint0/fa6 Low/Falling I - External interrupt 0 nint1/fa7 Low/Falling I - External interrupt 1 nint2/fa8 Falling I - External interrupt 2 nint3/fa9 Falling I - External interrupt 3 nint4 - Reserved TCPIPCore (nint5) Falling I - Interrupt Request Signal for TCPIPCore (internally connected) W7100A core는두 level의 interrupt priority control을갖고있다. 각각의외부 interrupt는 IP (0xB8) 와 EIP(0xF8) register를설정하거나 clear함으로써 high혹은 low level priority group 으로설정된다. 외부 interrupt pin들은 falling edge signal에의해 activate된다. Interrupt request들은 system clock의 rising edge에서 sampling한다. Table 3.2 W7100A Interrupt Summary Interrupt Function Active Flag Reset Vector Interrupt Natural Flag Level/Edge Number Priority IE0 Device pin INT0 Low/Falling Hardware 0x03 0 1 TF0 Internal, Timer0 - Hardware 0x0B 1 2 IE1 Device pin INT1 Low/Falling Hardware 0x13 2 3 TF1 Internal, Timer1 - Hardware 0x1B 3 4 TI0 & RI0 Internal, UART - Software 0x23 4 5 TF2 Internal, Timer2 - Software 0x2B 5 6 INT2F Device Pin INT2 Falling Software 0x43 8 7 INT3F Device Pin INT3 Falling Software 0x4B 9 8 INT4F INT5F TCPIPCore WDIF Reserved Interrupt for TCPIPCore Internal, WATCHDOG Falling Software 0x5B 11 10 - Software 0x63 12 11 각 interrupt 벡터는 IE (0xA8) 과 EIE (0xE8) register 에서해당 bit 를설정함으로써각각 enable 혹은 disable 될수있다. IE register 는 global interrupt system disable(0)/enable(1) bit W7100A Datasheet v1.2.3 42

EA 를포함하고있다. IE (0xA8) 7 6 5 4 3 2 1 0 Reset EA - ET2 ES ET1 EX1 ET0 EX0 0x00 Figure 3.1 Interrupt Enable Register Note: EA - Enable global interrupt EX0 - Enable INT0 interrupt ET0 - Enable Timer0 interrupt EX1 - Enable INT1 interrupt ET1 - Enable Timer1 interrupt ES Enable UART interrupt ET2 - Enable Timer2 interrupt Interrupt를 enable하는위의모든 bit들은 software로 clear혹은 set할수있고, hardware로도같은결과를얻을수있다. 즉, interrupt들은 software를통해생성될수있고취소될수도있다 ( 단, IE0과 IE1 flag는제외 ). 만약외부 interrupt0, interrupt1이 level-activated로 program되어있다면, IE0과 IE1은각각외부 source pin nint0/fa6과 nint1/fa7을통해제어할수있다. IP (0xB8) 7 6 5 4 3 2 1 0 Reset - - PT2 PS PT1 PX1 PT0 PX0 0x00 Figure 3.2 Interrupt Priority Register Note: PX0 - INT0 priority level control (high level at 1) PT0 - Timer0 priority level control (high level at 1) PX1 - INT1 priority level control (high level at 1) PT1 - Timer1 priority level control (high level at 1) PS - UART priority level control (high level at 1) PT2 Timer2 priority level control (high level at 1) Unimplemented bit - Read as 0 or 1 TCON (0x88) 7 6 5 4 3 2 1 0 Reset TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 0x00 Figure 3.3 Timer 0, 1 Configuration Register Note: IT0 - INT0 level (at 0)/edge (at 1) sensitivity IT1 - INT1 level (at 0)/edge (at 1) sensitivity W7100A Datasheet v1.2.3 43

IE0 - INT0 interrupt flag는 processor가 interrupt routine을수행할때자동으로 clear된다. IE1 INT1 interrupt flag는 processor가 interrupt routine을수행할때자동으로 clear된다. TF0 - Timer 0 interrupt (overflow) flag는 processor가 interrupt routine을수행할때자동으로 clear된다. TF1 Timer 1 interrupt (overflow) flag는 processor가 interrupt routine을수행할때자동으로 clear된다. SCON (0x98) 7 6 5 4 3 2 1 0 Reset SM0 SM1 SM2 REN TB8 RB8 TI RI 0x00 Figure 3.4 UART Configuration Register Note: RI - UART receiver interrupt flag TI - UART transmitter interrupt flag EIE (0xE8) 7 6 5 4 3 2 1 0 Reset - - - EWDI EINT5 EINT4 EINT3 EINT2 0x00 Figure 3.5 Extended Interrupt Enable Register Note: EINT2 - Enable external INT2 Interrupt EINT3 - Enable external INT3 Interrupt EINT4 Must be 0, if use the EIE register EINT5 - Enable TCPIPCore Interrupt EWDI - Enable WATCHDOG Interrupt EIP (0xF8) 7 6 5 4 3 2 1 0 Reset - - - PWDI PINT5 PINT4 PINT3 PINT2 0x00 Figure 3.6 Extended Interrupt Priority Register Note: PINT2 - INT2 priority level control (high level at 1) PINT3 - INT3 priority level control (high level at 1) PINT4 Must be set to 0, if use the EIP register PINT5 - TCPIPCore Interrupt priority level control (high level at 1) PWDI - WATCHDOG priority level control (high level at 1) W7100A Datasheet v1.2.3 44

EIF (0x91) 7 6 5 4 3 2 1 0 Reset - - - - INT5F INT4F INT3F INT2F 0x00 Figure 3.7 Extended Interrupt Flag Register Note: INT2F - INT2 interrupt flag. Must be cleared by software INT3F INT3 interrupt flag. Must be cleared by software INT4F Must be set to 0. if use the EIF register INT5F - TCPIPCore Interrupt flag. Must be cleared by software WDCON (0xD8) 7 6 5 4 3 2 1 0 Reset - - - - WDIF WTRF EWT RWT 0x00 Figure 3.8 Watchdog Control Register Note: WDIF Watchdog interrupt flag. WDIF, Watchdog interrupt enable bit (EIE. 4). WDIF bit는반드시 interrupt service routine을빠져나오기전에 software로 clear해주어야한다. WDIF를 enable하기위해 software 를사용하면, Watchdog interrupt가발생한다. 즉, Enabled softwareset WDIF에의해 Watchdog interrupt가발생할수있다. Timed acces s register procedure를이용해서이 bit를수정할수있다. W7100A Datasheet v1.2.3 45

4 I/O Ports Figure 4.1 Port0 Pull-down register W7100A의 GPIO핀은 SFR설정에따라 Pull-up, Pull-down 그리고 Keep 세가지상태로설정할수있다. Keep상태는 Pull-up 레지스터와 Pull-down 레지스터를동시에 set할경우설정되며입출력에변화가없을경우이전상태값을유지하는특성이있다. I/O port pin기능들을아래테이블에나타내었다. Table 4.1 I/O Ports Pin Description Pin Active Type Pu/Pd Description P0[7:0] - IO - Port0 input / output P1[7:0] - IO - Port1 input / output P2[7:0] - IO - Port2 input / output P3[7:0] - IO - Port3 input / output P0 (0x80) 7 6 5 4 3 2 1 0 Reset P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 0xFF Figure 4.2 Port0 Register P1 (0x90) 7 6 5 4 3 2 1 0 Reset P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 0xFF Figure 4.3 Port1 Register W7100A Datasheet v1.2.3 46

P2 (0xA0) 7 6 5 4 3 2 1 0 Reset P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 0xFF Figure 4.4 Port2 Register P3 (0xB0) 7 6 5 4 3 2 1 0 Reset P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0 0xFF Figure 4.5 Port3 Register I/O port에서 Read와 write access는해당 SFR: P0 (0x80), P1 (0x90), P2 (0xA0), P3 (0xB0) 을 통해이루어진다. 몇몇 port-reading 명령어는다른 port pin read 동작이진행되는동안 data register로부터 read한다. Read-Modify-Write 명령어들은다음테이블처럼직접 data register들로전달된다. Table 4.2 Read-Modify-Write Instructions Instruction ANL ORL XRL JBC CPL INC, DEC DJNZ MOV Px.y, C CLR Px.y SETB Px.y Function Description Logic AND Logic OR Logic exclusive OR Jump if bit is set and cleared Complement bit Increment, decrement byte Decrement and jump if not zero Move carry bit to bit y of port x Clear bit y of port x Set bit y of port x 모든다른명령어들은 port pin들을통해각각따로 (exclusively) read 한다. 모든 port들은 GPIO (General Purpose Input Output) 로사용할수있다. 아래 Figure 4.5에 W7100A의 GPIO 를나타내었다. GPIO의 output driving voltage는 Px_PD, Px_PU SFR의설정값에따라 0V혹은 3.3V의값을갖거나이전값을유지한다. Px_PU Px_PD Status 0 0-0 1 Pull-down 1 0 Pull-up 1 1 Keep W7100A Datasheet v1.2.3 47

P0_PD(0xE3) : Port0 8핀의 Pull-down을설정하는 SFR이다. 해당비트가 1 로 set되면 Pull-down이설정된다. P0_PD (0xE3) 7 6 5 4 3 2 1 0 Reset Port0[7] Port0[6] Port0[5] Port0[4] Port0[3] Port0[2] Port0[1] Port0[0] 0x00 Figure 4.6 Port0 Pull-down register P1_PD(0xE4) : Port1 8핀의 Pull-down을설정하는 SFR이다. 해당비트가 1 로 set되면 Pull-down이설정된다. P1_PD (0xE4) 7 6 5 4 3 2 1 0 Reset Port1[7] Port1[6] Port1[5] Port1[4] Port1[3] Port1[2] Port1[1] Port1[0] 0x00 Figure 4.7 Port1 Pull-down register P2_PD(0xE5) : Port2 8핀의 Pull-down을설정하는 SFR이다. 해당비트가 1 로 set되면 Pull-down이설정된다. P2_PD (0xE5) 7 6 5 4 3 2 1 0 Reset Port2[7] Port2[6] Port2[5] Port2[4] Port2[3] Port2[2] Port2[1] Port2[0] 0x00 Figure 4.8 Port2 Pull-down register P3_PD(0xE6) : Port3 8핀의 Pull-down을설정하는 SFR이다. 해당비트가 1 로 set되면 Pull-down이설정된다. P3_PD (0xE6) 7 6 5 4 3 2 1 0 Reset Port3[7] Port3[6] Port3[5] Port3[4] Port3[3] Port3[2] Port3[1] Port3[0] 0x00 Figure 4.9 Port3 Pull-down register P0_PU(0xEB) : Port0 8핀의 Pull-up을설정하는 SFR이다. 해당비트가 1 로 set되면 Pullup이 설정된다. P0_PU (0xEB) 7 6 5 4 3 2 1 0 Reset Port0[7] Port0[6] Port0[5] Port0[4] Port0[3] Port0[2] Port0[1] Port0[0] 0x00 Figure 4.10 Port0 Pull-up register P1_PU(0xEC) : Port1 8 핀의 Pull-up 을설정하는 SFR 이다. 해당비트가 1 로 set 되면 Pullup 이설정된다. W7100A Datasheet v1.2.3 48

P1_PU (0xEC) 7 6 5 4 3 2 1 0 Reset Port1[7] Port1[6] Port1[5] Port1[4] Port1[3] Port1[2] Port1[1] Port1[0] 0x00 Figure 4.11 Port1 Pull-up register P2_PU(0xED) : Port2 8핀의 Pull-up을설정하는 SFR이다. 해당비트가 1 로 set되면 Pullup이 설정된다. P2_PU (0xED) 7 6 5 4 3 2 1 0 Reset Port2[7] Port2[6] Port2[5] Port2[4] Port2[3] Port2[2] Port2[1] Port2[0] 0x00 Figure 4.12 Port2 Pull-up register P3_PU(0xEE) : Port3 8핀의 Pull-up을설정하는 SFR이다. 해당비트가 1 로 set되면 Pull-up 이설정된다. P3_PU (0xEE) 7 6 5 4 3 2 1 0 Reset Port3[7] Port3[6] Port3[5] Port3[4] Port3[3] Port3[2] Port3[1] Port3[0] 0x00 Figure 4.13 Port3 Pull-up register W7100A Datasheet v1.2.3 49

5 Timers W7100A는두개의 16-bit timer/counter, Timer0와 Timer1을가지고있다. timer mode 에서, timer register들은매 12clock period마다증가한다. counter mode 에서, timer register들은해당입력 pin (T0, T1) 의 falling transition마다증가하고입력 pin들을매 clock마다샘플링한다. 5.1 Timers 0, 1 5.1.1 Overview Timer0, 1의 pin기능들을아래테이블에정리하였다. 모든 pin들은단방향 (unidirectional) 이고 tri-state 출력 pin이나내부신호는없다. Table 5.1 Timers 0, 1 Pin Description Pin Active Type Pu/Pd Description T0/FCS Falling I - Timer0 clock GATE0/FOE High I - Timer0 clock gate control T1/FAE Falling I - Timer1 clock GATE1/FA0 High I - Timer1 clock gate control Timer0와 Timer1은표준 8051 timer들과완벽히호환된다. 각 timer는 2개의 8-bit register 들 TH0 (0x8C), TL0 (0x8A), TH1 (0X8D), TL1 (0X8B) 로구성되어있다. Timer들은아래테이블 과같이 4가지모드로동작한다. Table 5.2 Timers 0, 1 Mode M1 M0 Mode Function Description 0 0 0 THx 는 32분주 prescaler (TLx 의하위 5bit사용 ) 와함께 8-bit timer/counter로동작 0 1 1 16-bit timer/counter. THx, TLx를모두사용 1 0 2 TLx는 8-bit timer/counter로동작, THx에의해 TLx는 autoreload 됨 1 1 3 두개의 8-bit timer/counter로동작, TL0는 Timer0 제어 bit에의해제어되고 TH0는 Timer1 제어 bit에의해제어됨 TMOD (0x89) Timer1 Timer0 7 6 5 4 3 2 1 0 Reset GATE CT M1 M0 GATE CT M1 M0 0x00 Figure 5.1 Timer 0, 1 Control Mode Register Note: GATE - Gating control 1: GATE pin과 TRx pin 모두 1 인상태에서만 Timer x가동작함 W7100A Datasheet v1.2.3 50

0: TRx pin이 1 인상태에서만 Timer x가동작함 CT - Counter or timer select bit 1: Counter mode, Timer x 는 Tx pin의신호를 counting함 0: Timer mode, 내부 clock으로동작함 M1, M0 Mode 선택 bits TCON (0x88) 7 6 5 4 3 2 1 0 Reset TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 0x00 Figure 5.2 Timer 0, 1 Configuration Register Note: TR0 - Timer 0 동작제어 bit 1: Enabled 0: Disabled TR1 - Timer 1 동작제어 bit 1: Enabled 0: Disabled 외부입력 pin들, GATE0와 GATE1는 pulse의폭을측정하기위한용도로사용할수있다. 5.1.2 Interrupts Timer0, 1 interrupt에대한 bit들을아래에나타내었다. IE register를이용해서 interrupt를 toggle할수있다. 그리고 interrupt들의우선순위는 IP register를이용해서제어할수있다. IE (0xA8) 7 6 5 4 3 2 1 0 Reset EA - ET2 ES ET1 EX1 ET0 EX0 0x00 Figure 5.3 Interrupt Enable Register Note: EA - Enable global interrupts ET0 - Enable Timer0 interrupts ET1- Enable Timer1 interrupts IP (0xB8) 7 6 5 4 3 2 1 0 Reset - - PT2 PS PT1 PX1 PT0 PX0 0x00 Figure 5.4 Interrupt Priority Register Note: PT0 - Enable global interrupts PT1 - Enable Timer0 interrupts Unimplemented bit - Read as 0 or 1 W7100A Datasheet v1.2.3 51

TCON (0x88) 7 6 5 4 3 2 1 0 Reset TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 0x00 Figure 5.5 Timer 0, 1 Configuration Register Note: TF0 Timer0 interrupt (overflow) flag는 processor가 interrupt routine을 처리할때자동으로 clear된다. TF1 Timer1 interrupt (overflow) flag는 processor가 interrupt routine을 처리할때자동으로 clear된다. Interrupt 를발생시키는모든 bit 들은 hardware 와마찬가지로 software 를이용해서 set 혹은 clear 할수있다. 즉, interrupt 들은 software 에의해발생할수도있고취소될수도있다. Table 5.3 Timer0, 1 interrupts Interrupt Function Active Flag Resets Vector Natural Priority Flag Level/Edge TF0 Internal, Timer0 - Hardware 0x0B 2 TF1 Internal, Timer1 - Hardware 0x1B 4 5.1.3 Timer0 Mode0 Timer0는 13bit register (8bit: Timer, 5bit: prescaler) 를통해제어할수있다. 모든 count (valid bits) 가 1에서 0으로바뀌면, Timer0 interrupt flag TF0는 set된다. Timer는 TCON.4 = 1 이고 TMOD.3 = 0 혹은 GATE0 = 1 인상태에서시작된다. TMOD.3 = 1로설정함으로써외부입력 GATE0는 Timer0가 pulse width 측정을할수있도록한다. Mode0에서 13bit register는 TH0의 8bit와 TL0의하위 5bit를사용한다. TL0의상위 3bit는사용하지않는다. 아래 Figure 5.6에 Timer0의 mode0구조를나타내었다. Figure 5.6 Timer Counter0, Mode0: 13-Bit Timer/Counter W7100A Datasheet v1.2.3 52

5.1.4 Timer0 Mode1 Mode1 은 timer register 가 16bit 로동작된다는점을제외하면 Mode0 와같다. 그구조는아 래 Figure 5.7 에나타내었다. Figure 5.7 Timer/Counter0, Mode1: 16-Bit Timer/Counter 5.1.5 Timer0 Mode2 Mode2 는 TL0 의 8bit 를 timer/counter register 로사용한다. Overflow 가발생하면 TL0 는 TH0 에저장된값으로자동으로 reload 된다. TH0 의값은 reload 된후에도변하지않는다. Figure 5.8 Timer/Counter0, Mode2: 8-Bit Timer/Counter with Auto-Reload 5.1.6 Timer0 Mode3 이모드에서는 TL0와 TH0가두개의 counter로나뉜다. 다음 Figure는 Timer0의 Mode3 동작을보여준다. TL0는 Timer0 control bit (C/T, GATE, TR0, GATE0, TF0) 를이용해제어한다. 그리고 TH0는 Timer1의 TR1에의해제어되고 interrupt 발생은 TF1 (interrupt flag) 를이용 W7100A Datasheet v1.2.3 53

한다. Mode3은추가로 8-bit timer/counter가필요한경우사용할수있다. Timer0가 Mode3 로사용되고있을때, Timer1은스스로 Mode3로 turn on/off할수도있고그렇지않으면, serial channel의 baud-rate generator로사용될수도있다. 그리고 Timer1의인터럽트를사용하지않아도되는 application에사용될수도있다. Figure 5.9 Timer/Counter0, Mode3: Two 8-Bit Timers/Counters 5.1.7 Timer1 Mode0 Timer1은 13bit register (8bit: Timer, 5bit: prescaler) 를통해제어할수있다. 모든 count (valid bits) 가 1에서 0으로바뀌면, Timer1 interrupt flag TF1은 set된다. Timer는 TCON.6 = 1 이고 TMOD.6 = 0 혹은 GATE1 = 1 인상태에서시작된다. TMOD.7 = 1로설정함으로써외부입력 GATE1은 Timer1이 pulse width 측정을할수있도록한다. Mode0에서 13bit register는 TH1의 8bit와 TL1의하위 5bit를사용한다. TL1의상위 3bit는사용하지않는다. 아래 Figure 5.10에 Timer1의 mode0구조를나타내었다. W7100A Datasheet v1.2.3 54

5.1.8 Timer1 Mode1 Figure 5.10 Timer/Counter1, Mode0: 13-Bit Timer/Counter Mode1은 timer register가 16bit로동작된다는점을제외하면 Mode0와같다. 그구조는아래 Figure 5.11에나타내었다. Figure 5.11 Timer/Counter1, Mode1: 16-Bit Timers/Counters 5.1.9 Timer1 Mode2 Mode2 는 TL1 의 8bit 를이용해제어한다. Overflow 가발생하면 TF1 을 set 하고 TL1 의 8bit 는 TH1 에저장된 8bit 로자동으로 reload 된다. Reload 후 TH1 값은변하지않는다. W7100A Datasheet v1.2.3 55

Figure 5.12 Timer/Counter1, Mode2: 8-Bit Timer/Counter with Auto-Reload 5.1.10 Timer1 Mode3 Timer1 이 Mode3 으로동작할경우에는, 이미 Timer0 에서 Mode3 으로 Timer1 을사용하고있 기때문에 TR1 을 0 으로설정한것과같다. 자세한동작은 5.1.6 Timer0-Mode3 을참고하기 바란다. 5.2 Timer2 5.2.1 Overview Timer2 의 pin 기능들을아래테이블에정리하였다. 모든 pin 들은단방향 (unidirectional) 이고 tri-state 출력 pin 이나내부신호는없다. Table 5.4 Timer2 Pin Description Pin Active Type Pu/Pd Description T2/FA1 Falling I - Timer2 external clock input T2EX/FA2 Falling I - Timer2 capture/reload trigger W7100A의 Timer2는 표준 8051 Timer2와 완벽하게 호환된다. Timer2는 TH2/TL2 (0xCD/0xCC) counter registers, RLDH/RLDL (0xCB, 0xCA) capture registers, T2CON (0xC8) control register 총 5개의 SFR에의해제어된다. Timer2는 T2CON register의 bit들을설정하 여아래테이블과같이 3가지 mode로동작한다. Table 5.5 Timer2 Modes RCLK,TCLK CPRL2 TR2 Function Description 0 0 1 16-bit auto-reload mode. TF2 bit는 Timer2 overflow가발생하면 set되고, TH2와 TL2 register는 RLDH와 RLDL 에저장된값으로 reload된다. W7100A Datasheet v1.2.3 56

0 1 1 16-bit capture mode. Timer2 overflow가발생하면 TF2 bit가 set되고 EXEN2=1, T2EX pin이 falling edge일때, TH2와 TL2register 값은 RLDH와 RLDL에저장된다. 1 X 1 UART interface를위한 Baud rate generator mode X X 0 Timer2 is off. T2CON (0xC8) 7 6 5 4 3 2 1 0 Reset TF2 EXF2 RCLK TCLK EXEN2 TR2 CT2 CPRL2 0x00 Figure 5.13 Timer2 Configuration Register Note: EXF2 EXEN2=1, T2EX pin이 falling edge일때 EXF2는 set된다. 반드시 softwa re를통해 clear해야한다. RCLK - Receive clock enable 0: UART receiver는 Timer1 overflow pulses에의해 clock됨 1: UART receiver는 Timer2 overflow pulses에의해 clock됨 TCLK - Transmit clock enable 0: UART transmitter는 Timer1 overflow pulses에의해 clock됨 1: UART transmitter는 Timer2 overflow pulses에의해 clock됨 EXEN2 - Enable T2EX pin functionality 0: Ignore T2EX events 1: T2EX pin이 falling edge일때 capture혹은 reload를허용함 TR2 - Start/Stop Timer2 0: Stop 1: Start CT2 - Timer/Counter select 0: Internally clocked timer 1: External event counter, Clock source는 T2 pin CPRL2 - Capture/Reload select 0: Timer2 overflow발생시혹은 T2EX pin이 falling edge이고 EXEN2=1 인경우자동으로 reload 발생. RCLK혹은 TCLK가 set되면, 이 bit는무시되고 Timer2 overflow발생시에자동으로 reload됨 1: EXEN2=1이고 T2EX pin이 falling edge일때 capture활성화 W7100A Datasheet v1.2.3 57

Figure 5.14 Timer/Counter2, 16-Bit Timer/Counter with Auto-Reload 5.2.2 Interrupts Timer2의 interrupt bit들은아래와같다. IE register를설정하여 interrupt를 toggle할수있고, interrupt 우선순위는 IP register를통해설정할수있다. IE (0xA8) 7 6 5 4 3 2 1 0 Reset EA - ET2 ES ET1 EX1 ET0 EX0 0x00 Figure 5.15 Interrupt Enable Register Timer2 Note: EA - Enable global interrupts ET2 - Enable Timer2 interrupts IP (0xB8) 7 6 5 4 3 2 1 0 Reset - - PT2 PS PT1 PX1 PT0 PX0 0x00 Figure 5.16 Interrupt Priority Register Timer2 Note: PT2 Timer2 interrupt priority level control (high level at 1) Unimplemented bit - Read as 0 or 1 T2CON (0xC8) 7 6 5 4 3 2 1 0 Reset TF2 EXF2 RCLK TCLK EXEN2 TR2 CT2 CPRL2 0x00 Figure 5.17 Timer2 Configuration Register TF2 Note: TF2 Timer2 interrupt (overflow) flag, 반드시 software로 clear해줘야함. W7100A Datasheet v1.2.3 58

이 flag 는 RCLK 혹은 TCLK 가 set 된경우 set 되지않는다. Figure 5.18 Timer/Counter2, 16-Bit Timer/Counter with Capture Mode Interrupt 를발생과관련된모든 bit 들은 hardware 와마찬가지로 software 에의해 clear 되 거나 set 될수있다. 즉, interrupt 들은 software 에의해발생되거나취소될수도있다. Table 5.6 Timer2 Interrupt Interrupt Function Active Flag Resets Vector Natural Priority Flag Level/Edge TF2 Internal, Timer2 - Software 0x2B 6 EXEN2 bit가 set되어있고 T2EX pin이 falling edge일때 Timer2 interrupt가발생한다. 0x2B vector를이용해서 EXF2는이 interrupt에의해 set된다. 하지만 TF2 flag는변하지않고유지된다. W7100A Datasheet v1.2.3 59

Figure 5.19 Timer2 for Baud Rate Generator Mode W7100A Datasheet v1.2.3 60

6 UART W7100A의 UART는수신과송신이동시에가능한 full duplex mode로동작한다. W7100A는 double-buffer를가지고있기때문에 receiver는다음프레임의수신시작전에수신인터럽트에응답하지않아서그데이터를읽지못하더라도, overrun 에러는발생하지않는다. Read동작중에, SBUF는 receive register로부터데이터를읽는다. 반대로송신동작중에 SBUF는 transmit register에데이터를 load한다. W7100A의 UART는총 4가지 mode를가지고있는데그중하나는동기식이고나머지 3가지는비동기방식이다. Mode2와 3은 multiprocessor communication을위한특별한기능을가지고있다. 이기능은 SCON register의 SM2 bit를 setting하여사용할수있다. Master processor는첫번째 address byte에 slave processor를식별할수있는정보를담아서송신한다. Address byte는 9번째 bit가 1이고 data byte는 9번째 bit가 0으로각각다르다. SM2 = 1인경우 data byte는 slave에게아무런 interrupt도발생시키지않겠지만 address byte는모든 slave들에 interrupt를발생시킬것이다. 이경우 interrupt가발생한 slave는 SM2 bit를 clear하고이어서수신될 data byte의수신을준비한다. Interrupt가발생하지않은 slave는 SM2 bit를 set 한채로수신되는 data byte를무시한다. UART의 pin기능들을아래테이블에나타내었다. Table 6.1 UART Pin Description Pin Active Type Pu/Pd Description RXD - I Pu Serial receiver input / output TXD - O - Serial transmitter W7100A의 UART는표준 8051의 UART와완전히호환된다. 관련 register들로서 SBUF (0x99), SCON (0x98), PCON (0x87), IE (0xA8), IP (0xB8) 가있다. UART data buffer (SBUF) 는 transmit, receive 2개의 register로구성되어있다. SBUF transmit register에데이터를쓰면 send 과정이 시작되고 SBUF receive register에데이터가 write되면 receive과정이시작된다. SBUF (0x99) 7 6 5 4 3 2 1 0 Reset SB7 SB6 SB5 SB4 SB3 SB2 SB1 SB0 0x00 Figure 6.1 UART Buffer Register SCON (0x98) 7 6 5 4 3 2 1 0 Reset SM0 SM1 SM2 REN TB8 RB8 TI RI 0x00 Note: Figure 6.2 UART Configuration Register SM2 - Enable a multiprocessor communication feature SM1 - Set baud rate SM0 - Set baud rate REN 1 : enable serial receive W7100A Datasheet v1.2.3 61

0 : disable serial receive TB8 Mode2 와 3에서 9번째송신 data bit. 이 bit는 MCU 동작에따라달라진다 (parity check, multiprocessor communication, etc.). RB8 Mode2 와 3에서수신데이터의 9번째 bit. Mode1에서 SM2가 0이면 RB08은 stop bit이고, Mode0에서이 bit는사용하지않는다. UART의 4가지 mode들을아래테이블에나타내었다. Table 6.2 UART Modes SM0 SM1 Mode Description Baud Rate 0 0 0 Shift register fosc/12 0 1 1 8-bit UART Variable 1 0 2 9-bit UART fosc/32 or /64 1 1 3 9-bit UART Variable UART 의 baud rate 계산을아래테이블에나타내었다. Table 6.3 UART Baud Rates Mode Baud Rate Mode0 fosc/12 Mode1,3 Time1 overflow rate혹은 Timer2 overflow rate Mode2 SMOD0 = 0 fosc/64 SMOD0 = 1 fosc/32 아래와같이 SMOD0 bit는 PCON register에있다. PCON (0x87) 7 6 5 4 3 2 1 0 Reset SMOD0 SMOD1 - PWE - 0 0 0 0x00 Figure 6.3 UART Bits in Power Configuration Register Note: SMOD0 - Bit for UART baud rate Unimplemented bit - Read as 0 or 1 Bits 2-0는반드시 0이어야함 6.1 Interrupts UART interrupt와관련된 bit들을아래에나타내었다. Interrupt는 IE register에의해 toggle 되고 interrupt들의우선순위는 IP register를이용해설정한다. IE (0xA8) 7 6 5 4 3 2 1 0 Reset EA - ET2 ES ET1 EX1 ET0 EX0 0x00 W7100A Datasheet v1.2.3 62

Figure 6.4 UART Bits in Interrupt Enable Register Note: ES - RI0 & TI0 interrupt enable flag IP (0xB8) 7 6 5 4 3 2 1 0 Reset - - PT2 PS PT1 PX1 PT0 PX0 0x00 Figure 6.5 UART Bits in Interrupt Priority Register Note: SMOD0 - Bit for UART baud rate Unimplemented bit - Read as 0 or 1 SCON (0x98) 7 6 5 4 3 2 1 0 Reset SM0 SM1 SM2 REN TB08 RB08 TI RI 0x00 Figure 6.6 UART Configuration Register Note: TI Transmit interrupt flag, serial 전송이끝나면자동으로 set됨, 반드시 s oftware로 clear해야함 RI Receive interrupt flag, serial 수신이끝나면자동으로 set됨, 반드시 software로 clear해야함 Interrupt 생성에관한 bit 들은 hardware 와마찬가지로 software 에의해 clear 되거나 set 될 수있다. 즉, interrupt 들은 software 에의해생성되거나취소될수있다. Table 6.4 UART Interrupt Interrupt Function Active Flag Resets Vector Natural Priority Flag Level/Edge TI & RI Internal, UART - software 0x23 5 6.2 Mode0, Synchronous TXD 출력은 shift clock이다. Mode0에서 baud rate는 CLK clock 주파수의 1/12로고정되어있다. 처음에는 LSB하위 bit를시작으로총 8bit들이전송된다. 수신은 SCON의 RI = 0, REN = 1로설정하여초기화한다. Figure 6.7 Timing Diagram for UART Transmission Mode0 (clk = 88.4736 MHz) W7100A Datasheet v1.2.3 63

6.3 Mode 1, 8-Bit UART, Variable Baud Rate, Timer 1 or 2 Clock Source 시작 bit ( 항상 0), 데이터 8bit (LSB 를시작으로 ), 정지 bit ( 항상 1) 총 10bit 를전송한다. 데 이터수신중에는시작 bit 로송신단과동기를맞춘다. 그다음 8bit 는 SBUF 에저장되고정 지 bit 는 SFR SCON (0x98) 의 RB08 flag 를 trigger 한다. Baud rate 는 Timer1 혹은 2 의설정에따 라달라질수있다. Timer2 를이용할경우 T2CON (0xC8) register 의 TCLK 와 RCLK bit 를 set 해 야한다. Figure 6.8 Timing Diagram for UART Transmission Mode1 6.4 Mode 2, 9-Bit UART, Fixed Baud Rate Mode2는 Baud rate가 CLK clock 주파수의 1/32혹은 1/64인점을제외하고는 mode1과거의유사하다. Mode2는시작 bit ( 항상 0), 데이터 8 bit (LSB를시작으로 ), programmable bit (9 th bit), 정지 bit ( 항상 1) 의 11bit 가전송되거나수신된다. Programmable 9 th bit 는 parity check bit에사용된다. Mode2에서는전송중에 9 th bit가 SCON의 TB08 bit에저장된다. 수신중에는 9 th bit가 SCON의 RB08 bit에저장된다. Figure 6.9 Timing Diagram for UART Transmission Mode2 6.5 Mode 3, 9-Bit UART, Variable Baud Rate, Timer1 or 2 Clock Source Mode3 는 baud rate 가가변적이라는점을제외하고는 mode2 와같다. REN = 1 인경우데이 터를수신할수있고 baud rate 는 Timer1 혹은 Timer2 의설정에따라달라진다. Timer2 의 clock 을사용하는경우에는 T2CON (0xC8) register 의 TCLK 와 RCLK bit 를설정해야한다. Figure 6.10 Timing Diagram for UART Transmission Mode3 W7100A Datasheet v1.2.3 64

6.6 Examples of Baud Rate Setting Table 6.5 Examples of Baud Rate Setting Timer 1 / Mode 2 Timer 2 Baud Rate(bps) TH1(0x8D) RLDH(0xCB), RLDL(0xCA) SMOD = 0 SMOD = 1 2400 160(0xA0) 64(0x40) 64384(0XFB80) 4800 208(0xD0) 160(0xA0) 64960(0xFDC0) 9600 232(0xE8) 208(0xD0) 65248(0xFEE0) 14400 240(0xF0) 224(0xE0) 65344(0XFF40) 19200 244(0xF4) 232(0xE8) 65392(0XFF70) 28800 248(0xF8) 240(0xF0) 65440(0xFFA0) 38400 250(0xFA) 244(0xF4) 65464(0XFFB8) 57600 252(0xFC) 248(0xF8) 65488(0xFFD0) 115200 254(0xFE) 252(0xFC) 65512(0xFFE8) 230400 255(0xFF) 254(0xFE) 65524(0xFFF4) Note: Baud Rate calculation formula Using Timer1 Baud Rate = ( 2 SMOD / 32 ) * ( Clock Frequency / 12( 256 TH1 ) ) Using Timer2 Baud Rate = Clock Frequency / ( 32 * ( 65536 ( RLDH, RLDL ) ) ) W7100A Datasheet v1.2.3 65

7 Watchdog Timer 7.1 Overview Watchdog Timer는아래 Figure 7.1과같이시스템 main clock과연결된 divider들에의해동작한다. Divider의출력은 CKCON (0xC8) register의 WD[1:0] bit들로선택할수있고이것을이용해서 timeout 주기를설정할수있다. Timeout이발생하면, interrupt flag가 set되고설정에따라시스템 reset이발생할수있다. Interrupt enable bit와 global interrupt가 enable 되어있다면, interrupt는정상적으로동작할것이다. Reset과 interrupt는완전히별개의기능이다. 따라서 timeout이발생하면각각이것을인지하고응용에따라모두동작하거나하나만동작하도록할수있다. Figure 7.1 Watchdog Timer Structure 7.2 Interrupts Watchdog interrupt와관련한 bit들은아래와같다. Interrupt는 IE (0xA8) 와 EIE (0xE8) register를이용해서, 켜고끌수있으며 interrupt 우선순위는 EIP (0xF8) register를통해설 정할수있다. IE는 EA bit를설정함으로써 global interrupt 시스템을제어할수있다. IE (0xA8) 7 6 5 4 3 2 1 0 Reset EA - ET2 ES ET1 EX1 ET0 EX0 0x00 Figure 7.2 Interrupt Enable Register EIE (0xE8) 7 6 5 4 3 2 1 0 Reset - - - EWDI EINT5 EINT4 EINT3 EINT2 0x00 W7100A Datasheet v1.2.3 66

Figure 7.3 Extended Interrupt Enable Register Note: EA - Enable global interrupt EWDI - Enable Watchdog interrupt EIP (0xF8) 7 6 5 4 3 2 1 0 Reset - - - PWDI PINT5 PINT4 PINT3 PINT2 0x00 Figure 7.4 Extended interrupt Priority Register Note: PWDI - Watchdog priority level control (high level at 1) Unimplemented bit - Read as 0 or 1 WDCON (0xD8) 7 6 5 4 3 2 1 0 Reset - - - - WDIF WTRF EWT RWT 0x00 Figure 7.5 Watchdog Control Register Note: WDIF - Watchdog Interrupt Flag. Watchdog interrupt는 WDIF, EWT bit와 EI E SFR의 EWDI bit와연계되어있다. Software로 WDIF를설정해도 i nterrupt가 enable된경우watchdog interrupt가발생할것이다. WDI F bit는 Timed Access Register를이용해서반드시 interrupt servic e루틴에서 software로 clear해야한다. Timed Access 과정은 sectio n 7.8 Timed Access 를참조하기바란다. 모든 interrupt관련 bit들은 hardware에의한것과동일하게 software에의해 set되거나 clear될수있다. 즉, interrupt들은 software에의해생성되거나취소될수있다. Table 7.1 Watchdog Interrupt Interrupt Flag Function Active Level/Edge Flag Reset Vector Natural Priority WDIF Internal, Watchdog - Software 0x63 11 7.3 Watchdog Timer Reset Watchdog Timer reset의동작과정은다음과같다. Timeout interval을초기화한다음 system을 reset하면 Watchdog은 RWT bit를통해 reset된다. EWT (Enable Watchdog Timer reset = WDCON.1) bit를설정하여 reset mode를설정한다. 사용자는 timer가정해진 timeout 시간에도달하기전 software를통해 Watchdog Timer를 reset할수있다. Timeout전에 RWT (Reset Watchdog Timer = WDCON.0) bit를 set하여 reset을했다면 timer는다시시작될것이다. 하지만 timeout까지 RWT bit를 set하지않았다면, Watchdog은 MCU를 reset할것이다. Software에의해 RWT bit를 set하면, RWT bit는자동으로 clear된다. Reset이발생하면, WTRF (Watchdog Timer reset Flag = WDCON.2) bit는자동으로 set 될것이다. 하지만, 이 bit는 W7100A Datasheet v1.2.3 67

software 에의해반드시직접 clear 해야한다. 7.4 Simple Timer Watchdog Timer 는 reset mode 를사용하지않고 (EWT = 0) interrupt 를초기화하면 (EWDI = 0) 보통 timer 로써사용할수있다. Timer 는 WD[1:0] 에미리설정된값까지 count 를하고 timeout 이발생하면 Watchdog interrupt flag 를 set 할것이다. 이때 RWT bit 를설정함으로써 timer 는계속해서동작할수있다. WDIF bit 는 software 를통해서나 reset 을통해 clear 할수 있다. Watchdog interrupt 는긴 timer 를요구하는응용에사용할수있다. Interrupt 는 EWDI (Enable WatchDog timer Interrupt = EIE.4) bit 를설정하여 enable 하고, timeout 이발생했을 때 Watchdog Timer 는 WDIF bit 를 set 할것이다. EA bit 가 enable 되어있다면 interrupt 가발생 할것이다. WDIF 는 Watchdog reset 이발생하기 512 clock 전에 set 된다는점을명심해야한다. Watchdog interrupt 는반드시 software 에의해 clear 되어야한다. Watchdog interrupt 를적절 히이용한다면, 예기치못한 error 발생을감시할수있는시스템 monitor 로써사용할수있 다. RESET 이정상적으로수행되지않을경우가있어 Watchdog timer reset 사용을권장하지 않으며, Watchdog timer interrupt 로대체하여사용하기바란다. 7.5 System Monitor WDCON SFR 의 EWT bit 를설정하면 Watchdog timeout 이발생했을때 W7100A 는 reset 된다. 이기능을이용하여 Watchdog Timer 를시스템 monitor 로사용할수있다. 예를들어사용자 가원치않는잘못된 code 가실행되고있다고가정하자. 사용자가의도한 code 에는 RWT bit 를주기적으로 clear 하는 routine 이있지만, 잘못된 code 에는없기때문에 Watchdog timeout 이발생하고 W7100A 는 reset 될것이다. 이방법을이용해서 System 이잘못동작할때이 것을바로잡을수있다. 7.6 Watchdog Related Registers Watchdog Timer 는동작중에몇몇 SFR bit 들을사용한다. 이들 bit 들은 reset source, interrupt source, software polled timer 혹은세가지를조합한경우처럼공유할수있다. Reset 과 interrupt 는 status flag 를가지고있다. Watchdog 또한 timer 를재시작하는 bit 를가 지고있다. Table 7.2 Summary for Watchdog Related Bits Bit Name Register Bit Position Description EWDI EIE EIE.4 Enable Watchdog Timer Interrupt PWDI EIP EIP.4 Priority of Watchdog Timer Interrupt WD[1:0] CKCON CKCON.7-6 Watchdog Interval RWT WDCON.0 Reset Watchdog Timer EWT WDCON WDCON.1 Enable Watchdog Timer reset WTRF WDCON.2 Watchdog Timer reset flag W7100A Datasheet v1.2.3 68

WDIF WDCON.3 Watchdog Interrupt flag RWT bit 를설정하여 Watchdog Timer 가 reset 되는동안에도 Watchdog Timer 동작은 disable 되지않는다. 다음섹션에서 Watchdog 을제어하는 bit 들에대해서설명할것이다. 7.7 Watchdog Control Watchdog 제어 bit 들을아래에나타내었다. 이 register 에 access (write) 하려면 7.8 Timed Access Registers 과정을거쳐야한다. WDCON (0xD8) 7 6 5 4 3 2 1 0 Reset - - - - WDIF WTRF EWT RWT 0x00 Figure 7.6 Watchdog Control Register Note: WTRF Watchdog Timer reset flag. 이 flag가 set되면 Watchdog Timer rese t이발생한다. 하지만 software를통해이 flag를 enable하면 Watchd og Timer reset은 trigger되지않는다. Reset과정동안이 flag는 soft ware에의해 clear되어야한다. 만약 EWT bit가 clear되면 Watchdog Timer는더이상동작하지않는다. EWT Enable the Watchdog Timer reset. 이 bit는 Watchdog Timer가 mic rocontroller를 reset하도록제어한다. Watchdog Timer가 Watchdog in terrupt를발생하는기능에는아무런영향을주지않는다. 이 bit를제어하려면 Timed Access 과정을이용해야한다. 0: Watchdog Timer timeout이발생해도 microcontroller를 reset하지않음 1: Watchdog Timer timeout이발생하면 microcontroller를 reset함 RWT Watchdog Timer를 reset함. RWT는 Watchdog Timer count를 reset 한다. Watchdog Timer가 expire되기전에 Timed Access과정을반드시거쳐야한다. RWT가 enable상태면 Reset혹은 interrupt가발생한다. Unimplemented bit - Read as 0 or 1 아래테이블은 Watchdog control bit들의기능을정리한것이다. Table 7.3 Watchdog Bits and Actions EWT EWDI WDIF Result X X 0 Watchdog을사용하지않음 0 0 1 Watchdog timeout이발생해도 interrupt는발생하지않음 0 1 1 Watchdog interrupt발생 1 0 1 Watchdog timeout이발생해도 interrupt는발생하지않음 W7100A Datasheet v1.2.3 69

Timeout이발생하고 512 clock안에 RWT bit를 set하지않으면 Watchdog Timer reset이발생함 1 1 1 Watchdog interrupt 발생함, Timeout이발생하고 512 clock안에 RWT bit를 set하지않으면 Watchdog Timer reset이발생함 7.7.1 Clock Control Watchdog timeout주기는 WD[1:0] bit를이용해서설정한다. WD[1:0] bit는아래와같이 CKCON register내부에있다. CKCON (0x8E) 7 6 5 4 3 2 1 0 Reset WD1 WD0 - - - MD2 MD1 MD0 0x03 Figure 7.7 Clock Control register Watchdog bits Watchdog은 CLK pin과직접 clock이연결되어있다. Watchdog timeout주기는 WD[1:0] bit에 따라아래와같이 4가지중선택할수있다. *W7100A clock frequency = 88.4736MHz Table 7.4 Watchdog Intervals WD[1:0] Watchdog Interval Number of Clocks 00 2 17 131072 01 2 20 1048576 10 2 23 8388608 11 2 26 67108864 Watchdog reset이 enable되면 interrupt와상관없이 timeout후 512 clock이지나면 reset이 발생한다. 그러므로실제 Watchdog timeout은선택된 Watchdog interval에 512 clock을더 한값이된다. 7.8 Timed Access Registers WDCON은 timed access register이기때문에비정상적인쓰기동작 (accidental write) 을방지하기위해반드시아래와같은과정을거쳐서 write한다. TA는 SFR address의 0xC7에위치한다. MOV TA, #0xAA MOV TA, #0x55 ;Any direct addressing instruction writing timed access register TA SFR을위와같은순서로 write하고 WDCON SFR의값을변경한다. WDCON의값을변경할때는매번이와같은과정을거쳐야한다. Table 7.5 Timed Access Registers Register name Description W7100A Datasheet v1.2.3 70

WDCON(0xD8) Watchdog configuration W7100A Datasheet v1.2.3 71

8 TCPIPCore 8.1 Memory Map TCPIPCore는아래그림처럼 Common register와 SOCKET register, TX memory, RX memory의조합으로구성되어있다. Figure 8.1 TCPIPCore Memory Map 8.2 Registers list 8.2.1 Common Registers Address offset Symbol Description 0xFE0000 MR Mode Register 0xFE0001 0xFE0002 0xFE0003 0xFE0004 0xFE0005 0xFE0006 0xFE0007 0xFE0008 GAR0 GAR1 GAR2 GAR3 SUBR0 SUBR1 SUBR2 SUBR3 GAR (Gateway Address Register) SUBR (Subnet Mask Register) W7100A Datasheet v1.2.3 72

0xFE0009 0xFE000A 0xFE000B 0xFE000C 0xFE000D 0xFE000E SHAR0 SHAR1 SHAR2 SHAR3 SHAR4 SHAR5 SHAR (Source Hardware Address Register) 0xFE000F SIPR0 0xFE0010 SIPR1 0xFE0011 SIPR2 SIPR (Source IP Address Register) 0xFE0012 SIPR3 0xFE0013 Reserved 0xFE0014 0xFE0015 IR Interrupt Register 0xFE0016 IMR Interrupt Mask Register 0xFE0017 RTR0 0xFE0018 RTR1 RTR (Retransmission Timeout-value Register) 0xFE0019 RCR RCR (Retransmission Retry-count Register) 0xFE001A Reserved 0xFE001B 0xFE001C PATR0 0xFE001D PATR1 PART (PPPoE Authentication Register) 0xFE001E PPPALGO PPPoE Authentication Algorithm Register 0xFE001F VERSIONR W7100A Version Register 0xFE0020 ~ 0xFE0027 Reserved 0xFE0028 PTIMER PPP Link Control Protocol Request Timer Register 0xFE0029 PMAGIC PPP LCP Magic Number Register 0xFE002A ~ 0xFE002F 0xFE0030 0xFE0031 0xFE0032 0xFE0033 INTLEVEL0 INTLEVEL1 Reserved INTLEVEL (Interrupt Low Level Timer Register) Reserved W7100A Datasheet v1.2.3 73

0xFE0034 IR2 SOCKET Interrupt Register 8.2.2 SOCKET Registers Address offset Symbol Description 0xFE4000 S0_MR SOCKET 0 Mode Register 0xFE4001 S0_CR SOCKET 0 Command Register 0xFE4002 S0_IR SOCKET 0 Interrupt Register 0xFE4003 S0_SR SOCKET 0 SOCKET Status Register 0xFE4004 S0_PORT0 0xFE4005 S0_PORT1 S0_PORT (SOCKET 0 Source Port Register) 0xFE4006 0xFE4007 0xFE4008 0xFE4009 0xFE400A 0xFE400B S0_DHAR0 S0_DHAR1 S0_DHAR2 S0_DHAR3 S0_DHAR4 S0_DHAR5 S0_DHAR (SOCKET 0 Destination Hardware Address Register) 0xFE400C S0_DIPR0 0xFE400D S0_DIPR1 0xFE400E S0_DIPR2 S0_DIPR (SOCKET 0 Destination IP Address Register) 0xFE400F S0_DIPR3 0xFE4010 S0_DPORT0 0xFE4011 S0_DPORT1 S0_DPORT (SOCKET 0 Destination Port Register) 0xFE4012 S0_MSSR0 0xFE4013 S0_MSSR1 S0_MSSR (SOCKET 0 Maximum Segment Size Register) 0xFE4014 S0_PROTO SOCKET 0 Protocol of IP Header Field Register in IP raw mode 0xFE4015 S0_TOS SOCKET 0 IP Type of Service(TOS) Register 0xFE4016 S0_TTL SOCKET 0 IP Time to Live(TTL) Register 0xFE4017 ~ 0xFE401D Reserved 0xFE401E S0_RXMEM_SIZE SOCKET 0 Receive Memory Size Register 0xFE401F S0_TXMEM_SIZE SOCKET 0 Transmit Memory Size Register W7100A Datasheet v1.2.3 74

0xFE4020 0xFE4021 S0_TX_FSR0 S0_TX_FSR1 S0_TX_FSR (SOCKET 0 Transmit Free Memory Size Register) 0xFE4022 S0_TX_RD0 S0_TX_RD 0xFE4023 S0_TX_RD1 (SOCKET 0 Transmit Memory Read Pointer Register) 0xFE4024 S0_TX_WR0 S0_TX_WR 0xFE4025 S0_TX_WR1 (SOCKET 0 Transmit Memory Write Pointer Register) 0xFE4026 S0_RX_RSR0 S0_RX_RSR 0xFE4027 S0_RX_RSR1 (SOCKET 0 Received Data Size Register) 0xFE4028 S0_RX_RD0 S0_RX_RD 0xFE4029 S0_RX_RD1 (SOCKET 0 Receive Memory Read Pointer Register) 0xFE402A S0_RX_WR0 S0_RX_WR 0xFE402B S0_RX_WR1 (SOCKET 0 Receive Memory Write Pointer Register) 0xFE402C S0_IMR SOCKET 0 Interrupt Mask Register 0xFE402D S0_FRAG0 S0_FRAG 0xFE402E S0_FRAG1 (SOCKET 0 Fragment Field Value in IP Header Register) 0xFE402F ~ 0xFE40FF Reserved 0xFE4100 S1_MR SOCKET 1 Mode Register 0xFE4101 S1_CR SOCKET 1 Command Register 0xFE4102 S1_IR SOCKET 1 Interrupt Register 0xFE4103 S1_SR SOCKET 1 SOCKET Status Register 0xFE4104 0xFE4105 0xFE4106 0xFE4107 0xFE4108 0xFE4109 0xFE410A 0xFE410B 0xFE410C 0xFE410D 0xFE410E 0xFE410F S1_PORT0 S1_PORT1 S1_DHAR0 S1_DHAR1 S1_DHAR2 S1_DHAR3 S1_DHAR4 S1_DHAR5 S1_DIPR0 S1_DIPR1 S1_DIPR2 S1_DIPR3 S1_PORT (SOCKET 1 Source Port Register) S1_DHAR (SOCKET 1 Destination Hardware Address Register) S1_DIPR (SOCKET 1 Destination IP Address Register) W7100A Datasheet v1.2.3 75

0xFE4110 S1_DPORT0 0xFE4111 S1_DPORT1 S1_DPORT (SOCKET 1 Destination Port Register) 0xFE4112 S1_MSSR0 0xFE4113 S1_MSSR1 S1_MSSR (SOCKET 1 Maximum Segment Size Register) 0xFE4114 S1_PROTO SOCKET 1 Protocol of IP Header Field Register in IP raw mode 0xFE4115 S1_TOS SOCKET 1 IP Type of Service(TOS) Register 0xFE4116 S1_TTL SOCKET 1 IP Time to Live(TTL) Register 0xFE4117 ~ Reserved 0xFE411D 0xFE411E S1_RXMEM_SIZE SOCKET 1 Receive Memory Size Register 0xFE411F S1_TXMEM_SIZE SOCKET 1 Transmit Memory Size Register 0xFE4120 S1_TX_FSR0 0xFE4121 S1_TX_FSR1 S1_TX_FSR (SOCKET 1 Transmit Free Memory Size Register) 0xFE4122 S1_TX_RD0 S1_TX_RD 0xFE4123 S1_TX_RD1 (SOCKET 1 Transmit Memory Read Pointer Register) 0xFE4124 S1_TX_WR0 S1_TX_WR 0xFE4125 S1_TX_WR1 (SOCKET 1 Transmit Memory Write Pointer Register) 0xFE4126 S1_RX_RSR0 S1_RX_RSR 0xFE4127 S1_RX_RSR1 (SOCKET 1 Received Data Size Register) 0xFE4128 S1_RX_RD0 S1_RX_RD 0xFE4129 S1_RX_RD1 (SOCKET 1 Receive Memory Read Pointer Register) 0xFE412A S1_RX_WR0 S1_RX_WR (SOCKET 1 Receive Memory Write Pointer 0xFE412B S1_RX_WR1 Register) 0xFE412C S1_IMR SOCKET 1 Interrupt Mask Register 0xFE412D S1_FRAG0 S1_FRAG 0xFE412E S1_FRAG1 (SOCKET 1 Fragment Field Value in IP Header Register) 0xFE412F ~ Reserved 0xFE41FF 0xFE4200 S2_MR SOCKET 2 Mode Register 0xFE4201 S2_CR SOCKET 2 Command Register 0xFE4202 S2_IR SOCKET 2 Interrupt Register 0xFE4203 S2_SR SOCKET 2 SOCKET Status Register 0xFE4204 S2_PORT0 S2_PORT (SOCKET 2 Source Port Register) W7100A Datasheet v1.2.3 76

0xFE4205 0xFE4206 0xFE4207 0xFE4208 0xFE4209 0xFE420A 0xFE420B 0xFE420C 0xFE420D 0xFE420E 0xFE420F 0xFE4210 0xFE4211 0xFE4212 0xFE4213 0xFE4214 S2_PORT1 S2_DHAR0 S2_DHAR1 S2_DHAR2 S2_DHAR3 S2_DHAR4 S2_DHAR5 S2_DIPR0 S2_DIPR1 S2_DIPR2 S2_DIPR3 S2_DPORT0 S2_DPORT1 S2_MSSR0 S2_MSSR1 S2_PROTO0 S2_PROTO1 S2_DHAR (SOCKET 2 Destination Hardware Address Register) S2_DIPR (SOCKET 2 Destination IP Address Register) S2_DPORT (SOCKET 2 Destination Port Register) S2_MSSR (SOCKET 2 Maximum Segment Size Register) S2_PROTO (SOCKET 2 Protocol of IP Header Field Register in IP raw mode) 0xFE4215 S2_TOS SOCKET 2 IP Type of Service(TOS) Register 0xFE4216 S2_TTL SOCKET 2 IP Time to Live(TTL) Register 0xFE4217 ~ 0xFE421D Reserved 0xFE421E S2_RXMEM_SIZE SOCKET 2 Receive Memory Size Register 0xFE421F S2_TXMEM_SIZE SOCKET 2 Transmit Memory Size Register 0xFE4220 0xFE4221 S2_TX_FSR0 S2_TX_FSR1 S2_TX_FSR (SOCKET 2 Transmit Free Memory Size Register) 0xFE4222 S2_TX_RD0 S2_TX_RD 0xFE4223 S2_TX_RD1 (SOCKET 2 Transmit Memory Read Pointer Register) 0xFE4224 S2_TX_WR0 S2_TX_WR 0xFE4225 0xFE4226 0xFE4227 S2_TX_WR1 S2_RX_RSR0 S2_RX_RSR1 (SOCKET 2 Transmit Memory Write Pointer Register) S2_RX_RSR (SOCKET 2 Received Data Size Register) 0xFE4228 S2_RX_RD0 S2_RX_RD 0xFE4229 S2_RX_RD1 (SOCKET 2 Receive Memory Read Pointer Register) W7100A Datasheet v1.2.3 77

0xFE422A S2_RX_WR0 S2_RX_WR 0xFE422B S2_RX_WR1 (SOCKET 2 Receive Memory Write Pointer Register) 0xFE422C S2_IMR SOCKET 2 Interrupt Mask Register 0xFE422D S2_FRAG0 0xFE422E S2_FRAG1 SOCKET 2 Fragment Field Value in IP Header Register 0xFE422F ~ 0xFE42FF Reserved 0xFE4300 S3_MR SOCKET 3 Mode Register 0xFE4301 S3_CR SOCKET 3 Command Register 0xFE4302 S3_IR SOCKET 3 Interrupt Register 0xFE4303 S3_SR SOCKET 3 SOCKET Status Register 0xFE4304 0xFE4305 0xFE4306 0xFE4307 0xFE4308 0xFE4309 0xFE430A 0xFE430B 0xFE430C 0xFE430D 0xFE430E 0xFE430F 0xFE4310 0xFE4311 0xFE4312 0xFE4313 0xFE4314 S3_PORT0 S3_PORT1 S3_DHAR0 S3_DHAR1 S3_DHAR2 S3_DHAR3 S3_DHAR4 S3_DHAR5 S3_DIPR0 S3_DIPR1 S3_DIPR2 S3_DIPR3 S3_DPORT0 S3_DPORT1 S3_MSSR0 S3_MSSR1 S3_PROTO S3_PORT (SOCKET 3 Source Port Register) S3_DHAR (SOCKET 3 Destination Hardware Address Register) S3_DHAR (SOCKET 3 Destination Hardware Address Register) S3_DIPR (SOCKET 3 Destination IP Address Register) S3_DPORT (SOCKET 3 Destination Port Register) S3_MSSR (SOCKET 3 Maximum Segment Size Register) SOCKET 3 Protocol of IP Header Field Register in IP raw mode 0xFE4315 S3_TOS SOCKET 3 IP Type of Service(TOS) Register 0xFE4316 S0_TTL SOCKET 3 IP Time to Live(TTL) Register W7100A Datasheet v1.2.3 78

0xFE4317 ~ Reserved 0xFE431D 0xFE431E S3_RXMEM_SIZE SOCKET 3 Receive Memory Size Register 0xFE431F S3_TXMEM_SIZE SOCKET 3 Transmit Memory Size Register 0xFE4320 S3_TX_FSR0 0xFE4321 S3_TX_FSR1 S3_TX_FSR (SOCKET 3 Transmit Free Memory Size Register) 0xFE4322 S3_TX_RD0 S3_TX_RD 0xFE4323 S3_TX_RD1 (SOCKET 3 Transmit Memory Read Pointer Register) 0xFE4324 S3_TX_WR0 S3_TX_WR 0xFE4325 0xFE4326 0xFE4327 S3_TX_WR1 S3_RX_RSR0 S3_RX_RSR1 (SOCKET 3 Transmit Memory Write Pointer Register) S3_RX_RSR (SOCKET 3 Received Data Size Register) 0xFE4328 S3_RX_RD0 S3_RX_RD 0xFE4329 S3_RX_RD1 (SOCKET 3 Receive Memory Read Pointer Register) 0xFE432A S3_RX_WR0 S3_RX_WR 0xFE432B S3_RX_WR1 (SOCKET 3 Receive Memory Write Pointer Register) 0xFE432C S3_IMR SOCKET 3 Interrupt Mask Register 0xFE432D S3_FRAG0 0xFE432E S3_FRAG1 SOCKET 3 Fragment Field Value in IP Header Register 0xFE432F ~ 0xFE43FF Reserved 0xFE4400 S4_MR SOCKET 4 Mode Register 0xFE4401 S4_CR SOCKET 4 Command Register 0xFE4402 S4_IR SOCKET 4 Interrupt Register 0xFE4403 S4_SR SOCKET 4 SOCKET Status Register 0xFE4404 0xFE4405 0xFE4406 0xFE4407 0xFE4408 0xFE4409 0xFE440A 0xFE440B S4_PORT0 S4_PORT1 S4_DHAR0 S4_DHAR1 S4_DHAR2 S4_DHAR3 S4_DHAR4 S4_DHAR5 S4_PORT (SOCKET 4 Source Port Register) S4_DHAR (SOCKET 4 Destination Hardware Address Register) W7100A Datasheet v1.2.3 79

0xFE440C S4_DIPR0 0xFE440D S4_DIPR1 0xFE440E S4_DIPR2 S4_DIPR (SOCKET 4 Destination IP Address Register) 0xFE440F S4_DIPR3 0xFE4410 S4_DPORT0 0xFE4411 S4_DPORT1 S4_DPORT (SOCKET 4 Destination Port Register) 0xFE4412 S4_MSSR0 0xFE4413 S4_MSSR1 S4_MSSR (SOCKET 4 Maximum Segment Size Register) 0xFE4414 S4_PROTO SOCKET 4 Protocol of IP Header Field Register in IP raw mode 0xFE4415 S4_TOS SOCKET 4 IP Type of Service(TOS) Register 0xFE4416 S4_TTL SOCKET 4 IP Time to Live(TTL) Register 0xFE4417 ~ Reserved 0xFE441D 0xFE441E S4_RXMEM_SIZE SOCKET 4 Receive Memory Size Register 0xFE441F S4_TXMEM_SIZE SOCKET 4 Transmit Memory Size Register 0xFE4420 S4_TX_FSR0 0xFE4421 S4_TX_FSR1 S4_TX_FSR (SOCKET 4 Transmit Free Memory Size Register) 0xFE4422 S4_TX_RD0 S4_TX_RD 0xFE4423 S4_TX_RD1 (SOCKET 4 Transmit Memory Read Pointer Register) 0xFE4424 S4_TX_WR0 S4_TX_WR 0xFE4425 0xFE4426 0xFE4427 S4_TX_WR1 S4_RX_RSR0 S4_RX_RSR1 (SOCKET 4 Transmit Memory Write Pointer Register) S4_RX_RSR (SOCKET 4 Received Data Size Register) 0xFE4428 S4_RX_RD0 S4_RX_RD 0xFE4429 S4_RX_RD1 (SOCKET 4 Receive Memory Read Pointer Register) 0xFE442A S4_RX_WR0 S4_RX_WR 0xFE442B S4_RX_WR1 (SOCKET 4 Receive Memory Write Pointer Register) 0xFE442C S4_IMR SOCKET 4 Interrupt Mask Register 0xFE442D S4_FRAG0 0xFE442E S4_FRAG1 SOCKET 4 Fragment Field Value in IP Header Register 0xFE442F ~ 0xFE44FF Reserved W7100A Datasheet v1.2.3 80

0xFE4500 S5_MR SOCKET 5 Mode Register 0xFE4501 S5_CR SOCKET 5 Command Register 0xFE4502 S5_IR SOCKET 5 Interrupt Register 0xFE4503 S5_SR SOCKET 5 SOCKET Status Register 0xFE4504 0xFE4505 0xFE4506 0xFE4507 0xFE4508 0xFE4509 0xFE450A 0xFE450B S5_PORT0 S5_PORT1 S5_DHAR0 S5_DHAR1 S5_DHAR2 S5_DHAR3 S5_DHAR4 S5_DHAR5 S5_PORT (SOCKET 5 Source Port Register) S5_DHAR (SOCKET 5 Destination Hardware Address Register) 0xFE450C S5_DIPR0 0xFE450D S5_DIPR1 S5_DIPR (SOCKET 5 Destination IP Address Register) 0xFE450E S5_DIPR2 S5_DIPR (SOCKET 5 Destination IP Address Register) 0xFE450F S5_DIPR3 0xFE4510 S5_DPORT0 0xFE4511 S5_DPORT1 S5_DPORT (SOCKET 5 Destination Port Register) 0xFE4512 S5_MSSR0 0xFE4513 S5_MSSR1 S5_MSSR (SOCKET 5 Maximum Segment Size Register) 0xFE4514 S5_PROTO SOCKET 5 Protocol of IP Header Field Register in IP raw mode 0xFE4515 S5_TOS SOCKET 5 IP Type of Service(TOS) Register 0xFE4516 S5_TTL SOCKET 5 IP Time to Live(TTL) Register 0xFE4517 ~ Reserved 0xFE451D 0xFE451E S5_RXMEM_SIZE SOCKET 5 Receive Memory Size Register 0xFE451F S5_TXMEM_SIZE SOCKET 5 Transmit Memory Size Register 0xFE4520 S5_TX_FSR0 0xFE4521 S5_TX_FSR1 S5_TX_FSR (SOCKET 5 Transmit Free Memory Size Register) 0xFE4522 S5_TX_RD0 S5_TX_RD 0xFE4523 S5_TX_RD1 (SOCKET 5 Transmit Memory Read Pointer Register) 0xFE4524 S5_TX_WR0 S5_TX_WR 0xFE4525 S5_TX_WR1 (SOCKET 5 Transmit Memory Write Pointer Register) W7100A Datasheet v1.2.3 81

0xFE4526 0xFE4527 S5_RX_RSR0 S5_RX_RSR1 S5_RX_RSR (SOCKET 5 Received Data Size Register) 0xFE4528 S5_RX_RD0 S5_RX_RD 0xFE4529 S5_RX_RD1 (SOCKET 5 Receive Memory Read Pointer Register) 0xFE452A S5_RX_WR0 S5_RX_WR 0xFE452B S5_RX_WR1 (SOCKET 5 Receive Memory Write Pointer Register) 0xFE452C S5_IMR SOCKET 5 Interrupt Mask Register 0xFE452D S5_FRAG0 S5_FRAG 0xFE452E S5_FRAG1 (SOCKET 5 Fragment Field Value in IP Header Register) 0xFE452F ~ 0xFE45FF Reserved 0xFE4600 S6_MR SOCKET 6 Mode Register 0xFE4601 S6_CR SOCKET 6 Command Register 0xFE4602 S6_IR SOCKET 6 Interrupt Register 0xFE4603 S6_SR SOCKET 6 SOCKET Status Register 0xFE4604 0xFE4605 0xFE4606 0xFE4607 0xFE4608 0xFE4609 0xFE460A 0xFE460B 0xFE460C 0xFE460D 0xFE460E 0xFE460F 0xFE4610 0xFE4611 0xFE4612 0xFE4613 S6_PORT0 S6_PORT1 S6_DHAR0 S6_DHAR1 S6_DHAR2 S6_DHAR3 S6_DHAR4 S6_DHAR5 S6_DIPR0 S6_DIPR1 S6_DIPR2 S6_DIPR3 S6_DPORT0 S6_DPORT1 S6_MSSR0 S6_MSSR1 S6_PORT (SOCKET 6 Source Port Register) S6_DHAR (SOCKET 6 Destination Hardware Address Register) S6_DIPR (SOCKET 6 Destination IP Address Register) S6_DPORT (SOCKET 6 Destination Port Register) S6_MSSR (SOCKET 6 Maximum Segment Size Register) W7100A Datasheet v1.2.3 82

0xFE4614 S6_PROTO SOCKET 6 Protocol of IP Header Field Register in IP raw mode 0xFE4615 S6_TOS SOCKET 6 IP Type of Service(TOS) Register 0xFE4616 S6_TTL SOCKET 6 IP Time to Live(TTL) Register 0xFE4617 ~ 0xFE461D Reserved 0xFE461E S6_RXMEM_SIZE SOCKET 6 Receive Memory Size Register 0xFE461F S6_TXMEM_SIZE SOCKET 6 Transmit Memory Size Register 0xFE4620 0xFE4621 S6_TX_FSR0 S6_TX_FSR1 S6_TX_FSR (SOCKET 6 Transmit Free Memory Size Register) 0xFE4622 S6_TX_RD0 S6_TX_RD 0xFE4623 S6_TX_RD1 (SOCKET 6 Transmit Memory Read Pointer Register) 0xFE4624 S6_TX_WR0 S6_TX_WR 0xFE4625 0xFE4626 0xFE4627 S6_TX_WR1 S6_RX_RSR0 S6_RX_RSR1 (SOCKET 6 Transmit Memory Write Pointer Register) S6_RX_RSR (SOCKET 6 Received Data Size Register) 0xFE4628 S6_RX_RD0 S6_RX_RD 0xFE4629 S6_RX_RD1 (SOCKET 6 Receive Memory Read Pointer Register) 0xFE462A S6_RX_WR0 S6_RX_WR 0xFE462B S6_RX_WR1 (SOCKET 6 Receive Memory Write Pointer Register) 0xFE462C S6_IMR SOCKET 6 Interrupt Mask Register 0xFE462D S6_FRAG0 S6_FRAG 0xFE462E S6_FRAG1 (SOCKET 6 Fragment Field Value in IP Header Register) 0xFE462F ~ 0xFE46FF Reserved 0xFE4700 S7_MR SOCKET 7 Mode Register 0xFE4701 S7_CR SOCKET 7 Command Register 0xFE4702 S7_IR SOCKET 7 Interrupt Register 0xFE4703 S7_SR SOCKET 7 SOCKET Status Register 0xFE4704 0xFE4705 S7_PORT0 S7_PORT1 S7_PORT (SOCKET 7 Source Port Register) W7100A Datasheet v1.2.3 83

0xFE4706 0xFE4707 0xFE4708 0xFE4709 0xFE470A 0xFE470B S7_DHAR0 S7_DHAR1 S7_DHAR2 S7_DHAR3 S7_DHAR4 S7_DHAR5 S7_DHAR (SOCKET 7 Destination Hardware Address Register) 0xFE470C S7_DIPR0 0xFE470D S7_DIPR1 0xFE470E S7_DIPR2 S7_DIPR (SOCKET 7 Destination IP Address Register) 0xFE470F S7_DIPR3 0xFE4710 S7_DPORT0 0xFE4711 S7_DPORT1 S7_DPORT (SOCKET 7 Destination Port Register) 0xFE4712 S7_MSSR0 0xFE4713 S7_MSSR1 S7_MSSR (SOCKET 7 Maximum Segment Size Register) 0xFE4714 S0_PROTO SOCKET 7 Protocol of IP Header Field Register in IP raw mode 0xFE4715 S7_TOS SOCKET 7 IP Type of Service(TOS) Register 0xFE4716 S7_TTL SOCKET 7 IP Time to Live(TTL) Register 0xFE4717 ~ Reserved 0xFE471D 0xFE471E S7_RXMEM_SIZE SOCKET 7 Receive Memory Size Register 0xFE471F S7_TXMEM_SIZE SOCKET 7 Transmit Memory Size Register 0xFE4720 S7_TX_FSR0 0xFE4721 S7_TX_FSR1 S7_TX_FSR (SOCKET 7 Transmit Free Memory Size Register) 0xFE4722 S7_TX_RD0 S7_TX_RD 0xFE4723 S7_TX_RD1 (SOCKET 7 Transmit Memory Read Pointer Register) 0xFE4724 S7_TX_WR0 S7_TX_WR 0xFE4725 0xFE4726 0xFE4727 S7_TX_WR1 S7_RX_RSR0 S7_RX_RSR1 (SOCKET 7 Transmit Memory Write Pointer Register) S7_RX_RSR (SOCKET 7 Received Data Size Register) 0xFE4728 S7_RX_RD0 S7_RX_RD 0xFE4729 S7_RX_RD1 (SOCKET 7 Receive Memory Read Pointer Register) 0xFE472A S7_RX_WR0 S7_RX_WR 0xFE472B S7_RX_WR1 (SOCKET 7 Receive Memory Write Pointer Register) W7100A Datasheet v1.2.3 84

0xFE472C S7_IMR SOCKET 7 Interrupt Mask Register 0xFE472D S7_FRAG0 S7_FRAG 0xFE472E 0xFE472F ~ 0xFE47FF S7_FRAG1 (SOCKET 7 Fragment Field Value in IP Header Register) Reserved 8.3 Register Description 8.3.1 Common Register MR (Mode Register) [R/W] [0xFE0000] [0x00] MR 은 S/W reset, ping block mode, PPPoE mode 에사용된다. 7 6 5 4 3 2 1 0 RST PB PPPoE Bit Symbol Description 7 RST S/W Reset 이 bit가 1 인경우내부 register는초기화되고 reset후에자동으로 clear 됨 6 Reserved Reserved 5 Reserved Reserved 4 PB Ping Block Mode 0 : Disable Ping block 1 : Enable Ping block If the bit is set as 1, there is no response to the ping request. 3 PPPoE PPPoE Mode 0 : Disable PPPoE mode 1 : Enable PPPoE 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] [0xFE0001 0xFE0004] [0x00] GAR 은 default gateway address 를설정할때사용한다. W7100A Datasheet v1.2.3 85

Ex) In case of 192.168.0.1 0xFE0001 0xFE0002 0xFE0003 0xFE0004 192 (0xC0) 168 (0xA8) 0 (0x00) 1 (0x01) SUBR (Subnet Mask Register) [R/W] [0xFE0005 0xFE0008] [0x00] SUBR은 subnet mask address를설정할때사용한다. Ex) In case of 255.255.255.0 0xFE0005 0xFE0006 0xFE0007 0xFE0008 255 (0xFF) 255 (0xFF) 255 (0xFF) 0 (0x00) SHAR (Source Hardware Address Register) [R/W] [0xFE0009 0xFE000E] [0x00] SHAR은 Source Hardware address를설정할때사용한다. Ex) In case of 00.08.DC.01.02.03 0xFE0009 0xFE000A 0xFE000B 0xFE000C 0xFE000D 0xFE000E 0x00 0x08 0xDC 0x01 0x02 0x03 SIPR (Source IP Address Register) [R/W] [0xFE000F 0xFE0012] [0x00] SIPR은 Source IP address를설정할때사용한다. Ex) In case of 192.168.0.2 0xFE000F 0xFE0010 0xFE0011 0xFE0012 192 (0xC0) 168 (0xA8) 0 (0x00) 2 (0x02) IR (Interrupt Register) [R] [0xFE0015] [0x00] IR은 interrupt 발생여부를판단하기위해 W7100A의 MCU에서 access한다. IR bit가 set되면 이 INT5(nINT5: TCPIPcore interrupt) 신호는 low 상태 asserted되고 IR의모든 bit들을 clear 하지않는이상 high상태로변하지않는다. IR은 MCU에 interrupt신호를발생시킨다. 7 6 5 4 3 2 1 0 CONFLICT UNREACH PPPoE Reserved Reserved Reserved Reserved Reserved Bit Symbol Description 7 CONFLICT 6 UNREACH IP Conflict ARP 요청에 Source IP address와같은 IP address응답이있다면, 이 bit는 1 로 set된다. 이 bit는 1 을 write함으로써 0 으로 clear할수있다. Destination unreachable W7100A는 UDP 데이터전송중에 destination IP address가존재하지않는경우 ICMP (Destination Unreachable) packet을수신할것이다. 이경우 UNREACH bit는 1 로 set된다. 이 bit는 1 을 write함으로써 0 으로 clear W7100A Datasheet v1.2.3 86

할수있다. 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 IMR (Interrupt Mask Register) [R/W] [0xFE0016] [0x00] IMR (Interrupt Mask Register) 는 interrupt masking하는데사용한다. 각 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_INT S6_INT S5_INT S4_INT S3_INT S2_INT S1_INT S0_INT Bit Symbol Description 7 S7_INT IR(S7_INT) Interrupt Mask 6 S6_INT IR(S6_INT) Interrupt Mask 5 S5_INT IR(S5_INT) Interrupt Mask 4 S4_INT IR(S4_INT) Interrupt Mask 3 S3_INT IR(S3_INT) Interrupt Mask 2 S2_INT IR(S2_INT) Interrupt Mask 1 S1_INT IR(S1_INT) Interrupt Mask 0 S0_INT IR(S0_INT) Interrupt Mask RTR (Retry Time-period Register) [R/W] [0xFE0017 0xFE0018] [0x07D0] RTR은 timeout 주기를설정한다. 이 register에서 1값이갖는의미는 100us와같다. Default timeout은 2000 (0x07D0) 즉, 200ms이다. Ex) For 400ms configuration, set as 4000(0x0FA0) 0xFE0017 0xFE0018 0x0F 0xA0 만약 peer로부터응답이없거나정해진 timeout시간보다 delay가길어질경우재전송이발생한다. W7100A Datasheet v1.2.3 87

RCR (Retry Count Register) [R/W] [0xFE0019] [0x08] RCR은재전송횟수를설정한다. 만약재전송횟수가 RCR에저장된횟수이상으로발생할경우, Timeout Interrupt가발생한다. (SOCKETn Interrupt Register (Sn_IR) 의 TIMEOUT bit는 1 로설정된다.) TCP 통신인경우, Sn_IR(TIMEOUT)= 1 과동시에 Sn_SR의값이 SOCK_CLOSED 로변경된다. 하지만 TCP 통신이아닌경우, Sn_IR(TIMEOUT) = 1 로설정되며 Sn_SR의값은변경되지않는다. W7100A에서는 RTR과 RCR로 Data 재전송의시간과횟수를설정할수있다. W7100A의 Timeout은 ARP retransmission timeout과 TCP retransmission timeout 2가지에의해발생할수있다. 먼저 ARP( RFC 826 참조, http://www.ietf.org/rfc.html) retransmission timeout을살펴보면, W7100A는 IP, UDP, TCP를이용한통신시상대방의 IP address로 MAC address를알기위해자동으로 ARP-request를전송한다. 이때상대방의 ARP-response 수신을기다리는데, RTR의설정대기시간동안 ARP-response의수신이없으면, Timeout이발생하고 ARPrequest를 Retransmission한다. 이와같은작업은 RCR + 1 만큼반복하게된다. RCR + 1 개의 ARP-request retransmission이일어나고, 그에대한 ARP-response가없다면, Final timeout이발생하게되고, Sn_IR(TIMEOUT) = 1 된다. ARP-request의 Final timeout(arp timeout) 값은다음과같다. ARP TO = ( RTR X 0.1ms ) X ( RCR + 1 ) TCP packet retransmission timeout을살펴보면, W7100A는 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_SSR이 SOCK_CLOSED 로변경된다. TCP packet retransmission의 Final timeout(tcp timeout) 값은다음과같다. N Ex) RTR = 2000(0x07D0), RCR = 8(0x0008) 일때, ARP TO = 2000 X 0.1ms X 9 = 1800ms = 1.8s M TCPTO = ( Σ(RTR X 2 N ) + ((RCR-M) X RTRMAX) ) X 0.1ms N=0 : Retransmission count, 0 <= N <= M M : RTR X 2 (M+1) > 65535 and 0 <= M <= RCR를만족하는최소값 RTR MAX : RTR X 2 M (ARP TO = ARP timeout, TCP TO = TCP timeout) 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] [0xFE001C-0xFE001D] [0x0000] W7100A Datasheet v1.2.3 88

PATR은 PPPoE 연결을위한인증 type을알려준다. W7100A는 PAP와 CHAP의 2가지 type의인증방법을지원한다. Value Authentication Type 0xC023 PAP 0xC223 CHAP PPPALGO (Authentication Algorithm in PPPoE mode) [R] [0xFE001E] [0x00] PPPALGO 는 PPPoE 연결의인증알고리즘을알려준다. 자세한정보는 PPPoE application note 를참고하기바란다. PTIMER (PPP Link Control Protocol Request Timer Register) [R/W] [0xFE0028] [0x28] 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] [0xFE0029] [0x00] PMAGIC 은 LCP negotiation 도중에 Magic number option 을설정하는데사용된다. W5100 의 Application note How to connect ADSL 을참조하기바란다. VERSIONR (W7100A Chip Version Register) [R] [0xFE001F] [0x02] VERSIONR 은 W7100A chip version 을나타내는 register 이다. INTLEVEL (Interrupt Low Level Timer Register)[R/W][0xFE0030 0xFE0031][0x0000] INTLEVEL register는 Interrupt Assert wait time(i AWT ) 을설정한다. 다음 interrupt가발생했을때설정한시간 (I AWT ) 만큼기다린다음칩내부의 INT5 신호를 Low로 assert한다. TCP/IP Core interrupt를사용하고자한다면, 이 register값은반드시최소 0x2B00 이상으로설정하여야한다. 그렇지않으면 MCU에서 TCP/IP Core interrupt가무시될수도있다. I AWT = (INTLEVEL0 + 1) * PLL_CLK (when INTLEVEL0 > 0) PLL_CLK 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 IR2 0x0000 0x0001 0x0003 0x0002 S0_IR 0x00 0x04 0x00 b. S1_IR 0x00 0x01 /INT a. c. I AWT d. W7100A Datasheet v1.2.3 89

a. 소켓0 에서 interrupt가발생했다면 (S0_IR(3) = 1 해당 IR2 bit도 1 로 set되고 INT5신호는 Low로 assert된다. b. 연속해서소켓1 에서 interrupt가발생하면 (S1_IR1(0) = 1 ) 해당 IR2 bit가 1 로 set된다. c. MCU는 S0_IR을 clear(s0_ir1 = 0x00) 하고해당 IR2 bit 또한 clear한다. 칩내부의 IN T5신호는 low에서 (activated) High로 (deactivated) 변한다. d. 여기서 S0_IR이 clear되었지만, socket1 interrupt 때문에 IR2의값은 0x00이아니다. 따라서칩내부의 INT5신호는 Low로 assert되어야한다. 이때 INTLEVEL register의값이 0x000F라면칩내부의 INT5신호는 I AWT (16 PLL_CLK) time 후에 Low로 assert될것이다. IR2 (W7100A SOCKET Interrupt Register) [R/W] [0xFE0034] [0x00] IR2는 W7100A SOCKET interrupt가발생할경우이것을알려주는 register이다. Interrupt가발생했을때, IR2의해당 bit가 set된다. 이경우 IR2의모든 bit들이 0 으로 clear될때까지 INT5(nINT5: TCPIPCore interrupt) 신호는 low상태가된다. Sn_IR bit들을이용해서 IR2 register를 clear하면 INT5 신호는 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 Occurrence of SOCKET 7 Interrupt 7 S7_INT 6 S6_INT 5 S5_INT 4 S4_INT SOCKET 7에서 interrupt가발생한경우, 이 bit는 1 로되고이 interrupt 정보는 S7_IR에반영된다. 이 bit는사용자에의해 S7_IR가 0x00으로 clear되면이에따라자동으로 clear된다. Occurrence of SOCKET 6 Interrupt SOCKET 6에서 interrupt가발생한경우, 이 bit는 1 로되고이 interrupt 정보는 S6_IR에반영된다. 이 bit는사용자에의해 S6_IR가 0x00으로 clear되면이에따라자동으로 clear된다. Occurrence of SOCKET 5 Interrupt SOCKET 5에서 interrupt가발생한경우, 이 bit는 1 로되고이 interrupt 정보는 S5_IR에반영된다. 이 bit는사용자에의해 S5_IR가 0x00으로 clear되면이에따라자동으로 clear된다. Occurrence of SOCKET 4 Interrupt SOCKET 4에서 interrupt가발생한경우, 이 bit는 1 로되고이 interrupt 정보는 S4_IR에반영된다. 이 bit는사용자에의해 S4_IR가 0x00으로 clear되면이에따라자동으로 clear된다. W7100A Datasheet v1.2.3 90

Occurrence of SOCKET 3 Interrupt 3 S3_INT 2 S2_INT 1 S1_INT 0 S0_INT SOCKET 3에서 interrupt가발생한경우, 이 bit는 1 로되고이 interrupt 정보는 S3_IR에반영된다. 이 bit는사용자에의해 S3_IR가 0x00으로 clear되면이에따라자동으로 clear된다. Occurrence of SOCKET 2 Interrupt SOCKET 2에서 interrupt가발생한경우, 이 bit는 1 로되고이 interrupt 정보는 S2_IR에반영된다. 이 bit는사용자에의해 S2_IR가 0x00으로 clear되면이에따라자동으로 clear된다. Occurrence of SOCKET 1 Interrupt SOCKET 1에서 interrupt가발생한경우, 이 bit는 1 로되고이 interrupt 정보는 S1_IR에반영된다. 이 bit는사용자에의해 S1_IR가 0x00으로 clear되면이에따라자동으로 clear된다. Occurrence of SOCKET 0 Interrupt SOCKET 0에서 interrupt가발생한경우, 이 bit는 1 로되고이 interrupt 정보는 S0_IR에반영된다. 이 bit는사용자에의해 S0_IR가 0x00으로 clear되면이에따라자동으로 clear된다. 8.3.2 SOCKET Registers Sn_MR (SOCKET n Mode Register)[R/W][0xFE4000 + 0x100n][0x0000] 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 6 MF 5 ND/MC Multicasting 0 : disable Multicasting 1 : enable Multicasting 이기능은 UDP의경우에만적용됨 (P3-P0 : 0010 ) Multicasting을사용하기위해 OPEN 명령이전에 SOCKET n destination IP와 port register에각각 multicast group address와 port number를 write함 MAC Filter 0: disable MAC filtering 1: enable MAC filtering 자신의 MAC주소와 broadcasting MAC을제외한나머지 MAC주소는 filtering 하여수신하지않는다. Use No Delayed ACK 0 : Disable No Delayed ACK option W7100A Datasheet v1.2.3 91

1 : Enable No Delayed ACK option, 이기능은 TCP의경우에만적용됨 (P3-P0: 0001 ) 만약이 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 ) 추가적으로 multicast는 IGMP message에 Join/Leave/Report와같은 version number를 Multicast group으로보냄 4 Reserved Reserved 3 P3 Protocol 해당 SOCKET의 TCP, UDP, IPRAW등의 protocol을설정함 Symbol P3 P2 P1 P0 Meaning Sn_MR_CLOSE 0 0 0 0 Closed 2 P2 Sn_MR_TCP 0 0 0 1 TCP Sn_MR_UDP 0 0 1 0 UDP 1 P1 Sn_MR_IPRAW 0 0 1 1 IPRAW S0_MR_MACRAW 0 1 0 0 MAC RAW S0_MR_PPPoE 0 1 0 1 PPPoE 0 P0 S0_MR_MACRAW와 S0_MR_PPPoE는 SOCKET 0에만쓸수있음 S0_MR_PPPoE는임시로 PPPoE server connection/termination에사용되지만, Connection이잡히면, 다른 protocol로사용될수있음 Sn_CR (SOCKET n Command Register) [R/W] [0xFE4001 + 0x100n] [0x00] Sn_CR은 OPEN, CLOSE, CONNECT, LISTEN, SEND, RECEIVE와같은 SOCKET n의명령을설정하 는데사용한다. W7100A이명령을인식하고난다음 Sn_CR은 W7100A에의해자동으로 clear 된다. Sn_CR이 0x00으로 clear되었더라도, 해당명령은여전히처리중일수있다. Sn_CR의명령처리가완료되었는지는 Sn_IR이나 Sn_SR을확인하면된다. Value Symbol Description 0x01 OPEN SOCKET n은초기화되고 Sn_MR (P3:P0) 로선택한 protocol에따라 open된다. 아래테이블은 Sn_MR에따른 Sn_SR값을보여준다. Sn_MR(P3:P0) Sn_SR Sn_MR_CLOSE(0x00) - Sn_MR_TCP(0x01) SOCK_INIT(0x13) Sn_MR_UDP(0x02) SOCK_UDP(0x22) W7100A Datasheet v1.2.3 92

Sn_MR_IPRAW(0x03) S0_MR_MACRAW(0x04) S0_MR_PPPoE(0x05) SOCK_IPRAW(0x32) SOCK_MACRAW(0x42) 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가존재하지않을경우, W7100A는 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 에게 Connectrequest(SYN packet) 를전송한다. Connect-request가성공했을경우 (SYN/ACK packet을수신했을경우 ), Sn_IR(0)= 1 로되고 Sn_SSR은 SOCK_ESTABLISHED로변경된다. Connect-request가실패했을경우는다음과같이 3가지가있다. - ARP-process를통해 Destination hardware address를얻지못하여 ARP timeout이발생 (Sn_IR(3)= 1 ) 한경우 - SYN/ACK packet를수신못하고 TCP timeout이발생 (Sn_IR(3)= 1 ) 한경우 - SYN/ACK packet 대신 RST packet을수신했을경우. 위와같은경우 Sn_SR은 SOCK_CLOSED상태로바뀐다. DISCON은 TCP mode일때만유효하다. W7100A는 TCP SERVER 와 TCP CLIENT 에상관없이, 접속중인상대방에게 Disconnect-request(FIN packet) 를전송하거나 (Active close), 상대방으로부터 Disconnect-request(FIN packet) 을수신했을때 (Passive close), W7100A는 FIN packet을전송한다 (Disconnect-process). Disconnect-request가성공했다면 (FIN/ACK packet을수신했을경우 ), Sn_SR은 SOCK_CLOSED로변경된다. 그러나 Disconnect-request가실패했다면, TCP timeout이발생 (Sn_IR(3)= 1 ) 하고 Sn_SR은 SOCK_CLOSED 로변경된다. cf> DISCON 대신 CLOSE를사용할경우, Disconnect-process(disconnect- W7100A Datasheet v1.2.3 93

request 전송 ) 없이, 단지 Sn_SR만 SOCK_CLOSED로변경된다. 그리고통신중상대방으로부터 RST packet을수신할경우, 무조건 Sn_SR은 SOCK_CLOSED로변경된다. 0x10 CLOSE SOCKET n 을 close한다. 이때 Sn_SR은 SOCK_CLOSED로변경된다. 0x20 SEND SEND는 TX memory의 buffer에전송되지않은데이터를송신한다. 자세한사항은 SOCKET n TX Free Size Register (Sn_TX_FSR0), SOCKET n TX Write Pointer Register (Sn_TX_WR), SOCKET n TX Read Pointer Register(Sn_TX_RD) 를참고하기바란다. SEND_MAC은 UDP mode일때만유효하다. 기본동작은 SEND와 같다. SEND는자동으로 ARP-process를통해 0x21 SEND_MAC Destination hardware address를얻은후 Data를전송하는반면, SEND_MAC은 Host가설정한 Sn_DHAR을 Destination hardware address 로하여 Data를전송한다. 0x22 SEND_KEEP SEND_KEEP은 TCP mode일때만유효하다. Keep alive packet을송신하여 connection이유효한지확인한다. 만약상대방이더이상응답이없어서 connection이유효하지않은경우 connection을종료한다. Timeout interrupt가발생한다. 0x40 RECV RECV는 RX read pointer register (Sn_RX_RD) 를이용해서데이터를수신한다. 자세한사항은 9.2.1.1 SERVER mode의 Receiving Process와 SOCKET n RX Received Size Register (Sn_RX_RSR), SOCKET n RX Write Pointer Register(Sn_RX_WR), and SOCKET n RX Read Pointer Register(Sn_RX_RD) 를참고하기바란다. 아래명령어들은오직 SOCKET 0 에서 S0_MR(P3:P0) = S0_MR_PPPoE 일때만유효하다. 자세한사항은 W5100 application note How to use ADSL 을참고하기바란다. 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 전송 Sn_IR (SOCKET n Interrupt Register)[R/W][0xFE4002 + 0x100n][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해야한다. Sn_IR의모든 bit들 W7100A Datasheet v1.2.3 94

이 clear되면, IR(n) 은자동으로 clear된다. Sn_IR은 MCU에 INT5신호 (nint5: TCPIPCore interrupt) 를발생시킨다. 7 6 5 4 3 2 1 0 PRECV PFAIL PNEXT SEND_OK TIMEOUT RECV DISCON CON Bit Symbol Description 7 PRECV PPP Receive Interrupt, 지원하지않는옵션데이터를수신한경우 6 PFAIL PPP Fail Interrupt, PAP 인증이실패한경우 5 PNEXT PPP Next Phase Interrupt, ADSL연결과정에서 phase가변할경우 4 SENDOK SEND OK Interrupt, SEND명령이완료되면 3 TIMEOUT TIMEOUT Interrupt, ARP timeout혹은 TCP timeout이발생한경우 2 RECV Receive Interrupt, peer로부터데이터 packet이수신된경우 1 DISCON Disconnect Interrupt, peer로부터 FIN/ACK packet의 FIN이수신된경우 0 CON Connect Interrupt, peer 와연결이성립되어 SOCKET status 가 established 로바뀔때 1 번발생함 Sn_IMR (SOCKET n Interrupt Mask Register)[R/W][0xFE402C + 0x100n][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 W7100A Datasheet v1.2.3 95

0 CON Sn_IR(CON) Interrupt Mask Sn_SR (SOCKET n Status Register)[R][0xFE4003 + 0x100n][0x00] Sn_SR은 SOCKETn의 SOCKET 상태를알려준다. SOCKET status는 Sn_CR의 Command나, packet 송수신중에변경될수있다. 아래테이블은 SOCKET n 의여러가지상태를나타낸것이다. Value Symbol Description 0x00 SOCK_CLOSED SOCKET n의 resource가 release된상태로서 DISCON, CLOSE command가수행되거나 ARP timeout, TCP timeout이발생했을경우이전값에관계없이상태가변한다. 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 의 Connectrequest (SYN packet) 를성공적으로처리했을경우 Sn_SR의상태는 SOCK_ESTABLISHED로바뀌고, 실패했을경우 TCP timeout이발생 (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과달리 W7100A Datasheet v1.2.3 96

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 SOCKET0이 MACRAW mode로 Open된상태, S0_MR(P3:P0) = S0_MR_MACRAW인상태에서 OPEN 명령이수행되었을때 Sn_SR은 SOCK_MACRAW상태로바뀐다. UDP mode SOCKET처럼 connection-process없이직접 MAC packet (Ethernet frame) 을송수신할수있다. 0x5F SOCK_PPPOE SOCKET0이 PPPoE mode로 Open된상태, S0_MR(P3:P0) = S0_MR_PPPoE인상태에서 OPEN 명령이수행되었을때 Sn_SR은 SOCK_PPPOE상태로바뀐다. 아래테이블에 Sn_SR의상태가변할때나타나는일시적인상태들을설명하였다. Value Symbol Description 0x15 SOCK_SYNSENT SOCK_SYNSENT상태는 TCP SERVER 에게 Connect-request (SYN packet) 를전송한상태로서, CONNECT 명령에의해 Sn_SR의상태가 SOCK_INIT에서 SOCK_ESTABLISEHD로바뀔때나타난다. 이상태에서 TCP SEVER 로부터 Connect-accept (SYN/ACK packet) 를수신할경우자동으로 SOCK_ ESTABLISHED상태로바뀐다. 하지만 TCP SEVER 로부터 TCP timeout이발생하기전까지 (Sn_IR(TIMEOUT)= 1 ) SYN/ACK packet을수신하지못할경우에는 SOCK_CLOSED 상태로바뀐다. 0x16 SOCK_SYNRECV SOCK_SYNRECV상태는 TCP CLIENT 로부터 connect-request (SYN packet) 를수신한상태로서, 이상태에서 W7100A이 connect-request에대한응답으로 connect-accept (SYN/ACK packet) 을 TCP CLIENT 에게성공적으로전송하였을경우에는자동으로 SOCK_ESTABLISHED상태로바뀐다. 하지만전송 에 실패하였을 경우 Timeout interrupt가 발생하고 (Sn_IR(TIME OUT)= 1 ) SOCK_CLOSED상태로바뀐다. 0x18 0x1A SOCK_FIN_WAIT SOCK_CLOSING SOCKETn이 Closing되는상태로서, Active close나 Passive close인경우의 Disconnect-process에서나타나는상태다. W7100A Datasheet v1.2.3 97

0X1B SOCK_TIME_WAIT Disconnect-process 과정이성공적으로완료되거나, Timeout interrupt가발생하면 (Sn_IR(TIMEOUT)= 1 ) SOCK_CLOSED상태로변한다. 0X1D SOCK_LAST_ACK Passive close인경우송신한마지막 FIN패킷에대한 ACK를기다리는상태, ACK패킷을수신한경우또는 timeout이발생한경우 SOCK_CLOSED상태로변한다. 0x01 SOCK_ARP Destination hardware address를찾기위해 peer로 ARPrequest를전송하는상태로서 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 이다를경 우에만 ARP-process 가동작한다. W7100A Datasheet v1.2.3 98

Figure 8.2 SOCKET n Status transition Sn_PORT (SOCKET n Source Port Register)[R/W][(0xFE4004 + 0x100n) (0xFE4005 + 0x100n)][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, 0xFE4004 0xFE4005 0x13 0x88 Sn_DHAR (SOCKET n Destination Hardware Address Register)[R/W][(0xFE4006 + 0x100n) (0xFE400B + 0x100n)][FF.FF.FF.FF.FF.FF] 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나 W7100A Datasheet v1.2.3 99

SEND command에의한 ARP-process를통해획득한 Destination hardware address로설정된다. Host는 CONNECT나 SEND command 성공이후 Sn_DHAR을통해 Destination hardware address를알수있다. PPPoE mode에서, W7100A의 PPPoE-process를이용할경우 PPPoE server hardware address를따로설정할필요는없다. 하지만 W7100A의 PPPoE-process를이용하지못하고 MACRAW mode로 PPPoE-process를직접구현하여처리한경우라할지라도, PPPoE packet을송수신하기위해서는, 직접구현한 PPPoE-process를통해획득한 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 = 00.08.DC.01.02.10, configu ration is as below, 0xFE4006 0xFE4007 0xFE4008 0xFE4009 0xFE400A 0xFE400B 0x00 0x08 0xDC 0x01 0x02 0x10 Sn_DIPR (SOCKET n Destination IP Address Register)[R/W][(0xFE400C + 0x100n) (0xFE400F + 0x100n)][00.00.00.00] 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, 0xFE400C 0xFE400D 0xFE400E 0xFE400F 192 (0xC0) 168 (0xA8) 0 (0x00) 11 (0x0B) Sn_DPORT (SOCKET n Destination Port Register)[R/W][(0xFE4010 + 0x100n) (0xFE4011 + 0x100n)][0x0000] Sn_DIPR은 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로 W7100A Datasheet v1.2.3 100

설정하고, 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, 0xFE4010 0xFE4011 0x13 0x88 Sn_MSSR (SOCKET n Maximum Segment Size Register)[R/W][(0xFE4012 + 0x100n) (0xFE4013 + 0x100n)][0x0000] Sn_MSSR은 SOCKETn의 MTU(Maximum Transfer Unit) 를설정하거나, 설정된 MTU를알려준다. TCP나 UDP mode만지원하며, PPPoE를사용할경우 (MR(PPPoE)= 1 ) PPPoE의 MTU내에서 TCP나 UDP mode의 MTU가결정된다. IPRAW나 MACRAW는자동으로 MTU를처리하지않고 Default MTU가적용되므로, Host는 Default MTU보다큰 Data를전송할때 Data를 Default MTU 단위로직접 (Manually) 나누어전송해야한다. Reset시초기값은 0이지만, 소켓초기화과정에서사용자가설정한값과 default MTU값중작은값으로 MSSR값이결정된다. 사용자가설정한값이없다면 default 값으로설정된다. TCP나 UDP mode에서는 Host가전송할 Data가설정된 MTU보다클경우, W7100A는설정된 MTU 단위로 Data를자동으로나누어전송한다. MTU는 TCP mode에서 MSS라불리며, MSS는 TCP connection 과정을통해 Host-Written-Value(Host 설정값 ) 와상대방의 MSS 값중작은값으로자동으로설정된다. UDP mode에서는 TCP mode와같은 Connection-process가없고 Host-Written-Value를그대로사용한다. MTU가서로다른상대방과통신할경우, W7100A는 ICMP(Fragment MTU) packet을수신할수있다. 이경우 IR(FMTU)= 1 가되고 Host는 FMTUR을통해 Fragment MTU를알수있다. IR(FMTU)= 1 일경우그상대방과는 UDP 통신이불가능하므로, 해당 SOCKET을 close하고알아낸 FMTU를 Sn_MSSR로설정한후 OPEN command로 open하여다시통신을시도한다. 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 W7100A Datasheet v1.2.3 101

MACRAW 1514 Ex) In case of SOCKET 0 MSS = 1460(0x05B4), configure as below, 0xFE4012 0xFE4013 0x05 0xB4 Sn_PROTO (SOCKET n Protocol Number Register)[R/W][0xFE4014 + 0x100n][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 의범위내에서설정가능하나, W7100A는 TCP(0x06), UDP(0x11) protocol number는지원하지않는다. Protocol number는 IANA (Internet Assigned Numbers Authority) 에서정의하고있으며, 더자세한사항은 IANA의 online document (http://www.iana.org/assignments/protocol-numbers) 를참조하기바란다. Ex) Internet Control Message Protocol(ICMP) = 0x01, Internet Group Management Pr otocol = 0x02 Sn_TOS (SOCKET n TOS Register)[R/W][0xFE4015 + 0x100n][0x00] Sn_TOS는 IP layer에서 IP header의 TOS(Type of service) field를설정한다. Sn_TOS는 OPEN command 이전에설정해야한다. 자세한사항은 http://www.iana.org/assignments/ipparameters 참조하기바란다. Sn_TTL (SOCKET n TTL Register)[R/W][0xFE4016 + 0x100n][0x80] Sn_TTL은 IP layer에서 IP header의 TTL(Time to live) field를설정한다. Sn_TTL은 OPEN command 이전에설정해야한다. 자세한사항은 http://www.iana.org/assignments/ipparameters 참조하기바란다. Sn_RXMEM_SIZE (SOCKET n Receive Memory Size Register)[R/W][0xFE401E + 0x100n][0x02] Sn_RXMEM_SIZE는각 SOCKET의 RX memory size를설정한다. 각 SOCKET의 RX memory 1, 2, 4, 8, 16Kbyte크기로설정할수있다. Reset후에초기값으로 2Kbyte의값을갖는다. Sn_RXMEM_SIZE SUM ( 각 Sn_RXMEM_SIZE의총합 ) 은최대 16Kbyte를넘을수없다. Ex1) SOCKET 0 : 8KB, SOCKET 1 : 2KB 0xFE401E 0xFE411E 0x08 0x02 W7100A Datasheet v1.2.3 102

Ex2) SOCKET 2 : 1KB, SOCKET 3 : 1KB 0xFE421E 0xFE431E 0x01 0x01 Ex3) SOCKET 4 : 1KB, SOCKET 5 : 1KB 0xFE441E 0xFE451E 0x01 0x01 Ex4) SOCKET 6 : 1KB, SOCKET 7 : 1KB 0xFE461E 0xFE471E 0x01 0x01 As shown above ex1) ~ ex4), total size of each SOCKET s RX memory (Sn_RXMEM_SI ZE SUM ) is 16Kbytes. Sn_TXMEM_SIZE (SOCKET n Transmit Memory Size Register)[R/W][0xFE401F + 0x100n][0x02] Sn_TXMEM_SIZE는각 SOCKET의 TX memory size를설정한다. 각 SOCKET의 TX memory 1, 2, 4, 8, 16Kbyte크기로설정할수있다. Reset후에초기값으로 2Kbyte의값을갖는다. Sn_TXMEM_SIZE SUM ( 각 Sn_TXMEM_SIZE의총합 ) 은최대 16Kbyte를넘을수없다. Ex5) SOCKET 0 : 4KB, SOCKET 1 : 1KB 0xFE401F 0xFE411F 0x04 0x01 Ex6) SOCKET 2 : 2KB, SOCKET 3 : 1KB 0xFE421F 0xFE431F 0x02 0x01 Ex7) SOCKET 4 : 2KB, SOCKET 5 : 2KB 0xFE441F 0xFE451F 0x02 0x02 Ex8) SOCKET 6 : 2KB, SOCKET 7 : 2KB 0xFE461F 0xFE471F 0x02 0x02 As shown above ex5) ~ ex8), total size of each SOCKET s TX memory (Sn_TXMEM_SI ZE SUM ) is 16Kbytes. W7100A Datasheet v1.2.3 103

Sn_TX_FSR (SOCKET n TX Free Size Register)[R][(0xFE4020 + 0x100n) (0xFE4021 + 100n)][0x0000] Sn_TX_FSR은 SOCKET n의 Internal TX memory의 Free size( 전송가능한데이터의 Byte size) 를알려준다. 데이터전송전에 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만큼자동으로증가하게된다. Ex) In case of 2048(0x8000) in S0_TX_FSR, 0xFE4020 0xFE4021 0x08 0x00 Sn_TX_RD (SOCKET n TX Read Pointer Register)[R][(0xFE4022 + 0x100n) (0xFE4023 + 0x100n)][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 (0xFE4022, 0xFE4122, 0xFE4222, 0xFE4322, 0xFE4422, 0xFE4522, 0xFE4622, 0xFE4722) 들을먼저읽어야하고다음 lower byte (0xFE4023, 0xFE4123, 0xFE4223, 0xFE4323, 0xFE4423, 0xFE4523, 0xFE4623, 0xFE4723) 들을읽어야한다. Sn_TX_WR (SOCKET n TX Write Pointer Register)[R/W][(0xFE4024 + 0x100n) (0xFE4025 + 0x100n)][0x0000] Sn_TX_WR은전송할데이터가 write되어야할위치정보를알려준다. 이 register를읽을때, 사용자는정확한값을얻기위해 upper byte (0xFE4024, 0xFE4124, 0xFE4224, 0xFE4324, 0xFE4424, 0xFE4524, 0xFE4624, 0xFE4724) 들을먼저읽어야하고다음 lower byte (0xFE4025, 0xFE4125, 0xFE4225, 0xFE4325, 0xFE4425, 0xFE4525, 0xFE4625, 0xFE4725) 들을읽어야한다. Ex) In case of 2048(0x0800) in S0_TX_WR, 0xFE4024 0xFE4025 0x08 0x00 하지만이값은 write할 physical address가아니므로, physical address는다음과같이계산해야한다. (W7100A Driver code 참조 ) 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 범위에서 Sn_TX_WR과 SMASK(n) 를통해 offset address (dst_mask) 를얻는다. W7100A Datasheet v1.2.3 104

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명령을내린다. Figure 8.3 Calculate Physical Address Sn_RX_RSR (SOCKET n RX Received Size Register)[R][(0xFE4026 + 0x100n) (0xFE4027 + 0x100n)][0x0000] Sn_RX_RSR은 SOCKETn의 Internal RX memory의수신데이터 byte size를알려준다. 이값은 W7100A Datasheet v1.2.3 105

SOCKET n Command Register (Sn_CR) RECV 명령어에의해자동으로변하고 remote peer로부터데이터를수신한다. 이 register를 read할때, 정확한값을얻기위해사용자는상위 byte (0xFE4026, 0xFE4126, 0xFE4226, 0xFE4326, 0xFE4426, 0xFE4526, 0xFE4626, 0xFE4726) 를먼저 read 하고그다음하위 byte (0xFE4027, 0xFE4127, 0xFE4227, 0xFE4327, 0xFE4427, 0xFE4527, 0xFE4627, 0xFE4727) 를 read한다. Ex) In case of 2048(0x0800) in S0_RX_RSR, 0xFE4026 0xFE4027 0x08 0x00 Sn_RX_RSR 값의총합은 RX memory size register의값에따라달라질수있다. Sn_RX_RD (SOCKET n Read Pointer Register)[R/W][(0xFE4028 + 0x100n) (0xFE4029 + 0x100n)][0x0000] Sn_RX_RD는수신데이터를 read하기위한 pointer의위치정보를제공한다. 이 register를 read할때, 사용자는정확한값을 read하기위해상위 byte (0xFE4028, 0xFE4128, 0xFE4228, 0xFE4328, 0xFE4428, 0xFE4528, 0xFE4628, 0xFE4728) 를먼저 read한다음하위 byte (0xFE4029, 0xFE4129, 0xFE4229, 0xFE4329, 0xFE4429, 0xFE4529, 0xFE4629, 0xFE4729) 를 read 해야한다. Ex) In case of 2048(0x0800) in S0_RX_RD, 0x0428 0x0429 0x08 0x00 하지만이값은 read할 physical address가아니므로, physical address는다음과같이계산해야한다. (W7100A Driver code 참조 ) 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명령을내린다. Sn_RX_WR (SOCKET n RX Write Pointer Register)[R/W][(0xFE402A + 0x100n) (0xFE402B + 0x100n)][0x0000] Sn_RX_WR은수신데이터를 write하기위한 pointer의위치정보를제공한다. 이 register를 W7100A Datasheet v1.2.3 106

read할때, 사용자는정확한값을 read하기위해상위 byte (0xFE402A, 0xFE412A, 0xFE422A, 0xFE432A, 0xFE442A, 0xFE452A, 0xFE462A, 0xFE472A) 를먼저 read하고난다음하위 byte (0xFE402B, 0xFE412B, 0xFE422B, 0xFE432B, 0xFE442B, 0xFE452B, 0xFE462B, 0xFE472B) 를 read 해야한다. Ex) In case of 2048(0x0800) in S0_RX_WR, 0xFE402A 0xFE402B 0x08 0x00 Sn_FRAG (SOCKET n Fragment Register)[R/W][(0xFE402D + 0x100n) (0xFE402E + 0x100n)][0x4000] Sn_FRAG는 IP layer에서 IP header의 Fragment field를설정한다. W7100A는 IP layer의 packet fragment를지원하지않는다. 따라서 Sn_FRAG를설정하더라도 IP data는 fragment되지않으며이를설정하는것은권장하지않는다. Sn_FRAG는 OPEN command 이전에설정한다. Ex) Sn_FRAG0 = 0x4000 (Don t Fragment) 0xFE402D 0xFE402E 0x40 0x00 W7100A Datasheet v1.2.3 107

9 Functional Description W7100A는내부에 general 8051 core와 TCPIPCore를포함하고있어, 다른어떠한추가장치없이 Ethernet application에사용이가능하다. 이 chapter에서는 W7100A의초기화와각 Protocol(TCP, UDP, IPRAW, MACRAW) 에따른통신방법에대하여각단계별로 Pseudo code와함께살펴본다. 9.1 Initialization W7100A 의초기화는 8051 MCU 설정, Network 정보설정, Internal TX/RX memory 설정의 3 단계로이루어진다. STEP 1 : Initializes MCU 1. Interrupt setting 일반적인 8051과같이사용할인터럽트의 enable / disable의상태를설정해야한다. 자세한내용은 section 3 Interrupt 를참고하면된다. 2. Memory Access timing setting Memory access timing은 2개의레지스터로설정할수있다. Data memory access timing 을조절할수있는 CKCON(0x8E) 레지스터와 Program memory access timing을조절할수있는 WTST(0x92) 레지스터의설정을통해 memory access timing을설정할수있다. 이두레지스터는모두 0~7까지설정이가능하지만 W7100A에서는 CKCON은 1~7, WTST 는 4~7의값이설정가능하고, 나머지값은사용되지않는다. 만약사용자가위의값보다작은값으로설정을한다면 W7100A이제대로동작하지않을수있다. 자세한내용은 section 2.5 SFRs definition' 을참고하면된다. Ex) Setting: 인터럽트를사용하지않고, 외부데이터메모리와 2 clock의 access time을갖고, 프로그램메모리와는 7 clock의 access time을갖게설정 EA = 0; // Disable all interrupts CKCON = 0x01; // Set data memory access time WTST = 0x06; // Set code memory access time 3. 시리얼통신을위한 baud rate, register, interrupt 설정 1) Serial 통신을위해설정해줘야하는 W7100A 의레지스터는 TMOD, PCON, SCON 이며구 성은아래와같다. 1 TMOD(89H): serial 통신에사용할 timer/counter 의모드를결정한다. GATE C/T M 1 M 0 GATE C/T M 1 M 0 W7100A Datasheet v1.2.3 108

Table 9.1 Timer / Counter Mode M 1 M 0 Mode 0 0 0 0 1 1 1 0 2 1 1 3 2 PCON(87H): serial 전송의 rate를제어하는플래그인 SMOD bit를결정한다. SMOD - - - - - - - Table 9.2 Baud rate Mode SMOD = 0 SMOD = 1 Timer/Counter 1의 Timer/Counter 1의 overflow 1, 3 overflow를 1/2 2 XTAL을 1/4 XTAL을 1/2 3 SCON(98H): serial port의제어와 serial port의상태를감시하기위한레지스터이다. SM 0 SM 1 SM 2 REN TB 8 RB 8 TI RI Table 9.3 Mode of UART SM 0 SM 1 Mode 0 0 0 0 1 1 1 0 2 1 1 3 SM 2 : Mode 2, 3에서사용. 이 bit를 1로설정하면, 수신데이터의 9번bit가 1 이면 데이터를수신, 0 이면데이터를무시한다. REN : 수신 enable bit( 1 이면수신가능 ) TB 8 : 모드 2, 3에서송신데이터의 8번 bit RB 8 : 모드 2, 3에서수신데이터의 8번 bit TI : 송신완료인터럽트플래그 RI : 수신완료인터럽트플래그 2) Serial 통신을초기화할때인터럽트의상태를설정해주어야한다. 기본적으로 serial 통 신이인터럽트방식을사용하므로, serial 통신을초기화할때반드시해당되는인터럽트 들을 disable 해주어야한다. 3) 사용할 Baud-rate 에맞는값을계산하여설정해야한다. W7100A 의 Timer 에따른 Baud W7100A Datasheet v1.2.3 109

rate 설정값은 section 6.6 Examples of Baud Rate Setting 을참고하여설정하면된다. 1 Timer1을이용한계산식 TH1 = 256 ((K * 88.4736MHz) / (384 * baud rate)) K = 1 at SMOD = 0, K = 2 at SMOD = 1 2 Timer2를이용한계산식 (RCAP2H, RCAP2L) = 65536 (88.4736MHz / (32 * baud rate)) Ex) Using timer mode 2, SMOD = 1, Clock speed = 88.4736MHz, Baud rate = 115200. ET1= 0; // Timer1 INT disable TMOD = 0x20; // TIMER MODE 2 PCON = 0x80; // SMOD = 1 TH1 = 0xFC; // x2 115200(SMOD = 1) at 88.4736MHz TR1 = 1; // Start the TIMER1 SCON = 0x50; // Serial MODE 1, REN = 1, TI = 0, RI = 0 ES = 0; // Serial interrupt disable RI = 0; // Receive interrupt disable TI = 0; // Transmit interrupt disable 4) TCPIP Core interrupt를사용한다면, INTLEVEL register값을최소 0x2B00 이상으로설정해야만 W7100A의내부 interrupt 루틴이문제없이동작한다. Ex) Set the INTLEVEL register to 0x2B00 IINCHIP_WRITE (INTLEVEL0, 0x2B); //write high byte of INTLEVEL TCPIPCore register IINCHIP_WRITE (INTLEVEL0 + 1, 0x00); //write low byte of INTLEVEL TCPIPCore register STEP 2 : Setting Network Information 1. 통신을위한기본 Network 정보설정 : 다음의기본적인 Network 정보를반드시설정해주어야한다. 1 SHAR(Source Hardware Address Register) SHAR에의해설정되는 Source hardware address는모든 Device에대해유일한 Hardware address(ethernet MAC address) 값을 Ethernet MAC layer에서사용하도록정해져있다. 이 MAC address의할당은 IEEE에서관장하고있으며, 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) 2. Packet 전송을실패시사용하게될재전송 time & count 설정 W7100A Datasheet v1.2.3 110

재전송시간의설정을위해다음과같은레지스터를설정해주어야한다. 1 RTR(Retry Time-value Register), RTR에서 1은 100us를의미한다. 2 RCR(Retry Count Register) STEP 3 : Allocation TX/RX Memory for SOCKET n W7100A의설정가능한 TX, RX의최대메모리사이즈는 16KBytes이다. 16Kbytes의범위안에서는 1KB, 2KB, 4KB, 8KB, 16KB의크기로 8개의소켓까지자유롭게설정이가능하지만, 소켓별로할당한 TX혹은 RX메모리의총합이 16Kbyte를넘어가서는안된다. (TX max = 16KB, RX max = 16KB) In case of, assign 2KB rx, tx memory per SOCKET {// Set base address of RX memory for SOCKET 0 gs0_rx_base = 0xFE0000(Chip base address) + 0xFEC000(RX buffer address); Sn_RXMEM_SIZE(ch) = (uint8 *) 2; // Assign 2K rx memory per SOCKET gs0_rx_mask = 2K 1; //0x07FF, offset address within assigned SOCKET0 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 = 0xFE0000(Chip base address) + 0xFE8000(TX 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. } W7100A Datasheet v1.2.3 111

Figure 9.1 Allocation TX/RX memory of SOCKET n 3 단계의 W7100A Initialization 과정이성공적으로끝났다면, W7100A 는 Ethernet 을통해 Data communication 이가능하다. 이시점부터 W7100A 는 network 으로부터수신한 Pingrequest packet 에대한 Ping-reply 를전송할수있게된다. W7100A Datasheet v1.2.3 112

9.2 Data Communication Data 통신을하기위해서 W7100A initialization 과정후 TCP, UDP, IPRAW, MACRAW mode중사용하고자하는 mode로 SOCKET을 open한다. W7100A는독립적으로동시에사용가능한 SOCKET을총 8개까지지원한다. 이 section에서는각 mode에따른통신방법에대해서설명한다. 9.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). Figure 9.2 TCP SERVER & TCP CLIENT W7100A Datasheet v1.2.3 113

9.2.1.1 TCP SERVER Figure 9.3 TCP SERVER Operation Flow SOCKET Initialization TCP Data communication을위해 SOCKET Initialization 과정이필요하다. 이과정은 SOCKET 을 open하는일이다. SOCKET open 과정은 W7100A의 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 SEVER 와 TCP CLIENT 의구분없이동일하게적용된다. 다음은 Socket n을 TCP mode로 open하는과정이다. { START: Sn_MR = 0x0001; // sets TCP mode Sn_PORT = source_port; // sets source port number Sn_CR = OPEN; // sets OPEN command W7100A Datasheet v1.2.3 114

} /* 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을전송한다. SYN/ACK packet에대한 ACK packet 을수신하면 connection이형성되고 Sn_SR은 SOCK_ESTABLISHED로바뀐다. Socket n의 connection이형성된이후부터 data 송 / 수신이가능해진다. Socket n의 connection 형성을확인하는방법은 2가지가있다. First method : { if (Sn_IR(CON) == 1 ) Sn_IR(CON) = 1 ; 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; } ESTABLISHMENT: 수신데이터 check 상대방으로부터의 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. */ } W7100A Datasheet v1.2.3 115

Second Method : { if (Sn_RX_RSR!= 0x00000000) goto Receiving Process stage; } First method는매수신 DATA packet 마다 Sn_IR(RECV) 이 1 로설정된다. Host가이전에수신한 DATA packet의 Sn_IR(RECV) 를미처처리못하고 W7100A이다음 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보다클경우 W7100A는그 data를수신할수없으며, RX memory free size가전송한데이터크기보다클때까지 connection을유지한체기다린다. Receive / Send process에서사용되는 wizmemcpy 함수는 WIZnet에서제공하는 W7100A Driver파일중 wizmemcpy.c 파일에정의되어있다. wizmemcpy는 memory copy를빠르게처리하기위한기능이다. 이함수의성능에대해서는 section 13 Performance Improvement about W7100A 를참조하기바란다. 또한 wizmemcpy.c 파일에대한보다자세한내용은 W7100A Driver Guide 를참조하기바란다. 만약 wizmemcpy 함수를사용하지않는다면일반 memory copy 함수를사용하면된다. 그림 2.6에서알수있듯이 TCPIPCore용 RX 메모리의최상위 address byte는 0xFE다. 따라서 TCPIPCore RX 메모리에서 data memory로 memory copy를진행할때는반드시 DPX0 (Data Pointer extended) 레지스터를 0xFE로설정해주어야한다. 이과정은 wizmemcpy() 함수에구현되어있다. { /* 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 get_start_address to destination_address */ upper_size = (gsn_rx_mask + 1) src_mask; W7100A Datasheet v1.2.3 116

} wizmemcpy((0xfe0000 + src_ptr), (0x000000 + destination_address), upper_size); /* update destination_address */ destination_address += upper_size; /* copy left_size bytes of gsn_rx_base to destination_address */ left_size = len upper_size; wizmemcpy((0xfe0000 + src_ptr), (0x000000 + destination_address), left_size); } else { copy len bytes of src_ptr to destination_address */ wizmemcpy((0xfe0000 + src_ptr), (0x000000 + destination_address), 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의 TX memory보다클수없으며, 전송할 data 크기가설정된 MSS보다클경우 MSS 단위로나뉘어져전송된다. 다음 data를전송하기위해선반드시이전의 SEND command가완료되었는지확인해야한다. 이전 SEND command 완료전에다시 SEND command를수행할경우오류가발생할수있다. Data의크기가클수록 SEND command 완료시간도길어지므로, 전송 Data를적정한크기로나누어전송하는것이유리하다. Send process도 receive process와마찬가지로 DPX0 register를 0xFE 로설정해야한다. {/* 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_WR & 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 SOCKET TX memory */ if ( (dst_mask + len) > (gsn_tx_mask + 1) ) {/* copy upper_size bytes of source_addr to dst_ptr */ upper_size = (gsn_tx_mask + 1) dst_mask; W7100A Datasheet v1.2.3 117

} wizmemcpy((0x000000 + source_addr), (0xFE0000 + 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; wizmemcpy((0x000000 + source_addr), (0xFE0000 + gsn_tx_base), left_size); } else {/* copy len bytes of source_addr to dst_ptr */ wizmemcpy((0x000000 + source_addr), (0xFE0000 + dst_ptr), len); } /* increase Sn_TX_WR as length of len */ Sn_TX_WR += send_size; /* set SEND command */ Sn_CR = SEND; ESTABLISHMENT: Check disconnect-request(fin packet) 상대방으로부터 disconnect-request(fin packet) 를수신했는지확인한다. FIN packet 수신은다음과같이확인할수있다. First method : { if (Sn_IR(DISCON) == 1 ) Sn_IR(DISCON)= 1 ; goto DISCONNECT 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한다. { Sn_CR = DISCON; /* set DISCON command */ } W7100A Datasheet v1.2.3 118

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; } 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 timeout) 이발생하게되고 Sn_SR은 SOCK_CLOSED로바뀐다. TCP timeout의확인은다음과같이할수있다. 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 timeout에의해 Close된 SOCKET을완전히 close하거나, Host가 disconnect-process없이필요에의해 SOCKET을 close 할경우사용할수있다. { Sn_IR = 0x00FF; /* clear the remained interrupts of SOCKET n*/ IR(n) = 1 ; W7100A Datasheet v1.2.3 119

Sn_CR = CLOSE; /* set CLOSE command */ } 9.2.1.2 TCP CLIENT TCP client는 CONNECT state를제외한모든 state가 TCP SEVER와동일하다. 자세한내용은 9.2.1.1 TCP SERVER 를참조하기바란다. Figure 9.4 TCP CLIENT Operation Flow CONNECT TCP SERVER 에게 connect-request (SYN packet) 를전송한다. TCP SERVER 와의 Connection SOCKET 형성과정에서 ARP timeout, TCP timeout과같은 Timeout이발생할수있다. { Sn_DIPR = server_ip; /* set TCP SERVER IP address*/ Sn_DPORT = server_port; /* set TCP SERVER listen port number*/ Sn_CR = CONNECT; /* set CONNECT command */ } W7100A Datasheet v1.2.3 120

9.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 9.5 UDP Operation Flow 9.2.2.1 Unicast & Broadcast Unicast 통신은가장일반적인 UDP 통신으로, 한번에하나의상대방에게 Data를전송한다. 반면, Broadcast 통신은 Broadcasting IP address를이용하여한번의통신으로수신가능한모든상대방에게 Data를전달한다. 예로 A, B, C 에게 Data를전송할경우, Unicast 통신은 A, B, C 각각에대해서한번씩 Data를전송을한다. 이때 A, B, C에대한 Destination hardware address를획득하는과정 (ARP-process) 에서 ARP timeout이발생할수있으며, ARP timeout이발생한상대방에게는 Data를전송할수가없다. Broadcast 통신은 Broadcasting IP address로한번의 Data 전송을통하여 A, B, C 모두에게동시에 Data를전달한다. 이때 A, B, C에대한 Destination hardware address를획득할필요 W7100A Datasheet v1.2.3 121

가없으며, ARP timeout 역시발생하지않는다. 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 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 과정은 W7100A의 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를권장한다. 9.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 : { W7100A Datasheet v1.2.3 122

if (Sn_RX_RSR!= 0x00000000) goto Receiving Process stage; } Receiving process 이과정에서는 RX memory에수신된 UDP Data를처리한다. 수신된 UDP data의구조는아래와같다. Figure 9.6 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의 RX memory free size보다클경우그 data는수신할수없으며, 또한 fragment된 data 역시수신할수없다. {/* 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 /* 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_address */ upper_size = (gsn_rx_mask + 1) src_mask; wizmemcpy((0xfe0000 + src_ptr), (0x000000 + 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; wizmemcpy((0xfe0000 + gsn_rx_base), (0x000000 + header), left_size); /* update src_mask */ src_mask = left_size; } else W7100A Datasheet v1.2.3 123

} {/* copy header_size bytes of get_start_address to header_address */ wizmemcpy((0xfe0000 + src_ptr), (0x000000 + header), header_size); /* update src_mask */ 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_addr */ upper_size = (gsn_rx_mask + 1) src_mask; wizmemcpy((0xfe0000 + src_ptr), (0x000000 + destination_addr), upper_size); /* update destination_addr*/ destination_addr += upper_size; /* copy left_size bytes of gsn_rx_base to destination_addr */ left_size = get_size upper_size; wizmemcpy((0xfe0000 + gsn_rx_base), (0x000000 + destination_addr), left_size); } else {/* copy len bytes of src_ptr to destination_addr */ wizmemcpy((0xfe0000 + src_ptr), (0x000000 + destination_addr), get_size); } /* increase Sn_RX_RD as length of len + header_size */ Sn_RX_RD = Sn_RX_RD + get_size + header_size; /* set RECV command */ Sn_CR = RECV; Check send data / Sending process 전송할 data크기는할당된 SOCKET의 TX memory보다클수없으며, 전송할 data 크기가 MTU보다클경우 MTU 단위로자동으로나누어져전송된다. Broadcast할경우에는 Sn_DIPR0 을 Broadcasting IP로설정한다. {/* first, get the free TX memory size */ FREESIZE: W7100A Datasheet v1.2.3 124

} freesize = Sn_TX_FSR; 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_DIPR = remote_ip; Sn_DPORT = remote_port; /* calculate offset address */ dst_mask = Sn_TX_WR & 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 SOCKET TX 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; wizmemcpy((0x000000 + source_address), (0xFE0000 + dst_ptr), 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; wizmemcpy((0x000000 + source_address), (0xFE0000 + gsn_tx_base), left_size); } else {/* copy len bytes of source_address to dst_ptr */ wizmemcpy((0x000000 + source_address), (0xFE0000 + dst_ptr), len); } /* increase Sn_TX_WR as length of len */ Sn_TX_WR += len; /* set SEND command */ Sn_CR = SEND; Check complete sending / Timeout 다음 Data를전송하기위해선반드시이전 SEND command가완료되었는지확인해야한다. Data의크기가클수록 SEND command 완료시간도길어지므로, 전송 Data를적정한크기로나누어전송하는것이유리하다. UDP data 전송시 ARP timeout이발생할수있고, ARP timeout이발생할경우 UDP data 전송은실패한다. First method : {/* check SEND command completion */ W7100A Datasheet v1.2.3 125

while(sn_ir(sendok)== 0 ) /* wait interrupt of SEND completion */ { /* check ARP timeout */ 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; } 9.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 W7100A Datasheet v1.2.3 126

는 01:00:5e:01:01:0b 로선택된다. RFC1112 참조 (http://www.ietf.org/rfc.html). W7100A에서는 multicast-group 등록에필요한 IGMP 처리는자동으로이루어진다. SOCKET n을 multicast mode로 open할경우 IGMP의 Join message, close할경우 Leave message가자동으로전송된다. SOCKET open 이후통신시주기적으로 Report message가자동으로전송된다. W7100A는 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을 multicast-group 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_DPORT = 0x0BB8; /* set Multicast-Group Port number(3000) */ Sn_PORT = 0x0BB8; /* set Source Port 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 W7100A Datasheet v1.2.3 127

Section 9.2.2.1 Unicast & Broadcast 참조. Receiving process Section 9.2.2.1 Unicast & Broadcast 참조. Check send data / Sending Process SOCKET initialization에서이미 multicast-group에대한정보를설정하였으므로, unicast통신처럼상대방의 IP address와 port number를설정할필요가없다. 따라서전송할 data를 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_WR & 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 SOCKET TX memory */ if ( (dst_mask + len) > (gsn_tx_mask + 1) ) { /* copy upper_size bytes of source_addr to dst_ptr */ upper_size = (gsn_tx_mask + 1) dst_mask; wizmemcpy((0x000000 + source_addr), (0xFE0000 + 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; wizmemcpy((0x000000 + source_addr), (0xFE0000 + gsn_tx_base), left_size); } else {/* copy len bytes of source_addr to dst_ptr */ wizmemcpy((0x000000 + source_addr), (0xFE0000 + dst_ptr), len); } /* increase Sn_TX_WR as length of len */ Sn_TX_WR += send_size; /* set SEND command */ Sn_CR = SEND; } W7100A Datasheet v1.2.3 128

Check complete sending / Timeout Data 통신에필요한모든 Protocol 처리는 Host가관장하므로 Timeout은발생하지않는다. {/* check SEND command completion */ while(sn_ir(sendok)== 0 ); /* wait interrupt of SEND completion */ Sn_IR(SENDOK) = 1 ; /* clear previous interrupt of SEND completion */ } Check finished / SOCKET close Section 9.2.2.1 Unicast & Broadcast 참조. 9.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는 W7100A에서 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에반드시설정한다. W7100A는 IPRAW mode에서 TCP(0x06) 나 UDP(0x11) protocol number는지원하지않는다. IPRAW mode SOCKET의통신은지정된 protocol number만의통신을허용한다. ICMP로설정된 SOCKET은 IGMP와같이설정되지않은그외의 Protocol Data를수신할수없다. W7100A Datasheet v1.2.3 129

Figure 9.7 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 */ 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 Section 9.2.2.1 Unicast & Broadcast 참조. Receiving process RX Memory 에수신된 IPRAW Data 를처리한다. 수신된 IPRAW Data 의구조는아래와같다. W7100A Datasheet v1.2.3 130

PACKET-INFO Destination IP Address Byte size of DATA packet DATA packet Real Data 4 Bytes 2 Bytes Size speicified in PACKET-INFO Figure 9.8 The received 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 수신과모두동일하다. section 9.2.2.1 Unicast & Broadcast 참조. 송신자의 Data 크기가 SOCKET n의 RX memory free size보다클경우그 data는수신할수없으며, 또한 fragmented data 역시수신할수없다. Check send data / Sending process 전송할 data 크기는할당된 SOCKET n의 TX memory보다클수없고, default MTU보다클수없다. IPRAW data 전송은 UDP data 전송에서 destination port number를설정하는것을제외하고모두동일하다. 자세한사항은 section 9.2.2.1 Unicast & Broadcast 를참조하기바란다. Complete sending / Timeout UDP와동일, section 9.2.2 UDP 참조. Check finished / SOCKET closed UDP 와동일, section 9.2.2 UDP 참조. 9.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을구현할수있다. 이와같이 W7100A는 hardwired TCP/IP와 software TCP/IP를모두구현할수있는 hybrid TCP/IP stack을지원한다. W7100A이지원하는 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 W7100A Datasheet v1.2.3 131

의 Ethernet type 총 14bytes 을기본으로포함해야한다. Figure 9.9 MACRAW Operation Flow 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 (S0_SR!= SOCK_MACRAW) S0_CR = CLOSE; goto START; } Check received data Section 9.2.2.1 Unicast & Broadcast 참조. Receiving process W7100A Datasheet v1.2.3 132

SOCKET 0 의 RX memory 에수신된 MACRAW data 를처리한다. MACRAW data 의구조는 Figure 9.11 과같다. PACKET-INFO DATA packet CRC Byte size of DATA packet Destination MAC (6Bytes) Source MAC (6Bytes) Real Data Type (2Bytes) Payload (46~1500Bytes) Cyclic Redundancy Check 2 Bytes Size speicified in PACKET-INFO 4 Bytes Figure 9.10 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/ethernet-numbers 를참조하기바란다. {/* calculate offset address */ src_mask = S0_RX_RD & gs0_rx_mask; // src_mask is offset address /* calculate start address(physical address) */ src_ptr = gs0_rx_base + src_mask; // src_ptr is physical start address /* get the size of packet */ len = get_byte_sizeof_data_packet(); // Read the 2bytes PACKET-INFO /* if overflow SOCKET RX memory */ If((src_mask + len) > (gs0_rx_mask + 1)) { /* copy upper_size bytes of get_start_address to destination_address */ upper_size = (gs0_rx_mask + 1) src_mask; wizmemcpy((0xfe0000 + src_ptr), (0x000000 + destination_address), upper_size); /* update destination_address */ destination_address += upper_size; /* copy left_size bytes of gsn_rx_base to destination_address */ left_size = len upper_size; wizmemcpy((0xfe0000 + src_ptr), (0x000000 + destination_address), left_size); } else { /* copy len bytes of src_ptr to destination_address */ wizmemcpy((0xfe0000 + src_ptr), (0x000000 + destination_address), len); } /* increase Sn_RX_RD as length of len */ S0_RX_RD += len; /* extract 4 bytes CRC from RX memory and then ignore it */ W7100A Datasheet v1.2.3 133

wizmemcpy((0xfe0000 + src_ptr), (0x000000 + dummy), len); /* set RECV command */ S0_CR = RECV; } <Notice> RX memory의 free size가 W7100A이수신해야할 MACRAW data의크기보다작을경우, 수신되어서는안되는 MACRAW data의 PACKET-INFO와 data packet의일부가 RX memory에저장되는문제가간혹발생할수있다. 이는상기 sample code에서 PACKET-INFO 분석의오류를야기시켜올바른 MACRAW data 수신처리를할수없게된다. 이문제는 RX memory가 Full에가까울수록발생할확률이높아진다. 이문제는 MACRAW data의소실을어느정도감안한다면아래와같이해결할수있다. RX memory의처리를최대한빨리하여 Full에도달하는것을방지한다. SOCKET Initialization 과정의 Sample code에서 S0_MR의 MF(MAC Filter) bit를설정하여자신에해당하는 MACRAW data만을수신하도록하여수신부하를줄인다. { 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 (S0_SR!= SOCK_MACRAW) S0_CR = CLOSE; goto START; } 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 RX memory */ if((s0_rxmem_size(0) * 1024) S0_RX_RSR(0) < 1528) { recved_size = S0_RX_RSR(0); /* backup Sn_RX_RSR */ S0_CR = CLOSE; /* SOCKET Closed */ while(s0_sr!= SOCK_CLOSED); /* wait until SOCKET is closed */ /* process all data remained in RX memory */ while(recved_size > 0) {/* calculate offset address */ src_mask = S0_RX_RD & gs0_rx_mask; // src_mask is offset address W7100A Datasheet v1.2.3 134

/* calculate start address(physical address) */ src_ptr = gs0_rx_base + src_mask; // src_ptr is physical start address /* if overflow SOCKET RX memory */ If((src_mask + len) > (gs0_rx_mask + 1)) { /* copy upper_size bytes of get_start_address to destination_address */ upper_size = (gs0_rx_mask + 1) src_mask; wizmemcpy((0xfe0000 + src_ptr), (0x000000 + destination_address), upper_size); /* update destination_address */ destination_address += upper_size; /* copy left_size bytes of gsn_rx_base to destination_address */ left_size = len upper_size; wizmemcpy((0xfe0000 + src_ptr), (0x000000 + destination_address), left_size); } else { /* copy len bytes of src_ptr to destination_address */ wizmemcpy((0xfe0000 + src_ptr), (0x000000 + destination_address), len); } /* increase Sn_RX_RD as length of len */ S0_RX_RD += len; /* extract 4 bytes CRC from RX memory and then ignore it */ wizmemcpy((0xfe0000 + src_ptr), (0x000000 + dummy), len); /* calculate the size of remained data in 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 (S0_SR!= SOCK_MACRAW); } else /* process normally the DATA packet from RX memory */ {/* This block is same as the code of Receiving process stage*/ } } W7100A Datasheet v1.2.3 135

Check send data / Sending process 전송할 Data 크기는할당된 SOCKET 0의 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 = S0_TX_WR & gs0_tx_mask; // dst_mask is offset address /* calculate start address(physical address) */ dst_ptr = gs0_tx_base + dst_mask; // dst_ptr is physical start address /* if overflow SOCKET TX memory */ if ( (dst_mask + len) > (gs0_tx_mask + 1) ) {/* copy upper_size bytes of source_addr to dst_ptr */ upper_size = (gs0_tx_mask + 1) dst_mask; wizmemcpy((0x000000 + source_addr), (0xFE0000 + 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; wizmemcpy((0x000000 + source_addr), (0xFE0000 + gs0_tx_base), left_size); } else {/* copy len bytes of source_addr to dst_ptr */ wizmemcpy((0x000000 + source_addr), (0xFE0000 + dst_ptr), len); } /* increase Sn_TX_WR as length of len */ S0_TX_WR += send_size; /* set SEND command */ S0_CR = SEND; } Check complete sending Data 통신에필요한모든 protocol 처리는 host 가관리하기때문에 timeout 은발생하지않 지않는다. W7100A Datasheet v1.2.3 136

{/* 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 Section 9.2.2.1 Unicast & Broadcast 참조. W7100A Datasheet v1.2.3 137

10 Electrical Specification 10.1 Absolute Maximum Ratings Symbol Parameter Rating Unit V DD DC supply voltage -0.5 to 3.6 V V IN DC input voltage -0.5 to 5.5 (5V tolerant) V V OUT 2 to 3.3 (GPIO) DC output voltage -0.5 to 3.6 (Others) V I IN DC input current 5 ma I OUT DC output current 2 to 8 ma T OP Operating temperature -40 to 85 C T STG Storage temperature -55 to 125 C *COMMENT: Device 에 Absolute Maximum Ratings 를넘어서는스트레스를가할경우심각 한 damage 의원인이될수있다. Simultaneously 10.2 DC Characteristics(Input, Output, I/O) Symbol Parameter Test Condition Min Typ Max Unit V DD Junction temperature DC Supply voltage -55 C ~ 125 C 3.0 3.3 3.6 V V IH High level input voltage 2.0 5.5 V V IL Low level input voltage -0.5 0.8 V V OH High level output voltage I OH = 8 ma 2.4 V V OL Low level output voltage I OL = 8 ma 0.4 V Input Leakage Current V IN = V DD or 0-10 1 10 A I lkg I OZ I OL I OH Input Leakage Current with pull-up resistance V IN = 0-15 -45-85 A Input Leakage Current with pull-down resistance V IN = V DD 15 45 85 A Tri-state output leakage current V OUT = V DD 2 8 A Low level output current V OL = 0.8V, 25 C, V DD = 3.3V 52 ma High level output current V OL = 2.4V, 25 C, V DD = 3.3V 52 ma W7100A Datasheet v1.2.3 138

10.3 Power consumption(driving voltage 3.3V) Symbol Parameter Test Condition Max Unit I Boot Current consumption Booting 250 ma I Idle Current consumption Idle state 220 ma I Active Current consumption Whole 8 SOCKETs running 220 ma I Power-down Current consumption Power-down mode 108 ma 10.4 AC Characteristics Reset timing Description Min Max 1 Reset Cycle Time 2 us - 2 PLL Lock-in Time 50 us 10 ms External memory access timing Description Min Max t ALE T access ALE signal duration = ALECON register value + 1 clock (clock speed = 88.4736MHz) External memory access period = 3us + EXTWTST register value 1 clock 256 clock 3 us 744us W7100A Datasheet v1.2.3 139

10.5 Crystal Characteristics Parameter Range Frequency 25 MHz Frequency Tolerance (at 25 ) ±30 ppm Shunt Capacitance 7pF Max Drive Level 1 ~ 500uW (100uW typical) Load Capacitance 18pF Aging (at 25 ) ±3ppm / year Max 10.6 Transformer Characteristics Parameter Transmit End Receive End Turn Ratio 1:1 1:1 Inductance 350 uh 350 uh 내부 PHY모드를사용하는경우, Auto MDI/MDIX (Crossover) 를위해서 symmetric transformer 를사용해야한다. 외부 PHY모드를사용하는경우, 외부 PHY의 specification과맞는 transformer를사용해야한다. W7100A Datasheet v1.2.3 140

11 IR Reflow Temperature Profile (Lead-Free) Moisture Sensitivity Level: 3 Dry Pack Required: Yes Average RAMp-Up Rate 3 C/second max. (Ts max to Tp) Preheat Temperature Min (Ts min ) 150 C Temperature Max (Ts max ) 200 C Time (ts min to ts max ) 60-180 seconds Time maintained above: Temperature (TL) 217 C Time (tl) 60-150 seconds Peak/Classification Temperature (Tp) 260 + 0 C Time within 5 C of actual Peak Temperature (tp) 20-40 seconds RAMp-Down Rate 6 C/second max. Time 25 C to Peak Temperature 8 minutes max. W7100A Datasheet v1.2.3 141