W5100 vs W5100S - W5100S 무엇이 달라졌을까?

by MC



Overview

WIZnet는 2018년 5월 W5100S를 출시했다.
W5100S는 그 동안 WIZnet의 대표상품인 W5100을 크게 개선한 제품으로 저발열, 저비용, 고효율을 구현한 TCP/IP Ethernet Controller 이다.

위 사진에서 보여지는 것처럼, W5100S는 Package 변경에 따른 W5100과의 PIN-to-PIN 호환성을 지원하지 않지만, LQFP48 & QFN48 2가지 Package를 제공하여 사용자의 선택의 폭을 넓혔다.

반면, W5100과의 FW 호환성을 유지하여 PPPoE를 제외한 W5100의 Use Application을 수정없이 그대로 사용할 수 있을 뿐만 아니라, 개선되거나 추가된 새로운 기능을 활용하여 보다 나은 네트워크 통신 기능을 제공한다.

W5100S은 W5100과 무슨 차별성을 있으며, 무엇이 개선되고, 무엇이 추가되었는지 W5100과 비교하며 살펴보도록 하자.

Features

다음은 W5100과 W5100S의 Feature들을 한눈에 비교할 수 있는 표이다.

  • Main Fetures

    Feautres W5100 W5100S Description
    TCP O O (PSH Flag Control) PSH flag를 선택적으로 설정한다
    UDP O O (WOL, Filtering) WOL over UDP 지원 및 Broad/Uni/Muticast Filtering
    IP O O
    MACRAW O O (Filtering) MACRAW Data를 Filtering하여 Host의 수신 부담을 줄였다.
    ICMP O O (Ping Request) SLCR Register로 Ping-Reqest 전송
    IGMP O O
    ARP O O (ARP request) SLCR Register로 ARP-Reqest 전송
    PPPoE HW SW PAP/CHAP 이외의 인증 알고리즘 사용 가능
    SOCKET # 4 4
    SOCKET TX/RX Memory 8KB/8KB 8KB/8KB
    Ethernet PHY O O
    Package LQFP80 LQFP48, QFN48 Samll Package
  • Host Interface

    Feautres W5100 W5100S Description
    Direct Bus Mode O X
    Indirect Bus Mode O O Bus Interface Logic 개선을 통한 Access time 증가
    SPI mode O(Low) O(Fast) SPI clock Speed 개선을 통한 Fast SPI 구현
  • Integrated 10Base-T/100Base-TX Ethernet PHY

    Feautres W5100 W5100S Description
    Operation Mode Configured by PIN Configured by REG or MDC/MDIO Hardware PIN을 없애고, PHYCR0 regsiter를 통하거나, 내장 MDC/MDIO controller를 통해 제어
    Auto-negotiation O O
    Auto-MDIX O O 둘다 Auto-negotiation Mode일 때만 지원
    MDC/MDIO X O
    PHY Status X O PHYSR Register 참조
    LEDs TX, RX, SPD, DUP, COL, LINK ACT, SPD, DUP, COL, LINK TX, RX를 ACT 하나로
    Power Down Mode X O Power 소모량 개선
  • Miscellaneous

    Feautres W5100 W5100S Description
    Retransmittion Configruation 모든 소켓에 적용 소켓별로 적용 가능
    Keep Alive by Command by Command or Auto
    SOCKET-Less Command X O (ARP, PING)
    Interrupt Global Interrupt / Pending Interrupt를 Enable/Disable하며, Pending한다.
    System Clock Switching 150MHz Fixed 100MHz <-> 25MHz
    CHIP Reset CORE & PHY CORE or PHY (전부 혹은 선택적으로)
    TCP RST Block X O Port Scan Attack 방어
    ICMP Unreachable Port Block X O Port Scan Attack 방어
    Configuration Lock X O

What is enhanced & What is new in W5100S.

간략한 내용은 앞서 Features를 통해 살펴 보았다.

지금부터는 W5100과 차별성이 두드러지는 기능들을 좀 더 자세히 살펴 보자.

  • Hardware

    1. PIN (Package)

      W5100S는 W5100의 ADDR[14:2], OPMODE[2:0] Siganl PIN를 제거하고, Power PIN을 Optimize하여 LQFP80 package를 LQPF48, QFN48로 Small Package를 지원한다.
      제거된 PIN들은 성능 개선이나 Register 설정으로 대체되었다. 참고로, W5100S는 Core 전압으로 1.8V 아닌 1.2V를 사용함에 주의하라.

    2. Host Interface

      • Parallel Bus Mode

        Parallel Bus Access Timing을 개선하여 Direct Bus Mode를 제거하고, Indirect Bus Mode만 지원한다. 아래 그림은 Writing Timing을 비교한 것이다.

        그림에서와 같이 W5100S과 100MHz로 동작할 경우 Bus access time은 40ns로 30ns정도 개선되었다.

      • SPI

        그림에서와 같이 W5100S는 최대 70MHz SPI Clock Speed를 지원한다. W5100의 70ns 주기를 14.3ns 주기로 개선하여 Fast SPI를 구현하였다.

        W5100S SPI 최대 Clock 사용시 T(DS) Time 7ns가 필요함에 주의바란다.
        T(DS)을 만족하는 최대 SPI Clock Speed는 14.3+7 = 21.3 ns 주기를 갖는 43MHz이다.

      • Interrupt

        W5100은 Interrupt Loss가 간혹 발생한다. 특히 RX Interrupt Clear와 동시에 발생한 중첩 Interrupt에 의해 Interrupt PIN이 Low 상태를 유지하여 Host는 더 이상 Interrupt 발생을 인지못하는 경우가 발생한다.

        W5100S는 이를 보안하기 위하여 RECV Command 수행 후 RX buffer가 남아 있는 경우 RX Interrupt를 재생산하여, 중첩 Interrupt가 발생하더라도 Interrupt Pend Timing 이후 여전히 Interrupt가 남아 있는 경우 Interrupt를 재생산하도록 구현되었다.

        자세한 내용은 wizwik를 참조하라.

  • TCP

    1. PSH Flag

      PSH flag는 TCP Data를 수신했음을 Application으로 알려 Application으로 하여금 Data를 빠르게 처리하는 기능을 가지고 있다.
      W5100과 W5100S는 모두 MSS 보다 큰 Data를 전송할 경우 MSS 단위로 나눈 마지막 데이타에 PSH flag를 설정한다.
      W5100S는 마지막 Packet이 아니라 할지라도 상대방의 Window가 zero가 되게 하는 전송 Packet에 PSH flag를 설정하여, Application을 하여금 빠른 수신을 하도록 한다.
      또한 W5100과 달리 Sn_MR2[BRDB]=’1’ 인 경우 모든 Packet에 PSH flag를 설정하여 보낼 수 있다.

    2. RST Block

      W5100의 경우는 대기하고 있는 SOCKET이 존재하지 않을 경우, RST packet을 전송한다. 이는 Port Scan Attack의 대상이 된다.

      W5100S는 MR2[NOTCPRST] = ‘1’ 인 경우 RST packet 전송 기능을 Block 할 수 있고 Port Scan Attack을 대비할 수 있다.

      또한, Web Server와 같은 Applicaton을 수행할 경우, 한정된 SOCKET 수(최대 4) 때문에, Web Browser와의 통신이 원할하지 않을 수 있다.
      이는 Web Browser가 특정 Contents를 요구했을 경우 대기하고 있는 SOCKET이 없는 없다면 RST를 수신하게 되어 더이상 재요청을 하지 않는 문제가 발생한다.
      RST packet 전송 block은 Web Browser로 하여금 재요청을 유도하여 대기 SOCKET이 생길 경우 재요청된 Content을 전송할 수 있게 해준다.

    3. Auto Keep Alive

      W5100S은 Sn_CRSEND_KEEP command를 이용하여 Keep Alive Packet을 전송할 수 있을 뿐만 아니라, Sn_KPALVTR 마다 자동으로 Keep Alive Packet을 전송할 수 있다.
      SEND_KEEP은 Sn_KPALVTR이 0인 동안만 수행이 가능하다.

  • UDP

    1. WOL

      W5100S는 UDP를 통해 수신되는 지정된 Magic packet을 분석하여 대기 중인 Host System를 wake할 수 있는 WOL을 지원한다.
      WOL magic packet을 수신할 경우 IR2[WOL] 이 설정되고 인터럽트가 발생한다.

    2. ICMP(Port Unreachable) Block

      W5100과 W5100S는 Open되어 있지 않은 Port로 UDP Packet을 수신할 경우 ICMP(Port Unreachable) Message를 전송한다. 이는 TCP와 마찬가지로, UDP 역시 Port Scan Attack의 대상이 될 수 있다.

      W5100S는 MR2[UDPURB] = ‘1’ 인 경우, ICMP(Unreacheach Port)Message 전송을 Block하여 Port Scan Attack에 대비할 수 있다.

    3. Broad/Uni/Multicast packet filtering

      W5100의 경우 Open된 UDP port로 들어 오는 Unicast 뿐만 아니라 원치 않는 Broadcast, Multicast Packet들이 수신될 수 있다. 원치 않은 Packet을 수신할 경우 사용자가 이를 직접 수신하여 Discard 해야 한다.
      그러나 W5100S의 경우, 아래와 같은 설정으로 원하지 않은 packet을 수신하지 않음으로써 사용자 처리 부담을 대폭 감소시켰다.

      UDP Filter 기능은 아래와 같이 설정될 수 있다.

  • MACRAW

    W5100은 MACRAW SOCKET을 사용할 경우 자신에게 보내진 Packet 뿐만 아니라 Broadcast,Multicast Packet을 모두 수신한다. 필요없는 패킷을 수신한 경우 이는 사용자가 직접 수신하여 Discard 하는 부담이 있다.
    W5100S는 필요없는 Broadcast, Multicast Packet 뿐만 아니라, IPv6 Packet등을 사용자의 수신 부담없이 Filtering하여 Discard한다.

  • PPPoE

    W5100의 PPPoE는 hardwired logic으로 구현되어, PPPoE 연결 설정에 대한 다양한 Option(예로 PAP/CHAP encryption)을 처리할 수 없는 문제가 있었다.
    W5100S는 이와 같이 PPPoE 연결 설정을 MACRAW SOCKET을 이용하여 software로 처리하여 Option 처리에 대한 유연성을 높혔으며, 연결 유지를 위한 반복적인 LCP-ECHO 전송 및 연결 종료 인지 기능만을 Hardware Logic으로 구현하였다.

    PPPoE 구현은 wizwiki를 참고하라.

  • Retransmission Configuration

    W5100S는 W5100과 달리 SOCKET 별로 재전송 시간을 설정할 수 있다.
    Sn_RTR & Sn_RCR Register를 통해 설정한다.
    기존의 RTR & RCR Register는 Sn_RTR & Sn_RCR의 초기값을 설정하는 용도로 변경되었다. 즉, Sn_RTR & Sn_RCR를 따로 설정하지 않을 경우, SOCKET 재전송은 RTR & RCR을 따른다.

  • SOCKET-less Command

    W5100S는 SOCKET을 사용하지 않고, ARP, PING Request를 원하는 Destination으로 전송하는 기능을 제공한다.

    이는 SLCR (SOCKET-less Command), SLIR (SOCKET-less Interrupt), SLIMR (SOCKET-less Interrupt Mask), SLIRCLR (SOCKET-less Interrupt Clear), SLDIPR (SOCKET-less Destination IP Address), SLDHAR (SOCKET-less Destination Hardware Address), PINGIDR (PING ID), PINGSEQR (PING Sequence Number) Register들을 통해 아래 그림과 같이 제어된다.

    1. ARP

      SLDIPR = {192,168,100,100}";
      SLCR[ARP] = 1;
      while(SLIR == 0x00);
      
      if(SLIR[TOUT] == 1) printf("Timeout Error");
      else if(SLIR[ARP] == 1)
      {
         printf("%02:%02:%02:%02:%02:%02",SLDHAR[0], SLDHAR[1], 
                                         ,SLDHAR[2], SLDHAR[3], 
                                         ,SLDHAR[4], SLDHAR[5])
      }
      SLIRCLR = 0xFF;
      
    2. PING

      SLDIPR = {192,168,100,100};
      PINGIDR = 0x5100;
      PINGSEQR = 0x1234;
      SLCR[PING] = 1;
      while(SLIR == 0x00);
      if(SLIR[TOUT] == 1) printf("Timeout Error");
      else if(SLIR[PING] == 1) printf("Ping Replay OK");
      SLIRCLR = 0xFF;
      
  • PHY

    1. Operation Mode

      W5100은 Hardware PIN OPMODE[2:0]을 제어하여 PHY operation mode를 설정하여, Reset 이 후 Operation Mode 설정이 불가능 하였다.
      반면에 W5100S는 PHYCR0 Regsiter를 통해 Reset 이후에도 Operation Mode 설정이 가능하다.

    2. MDC/MDIO Controller

      W5100S은 MDC/MDIO controller를 내장하여 BMCR, 와 같은 Ethernet PHY의 내부 Register를 제어할 수 있다.
      MDC/MDIO Controller는 PHYRAR (PHY Register Address), PHYDIR (PHY Data Input), PHYDOR (PHY Data Outuput), PHYACR (PHY Access Control) Register를 통해 제어된다.

      자세한 내용은 wizwiki 참조하라.

    3. Power Down Mode

      W5100S는 Ehternet PHY의 Power Down Mode를 지원한다.

      Power Down Mode 설정은 System clock이 25MHz로 변경되므로, W5100S SPI나 BUS access time이 25MHz로 조정되므로 주의하기 바란다.

  • System Clock Switching

    W5100S는 System Clock을 100MHz 혹은 25MHz로 선택으로 사용 가능하다.

    Ethernet Power Mode 설정 시 25MHz로 자동 변경됨에 주의하라.

  • Configuartion Lock

    W5100S는 의도치 않은 설정 변경을 막기 위해 아래의 3가지 설정에 대하여 Lock 기능을 제공한다.

    1. Clock Switching : MR2[CLKSEL] 설정 Lock

      CLKCLKR == 0xCE 이면 Unlock 상태, 아니면 Lock
      
    2. Network Inforamtion

      GWR, SIPR, SUBR,SHAR, SIPR 과 같은 Network Information Register 설정을 Lock한다.

      NETLCKR == 0x3A 이면 Unlock, 아니면 Lock
      
    3. PHY Control : PHYCR0, PHYCR1 설정 Lock

      PHYLCKR == 0x53 이면 Unlock, 아니면 Lock
      

맺으며

지금까지 W5100S의 특징적 차별성을 살펴 보았다.

기존의 W5100 사용자 뿐만 아니라, 새로운 W5100S 사용자에 많은 도움이 되어, W5100S가 W5100을 잇는 또 하나의 대표작이 되길 바란다.

블로그 이미지

밤소 MidnightCow

위즈네트 칩(W5300, W5200, W7100, W7500) 개발자

직접 Maker가 만들고 공유하는 다양하고 유용한 WIZnet TCP/IP Ethernet Controller Driver

Written by MC


Overview

WIZnet는 W3100(단종)을 시작으로 W3150A+, W5100, W5200, W5300, W5500 등 개선되고 안정화된 TCP/IP Chip을 선보이고 있으며, 전세계의 많은 개발자와 Maker에게 지속적인 관심을 받고 있다.

위즈네트는 큰 사랑을 받은 W5100의 성능을 개선하고 가격을 낮춘 W5100S를 최근 출시하였고, 곧 다가올 IPv6 IoT 시장에 대응할 수 있는 Dual TCP/IP Stack(IPv4 & IPv6) 지원하는 W6100을 곧 출시할 예정이다.

위즈네트는 공식적으로 W5xxx Series을 통합 운영할 수 있는 ioLibrary를 제공하고 있으며, 이는 사용자 Application의 수정을 최소화하고, 손쉽게 새로운 칩으로 변경할 수 있도록 한다.

그리고, W6100에 대한 io6Library 또한 Github를 통해 제공될 예정이다.
ioLibrary에 익숙한 사용자라면 io6Library 역시 손쉽게 사용할 수 있을 거라 기대한다.

이 글에서 소개하고자 하는 것은 위즈네트의 공식 ioLibrary가 아닌, 위즈네트 뮤지엄에서 소개하고 있는 전세계 Maker나 개발자가 개발한 유용하고 다양한 Library를 소개하고자 한다.

소개할 Library는 다음과 같다.

Arduino Library

Official Arduino Library

Aurdino Library는 전세계 Maker에게 가장 사랑받고 활용되고 있는 Library이다. 누구나 손쉽고 빠르게 개발할 수 있는 장점은 있지만, 단순한 Library 구조로 위즈네트 Chip이 제공하는 세부적인 기능을 제어하기에는 한계가 있다.

이러한 단점에도 불구하고, 전세계 Maker들에게 지속적으로 사랑받고 활용되는 이유는, 손쉽게 동작할 수 있는 다양한 Example을 제공하고, 전세계 Maker들이 함께 만들어가는 Library로 github에 공유되어 W5100, W5200, W5500, W5100S, W6100 등을 Runtime에 지원하는 Library를 제공한다.

Multicasting Arduino Library

이 Library는 Arduino Library가 지원하지 않는 UDP Mutilcasting 구현을 위한 Library를 제공한다. 저자는 udp.h 와 udp.c에서 UdpClass::begin() 함수와 같은 UdpClass::beginMulti() 추가하여 구현하였다.

필자 생각에는 UdpMultiClass를 원본 Library를 수정하지 않고, UdpClass 상속 받아 beginMulti()를 추가하는 것이 활용도 면에서 좋을 것으로 판단된다.

 
   class UdpMultiClass : UdpClass {
      public:
      void beginMutli(uint16_t portMulti, uint8_t * addrMulti);
   }

   void UdpMutiClass::beginMulti(uint16_t portMulti, uint8_t * addrMulti) 
   {
      _port = portMulti;
      _sock = 0; //TODO: should not be hardcoded
      // set destination IP
      W5100.writeSnDIPR(_sock, addrMulti);
      W5100.writeSnDPORT(_sock, portMulti);

      socket(_sock, SnMR::UDP, _port, 0x80);
   }
 

[Refer to WIznet Museum]
[Download Library]
[How to Use]

Non-blocking Arduino Library

Non-Blocking Arduino Library는 Arduino Board가 DHCP Server로 부터 IP address는 할당받거나, DNS 요청이 Blocking 되어 수초 동안 아무런 동작도 하지 않는 Standard Library를 Blocking 되지 않도록 일부 코드를 수정한 것입니다. 저자와 같은 고민을 해본 분들에게 도움이 될 만한 Library입니다.

[Refer to WIznet Museum]
[Download Library]
[How to Use]

FreeRTOS Library

FreeRTOS 기반에 동작하는 ATmega MCU의 WIZnet Library로 WIZnet가 제공하는 초기 ioLibrary로 구현되었습니다.

이 Library는 RTOS 기반의 Application에서 WIZnet Library가 어떻게 활용될 수 있는지 잘 보여줍니다.
저자는 그외에도 FreeRTOS 기반의 uIP Stack도 지원하고 있으며, 이는 WIZnet의 Hardware TCP/IP stack과 Software Stack를 손쉽게 비교할 수 있습니다.

또한, 이 Site는 WIZnet Chip의 MACRAW SOCKET 기능을 활용하여 uIP Stack을 구현하는 Library도 제공하고 있습니다. 여기를 참조하세요.

[Refer to WIznet Museum]
[Download Library]
[How to Use]

ATmega Library

ATmega Library는 W5100을 기반으로 하는 간단한 Library 입니다.
ermicor의 Library를 수정하여 만들었습니다.
이 Library는 ioLibrary를 필요한 기능만을 구현하여 아주 작게 만들었습니다.
아래 코드는 WIZnet Chip을 Access하기 위한 기본 IO library입니다.


void  W51_register(W5100_CALLBACKS  *pcallbacks)
{
    select = pcallbacks->_select;
    xchg = pcallbacks->_xchg;
    deselect = pcallbacks->_deselect;
    reset = pcallbacks->_reset;
    inited = FALSE;
    if ((select) && (xchg) && (deselect))  inited = TRUE;    // these functions must be valid
}
void  W51_write(unsigned int  addr, unsigned char  data)
{
    if (!inited)  return;                        // not set up, ignore request

    select();                                    // enable the W5100 chip
    xchg(W5100_WRITE_OPCODE);                    // need to write a byte
    xchg((addr & 0xff00) >> 8);                  // send MSB of addr
    xchg(addr & 0xff);                           // send LSB
    xchg(data);                                  // send the data
    deselect();                                  // done with the chip
}
unsigned char  W51_read(unsigned int  addr)
{
    unsigned char                val;

    if (!inited)  return  0;                     // not set up, ignore request

    select();                                    // enable the W5100 chip
    xchg(W5100_READ_OPCODE);                     // need to read a byte
    xchg((addr & 0xff00) >> 8);                  // send MSB of addr
    xchg(addr & 0xff);                           // send LSB
    val = xchg(0x00);                            // need to send a dummy char to get response
    deselect();                                  // done with the chip
    return  val;                                 // tell her what she's won
}

[Refer to WIznet Museum]
[How to Use]

PSoC Library

PSoC Library는 Cypress사의 PSoC4 & PSoC4에 동작하며, W5100, W5200, W5500을 통합한 Library이다. PSoC 사용자에게는 아주 유용한 Library가 될 것이다.

[Refer to WIznet Museum]
[Download Library]

Library for BASIC Language Users

이 Library는 특이하게 일반적인 C library가 아닌 Basic 언어로 작성된 Library이다.

PIC 과 ATmega MCU를 지원한다.

PIC Library

[Refer to WIznet Museum]
[Download Library]
[How to Use]

ATmega Library

[Refer to WIznet Museum]
[Download Library]
[How to Use]

BSD SOCKET

다음 표는 ioLibrary와 BSD Socket Library와의 지원 함수를 비교한 것이다.

ioLibrary BSD Sccket
socket() O O
bind() X O
listen() O O
accept() X O
send() & recv() O O
sendto() & recvfrom() O O
select() & poll() X O

WIZnet의 ioLibrary는 BSD Socket과 달리 bind()accept() 함수를 지원하지 않는다.

BSD Socket Library인 경우, 다음 그림처럼 bind()에 의해 source port가 할당되고 socket resource와 바인딩된다. 또한, client의 접속을 accept()를 통해 대기하며, client 접속 요구가 있을 경우, 새로운 socket을 생성하고 임의의 source port로 바인딩하여 이를 data communication socket으로 사용한다.

ioLibrary인 경우, BSD Socket의 socket()와 bind() 함수를 ioLibrary의 socket() 함수 하나로 통합되어 있다.

또한, 아래 그림처럼 Socket resource는 BSD와 달리 동적으로 할당받는 것이 아니라, 이미 Chip에 존재하는 Hardwired socket을 그대로 사용함ㅇ로 accept() 함수가 필요없다. 즉, ioLibrary의 listen socket은 client의 접속 요구를 항상 대기하고 있으며, client의 요구가 받아질 경우 곧바로 Data communication socket으로 역할을 변경한다. 여러 client의 접속 요구를 받아들이기 위해서는 client 수 만큼 listen socket을 생성하여야 한다.

이러한 차이에도 불구하고, WIZnet chip은 아래와 같이 BSD socket Library를 지원한다.

BSD Socket by using ioLibrary

이 Library를 위즈네트의 ioLibrary에 bind()와 accept() 함수를 추가 구현한 Library이다.
여기서 이 함수는 아래와 같이 empty function으로 구현하여 BSD와의 호환성만을 유지한 것 같다.


int accept(int s, struct sockaddr *addr, socklen_t *addrlen)
{
   return 0;
}
int bind(int s, const struct sockaddr *name, socklen_t namelen)
{
   return 0;
}

이것보다는 아래와 같이 구현하는 것이 좀 더 정확한 구현이 될 것이다.


int accept(int s, struct sockaddr *addr, socklen_t *addrlen)
{
   struct sockaddr_in * destaddr = (struct sockaddr_in *)addr;
   while(getSn_SR(s) != SOCK_ESTABLISHED)
   {
      if(getSn_IR(s) & Sn_IR_TIMEOUT) return -1;
   }
   destaddr->sin_family = AF_INET;
   destaddr->sin_port = getSn_DPORTR(s);
   destaddr.sin_addr.s_addr = ntohl(getSn_DIPR(s));
   return 0;
}
int bind(int s, const struct sockaddr *name, socklen_t namelen)
{
   setSn_PORTR(((struct sockaddr_in *)name)->sin_port);
   return 0;
}

[Refer to WIZnet Musuem]
[Download Library]

POSIX BSD Socket

POSIX BSD Library와 가장 유사하게 구현된 Library로 BSD Socket Library로 구현된 다양한 Application을 손쉽게 Porting 할 수 있다.
select()와 poll(), 그리고 getsockoptH()와 setsockopt() 함수도 구현되어 있다.


int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
{
    int ret;
    struct w5100_socket *s;

    s = get_socket_from_fd(sockfd);
    if (s == NULL)
    {
        ret = -1;
    }
    else if ( addr->sa_family != AF_INET )
    {
        errno = EAFNOSUPPORT;
        ret = -1;
    }
    else if (s->state != W5100_SOCK_STATE_CREATED)
    {
        errno = EINVAL;
        ret = 1;
    }
    else if (s->type == SOCK_STREAM)
    {
        struct sockaddr_in *server;
        uint8_t sr;
        uint8_t sr_end;

        (void)addrlen;
        server = (struct sockaddr_in *)addr;

        /* TODO: check if already in use EADDRINUSE */
        w5100_write_sock_regx(W5100_Sn_PORT, s->isocket, &server->sin_port);
        w5100_command(s->isocket, W5100_CMD_OPEN);
        sr_end = W5100_SOCK_INIT;
        do {
            sr = w5100_read_sock_reg(W5100_Sn_SR, s->isocket);
        } while (sr != sr_end);
        s->sockname = *server;
        s->state = W5100_SOCK_STATE_BOUND;
        ret = 0;
    }
    else if (s->type == SOCK_DGRAM)
    {
        struct sockaddr_in *server;
        (void)addrlen;

        server = (struct sockaddr_in *)addr;
        bind_udp(s, server->sin_port);
        ret = 0;
    }
    else
    {
        /* TODO: RAW */
        errno = EBADF;
        ret = -1;
    }
    return ret;
}

[Refer to WIZnet Musuem]
[Download Library]
[How to Use]


블로그 이미지

밤소 MidnightCow

위즈네트 칩(W5300, W5200, W7100, W7500) 개발자

Fritz! Boy: Serial communication between Arduino and Gameboy (GBDK)

by Marcel Imig



Overview

This project describes both the communication between an Arduino Mega and a UPNP capable router, as well as the serial communication between Gameboy and Arduino. This is a contribution for the “Pimp your Fritz!” Competition of the Maker Faire 2015 in Berlin. The conditions of participation are here. The finalists are on the site of AVM. The winners at Heise.

Required Component :

  • Gameboy (DMG) oder Gameboy Color 30 €
  • USB 64m Smart card (z.B. von hier) 50 €
  • Gameboy Link cabel 5 €
  • Arduino Mega 15 €
  • Arduino Ethernet Shield 10 €
  • Housing (Optional) 5 € ~100 €

How to Run

After the Arduino Mega microcontroller has received an IP address from the Fritz! Box, it sends a SOAP request to its default gateway. In this query, he queries the properties of the WAN interface and returns the maximum up- and download bandwidth (“NewLayer1UpstreamMaxBitRate” and “NewLayer1DownstreamMaxBitRate”). Next, he intermittently polls the current bandwidth usage every three seconds (“NewByteReceiveRate” and “NewByteSendRate”). The collected values ​​are converted into megabits and transferred to the gameboy every second via the serial interface. A game is played on the game board’s cartridge, which listens on the serial port and displays the last 50 received values on a scale.

Learn More

Goto Original, Language : German


 

블로그 이미지

밤소 MidnightCow

위즈네트 칩(W5300, W5200, W7100, W7500) 개발자

Arduino + WebSockets II

by Daniel Garrido



Overview

These postings show how to use WebSockets to display data taken from Arduino and broadcast it to any Browser with WebSocket support.

This project describes how to use WebSockets to display data taken from Arduino and broadcast it to any Browser with WebSocket support. Test your browser here: http://websocket.org/echo.html

Please read the first part of this serie: http://yopero-tech.blogspot.com/2012/02/arduino-websockets.html

First of all we need to decide what data to display and what to control in Arduino from the web page .

In this example I am going to control 3 remote controlled relays that you can buy at your hardware store and I want to display the values from 2 temperature sensors.(DS18S20)

3 main parts of software & hardware(Arduino Board)

This project is composed out of 3 main parts of software apart from the hardware(Arduino Board):

  1. WebSocket Server:
    • Python
    • Autobahn
      • Twisted
        • PySerial
  2. MCU (Micro Controller Unit)
    • Arduino Board(Vinciduino in my case).
    • Arduino IDE or AVR studio.
  3. Client:
    • Any web server, I use xampp or python to test as localhost

Demo Movie

Learn More

Goto Original


블로그 이미지

밤소 MidnightCow

위즈네트 칩(W5300, W5200, W7100, W7500) 개발자

Cosm and TMP100

by Fork Robotics



Overview

These posting point out collecting data. Also, this unwieldy mass of data needs to be logged, processed, stored and displayed in a reasonable way for it to be usable. Then, show how to create a feed and upload data reading from sensor an to Cosm via an Arduino Ethernet Shield.

All of the devices around us are starting to become data collection points. Every minute of every day many data points are generated. This unwieldy mass of data needs to be logged, processed, stored and displayed in a reasonable way for it to be usable. The question becomes how to do this. One solution for the DIY community is Cosm (formerly Pachub) that allows us to do just that for free. In this article I’ll show you how to setup an account, create a feed and upload temperature readings from an I2C temperature sensor to Cosm via an Arduino Ethernet Shield.

Materials :

  • Cosm Account
  • Arduino and Ethernet Shield or Arduino Ethernet
  • Breadboard and jumper wires
  • tmp100 (or other I2C temperature sensor) on a breakout board

Setup a Cosm Account

Cosm site is changed to Xively.

If you don’t already have one the first thing you need to do is setup a Cosm Account

  1. Go to https://cosm.com
  2. Click the big blue “Get Started” button
  3. Enter an email, username and password then click the “Sign up” button
  4. You’ll get an email with a link to verify your registration
  5. The link will bring you directly into your account
  6. Click on the big plus button
  7. Select Arduino
  8. Give the new feed a title and tags (optional) and press Create
  9. The Cosm Site will give you a sample sketch to upload data. You only need the three lines that start with:
    A. #define APIKEY
    B. #define FEEDID
    C. #define USERAGENT

Learn More

Goto Original

 

블로그 이미지

밤소 MidnightCow

위즈네트 칩(W5300, W5200, W7100, W7500) 개발자

SparkFun Ethernet Shield Quickstart Guide

by Jimb0



Overview

In this tutorial, we’ll cover how to get up and running with the SparkFun Ethernet Shield. Requirements, hardware, assembly, and programming will all be covered. Follow along, and your Arduino should be skimming Twitter and hosting webpages in no time!

Requirements:

  • Headers (and soldering tools)
  • An Ethernet cable
  • µSD Card (optional)
  • Arduino Development Board
  • Arduino Software

Hardware

  • The SparkFun Ethernet Shield is comprised of two stand-out components - a Wiznet W5100 TCP/IP embedded Ethernet controller and a µSD socket.

    • The W5100 is a powerful little chip, which implements all sorts of complex network protocols - TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE, and the physcial Ethernet layer. This alleviates a lot of programming stress on us and memory stress on the Arduino. All of the communication between the W5100 and the Arduino is SPI-based and handled using the Ethernet library, which we’ll discuss in the firmware section below.

    • The W5100 is supported by a number of components - capacitors, a crystal, reset monitors - but most especially an Ethernet jack, actually a MagJack. Inside that little RJ-45 jack are a number of transformers and magnetics required for isolating Ethernet signals (you could say this jack is…more than meets the eye). There are even some LEDs poking out the end.

  • The µSD socket extends near the edge of the shield, where the card should be inserted. The socket sits next to a 74HC4050 (high-to-low level shifter), which handles all of the 5V-to-3.3V voltage shifting (those delicate µSD cards shouldn’t be subjected to 5V signals).

  • Some of the less spectacular components (don’t tell them I said that) on the Ethernet Shield include a reset button, 3.3V regulator, and a number of blinky LEDs. The reset button works just like the one the Arduino itself, though it’ll also reset the W5100. The LEDs include a power indicator LED, as well as a number of status LEDs (Ethernet receive/transmit, collision, and speed) tied to the W5100, which will appear to have a mind of their own.

Learn More

Goto Original


 

 

블로그 이미지

밤소 MidnightCow

위즈네트 칩(W5300, W5200, W7100, W7500) 개발자

Teleduino

by Teleduino



Overview

Teleduino converts your ethernet enabled Arduino into a powerful and versatile tool for interacting with devices over the internet. Not only that, but it makes it quick and easy.

Teleduino is now available for the Arduino Mega range of boards!

Once your Teleduino is configured, it automatically connects itself to the Teleduino server when powered on. The Teleduino server translates instructions received from the internet into actions on the Teleduino device.

Using the Teleduino platform, you can perform the following tasks with your Arduino via the simple web service:

  • Reset, ping, get uptime, get free memory.
  • Define pin modes, set digital outputs, set analog outputs, read digital inputs, read analog inputs, or read all inputs with a single API call.
  • Define up to 2 ‘banks’ (4 for the Mega) of shift registers. Each ‘bank’ can contain up to 32 cascaded shift registers, giving a total of 512 digital outputs (1024 for the Mega).
  • Shift register outputs can be set, or merged, and expire times can be set on merges (you could set an output(s) high for X number of milliseconds).
  • Define, and read and write from serial port (4 for the Mega).
  • Read and write from EEPROM.
  • Define and position up to 6 servos (48 for the Mega).
  • Interface with I2C (TWI) sensors and devices.
  • Set preset values for the above functions, which get set during boot. Preset values are stored in the first 178 bytes of the EEPROM (413 for the Mega).

Documentation

Learn More

Goto Original


 

블로그 이미지

밤소 MidnightCow

위즈네트 칩(W5300, W5200, W7100, W7500) 개발자

Controlling Arduino with iPod touch through WebSocket

by Yoshiyasu SAEKI



Overview

In this post, Author made an application with DeviceMotion Event and WebSocket in iPod touch. WebSocket server is written in Python/Tornado. So WebSocket message should be able to be relayed to other softwares or devices. Author tries to control Arduino device with iPod touch through WebSocket by moving ball in ipodtouch and getting ball data on Matrix LED.

Parts :

  • Matrix LED
  • ipod touch
  • Ehternet Shield
  • Arduino

Demo Movie

Learn More

Goto Original


 

블로그 이미지

밤소 MidnightCow

위즈네트 칩(W5300, W5200, W7100, W7500) 개발자

ArtNET DMX Node based on Arduino

by Caneira


Overview

The purpose of this article, based on an original project published in Blog Deskontrol Electronics, is to show how to build an Art-NET Node, based on the well known and well-known Arduino Mega, with capacity to control up to 4 DMX universes. This Node responds to all the basic messages of the Art-NET protocol, so any controller that respects the protocol will be able to detect it and use it as a DMX input/output device.

Materials Component name

  • Arduino Mega 2560 or Mega 1280
  • Arduino Ethernet Shield based on Wiznet W5100
  • Prototype Shiled, para montegem
  • Livraria Deskontrol 4 DMX
  • Arduino IDE V0023

Learn More

Goto Original

Translate site


 

블로그 이미지

밤소 MidnightCow

위즈네트 칩(W5300, W5200, W7100, W7500) 개발자

WebSocket SVG Arduino and LabVIEW

by SocketMan



Overview

For the time being, this blog will be the only place I post this demo program. Of course you are free to repost or use the code however you wish. Just remember you will need a 100% Arduino-compatible controller (I used the Freetronics Etherten to test the code) with Ethernet or an Ethernet shield to properly run the demo. You will also need the above websocket server library for it to work. Here is a screenshot showing the WebPanel script, SVG document, and Arduino sketch in action:

The script and the little Etherten board work pretty well, as does Per’s websocket library. The WebPanel script is a modified version of the WebPanel 0.1 release. I added a three-line graph SVG object and associated message handler for that object type. I also added a FIFO buffer to the script to create a 100-point long moving “waveform chart” strip-chart style graph. The SVG document is stored on and launched from the host PC.

I made several attempts to create a sketch that serves up the SVG document and script from the Etherten’s micro SD card, but the little controller just does not have enough memory. Everytime I tried to create a File object from the SD library with the websocket server running, the controller abruptly halted. It only has 2K of RAM, and although I tried moving every string constant and char array object to program memory, there still was not enough room. So I plan to get a new controller, either an Arduino Due or a chiKit UNO32 with much more memory.

The goal is to connect my iPad and Kindle Fire HD and have the controller send the GUI SVG document and script. When I get that step finished, I’ll start with a clean slate and create and entirely new script that uses the best elements from all previous releases. The new script will be designed specifically for Arduino-like controllers, but also implement the “no pogramming required” original goal of designing web GUI’s using Inkscap and prebuilt SVG objects.

Getting Ready to Return with New WebPanel!

Sorry I have been away for so long. I’m getting ready to revamp WebPanel with some new graphics, elements and a complete binary or text option. I will split the Javascript engines into two separate scripts, one for text data, the other for binary, and will release both in a brand new version coming soon!!

Source code

https://github.com/ejeklint/ArduinoWebsocketServer

http://svn.evexiallc.com/webpanel/Arduino_Webpanel_Demo.zip

Demo Movie

Learn More

Goto Original


 

블로그 이미지

밤소 MidnightCow

위즈네트 칩(W5300, W5200, W7100, W7500) 개발자