2015년 7월 5일 일요일
2015년 7월 1일 수요일
WIZwiki_W7500
Overview
WIZwiki-W7500은 WIZnet의 W7500을 기반으로한다. “Internet Offload Platform for IoT”을 표방하는 W7500 chip은 ARM Cortex-M0에 TCP/IP Offload Engine(TOE)를 SoC한 one-Chip Soulution이다. W7500은 TOE를 장착하고 있기 때문에 ARM Corte-M0로 Software TCP/IP의 지원없이도 Internet에 간단히 접속할 수 있습니다.
또한, WIZwiki_W7500은 Arduino Shield와 pin Compatible로 Arduino Shield를 사용하는데 용이하다. 그리고 CMSIS-DAP USB를 지원하여 ARM mbed Web-IDE에서 Programming과 Virtual-Serial Port를 지원하며, Keil/IAR의 IDE를 과는 Programming물론 Debugging이 가능하다.
Block Diagram
WIZwiki_W7500은 그림과 같이 크게 W7500, CMSIS-DAP, Ethernet port(RJ45)+PHY 3부분으로 구성된다.
-
ARM® Cortex™-M0 Core기반에 다수의 peripherals포함하고 있다. 다른 Vendor의 Microcontroller들과 차이점은 peripherals 중 MAC laye가 포함된 TCP/IP Offload Engine(TOE)를 탑재하고 있다는 것이다.
-
간단하게 Debugger Interface로 이해하면 된다. LPC11u35칩에 W7500의 program algorithm 내장한 CMSIS-DAP는 개발용 PC와 USB Cable를 통해 연결된다. 연결된 PC쪽에서는 WIZwiki_W7500 Board를 USB Drive인식 하도록 되어 있다. 물론 이를 위에 아래에 "How to write the firmware"참고하여 CMSIS-DAP용 Driver를 PC에 인스톨해야한다. USB Driver에 Bin을 Copy하는 식으로 Firmware의 업데이트가 가능하다. 또한 CMSIS-DAP은 Virtual COM를 지원하기 때문에 USB-to-Serial Port없이 CMSIS-DAP port로 WIZwiki_W7500의 UART Output/Input를 Control할 수 있다. CMSIS-DAP의 Algorithm의 변경은 LPC11u35칩의 Firmware를 update하면 되며 아래의 "How to write the firmware to CMSIS-DAP"를 참고한다.
RJ45+PHY
이 부분은 Ethernet PHY Layer로 W7500은 PHY를 내장하지 않기 때문에 Internet에 연결하기 위해 External PHY가 반드시 필요하다.
Features
- WIZnet W7500
- ARM® Cortex™-M0 Core upto 48MHz
- 128KB Flash memory
- 16KB to 48 KB SRAM
- Hardwired TCP/IP Core (8 Sockets, MII: Medium-Independent Interface)
- 12-bit, 8ch ADC
- 53 I/Os
- 1ch Watchdog, 4ch Timers and 8ch PWM
- 3ch UART
- 2ch SPI
- 2ch I2C
- Arduino form-factor
- Compatible with a wide range of commercially available shields
- CMSIS-DAP interface firmware
- Built-in USB drag ‘n’ drop FLASH programmer
- USB Virtual COM port for serial terminal
- CMSIS-DAP interface for programming and debugging from offline tools
Pinout
Resources on ARMmbed
Get Started
Update or Restore Firmware
ARMmbed WIZnetInterface
WIZnetInterface
Users » embeddist » Code » WIZnetInterface
WIZnetInterface ?
- EthernetInterface in ARM mbed
mbed.org는 Handbook>>Ethernet에 ARM mbed platform들이 Internet에 Connecting하기 위한 Network Library인 EthernetInterface를 제공하고 있다. EthernetInterface는 TCP/IP Software stack으로 lwIP을 채택하고 있다. - WIZnet TCP/IP Offload Engine
아래의 그림과 같이 TOE는 TCP이하의 Network Layer가 Hardware적으로 설계되어 있어 Operating System과 Microcontroller의 Networking을 위한 리소스와 메모리를 최소화 해준다. 따라서, 리소스가 제한되는 Low-end IoT Device에서 TOE의 기능이 탑재한 MCU혹은 TOE를 채택한 System은 보다 Networking 이외의 기능들에 최적화 시킬 수 있다.
- 과연, ARM mbed에서 이러한 TOE를 적용한 Platform혹은 Components 있나?
있습니다. 있고요.
Platform으로는 W7500이 적용된 WIZwiki_W7500이 있습니다.
Component로는 W5500이 적용된 W5500 Ethernet Shield가 있습니다. 둘다 made in 대한민국!- Platforms: WIZwiki_W7500
- Components: W5500 Ethernet Shield
What is new?
- W7500과 W5500을 어떻게 선택하나
eth_arch.h을 추가하여 Web-IDE에서 platform을 선택하면 Target Platform에 따라 자동적으로 W7500혹은 W5500을 적용할 수 있다. W5500과 W7500이 통합된 Library이지만 둘 중 하나를 선택하기 위해 여분의 Configuration이 필요없다.#if defined(TARGET_WIZwiki_W7500) #include "W7500x_toe.h" #define __DEF_USED_IC101AG__ //For using IC+101AG@WIZwiki-W7500 #else #include "W5500.h" // W5500 Ethernet Shield //#define USE_WIZ550IO_MAC // WIZ550io; using the MAC address #endif
- PHY링크를 어떻게 설정하고 확인하나
Ethernet PHY는 아래의 그림과 같이 RJ45의 Link LED와 Active LED를 이용하여 육안으로 확인이 가능하다. Embedded system에서는 MCU의 GPIO에 Link와 Active Signal을 연결하거나 MDIO Interface를 확인 할 수 있다.
(http://www.avtech.com/Support/modules/KB/Image/Image/166_RA_LEDs/Ethernet_LEDs_NormalOperation_BothTypes.gif)
EthernetInterface에서 이러한 기능을 위해 link()와 set_link()를 제공하고 WIZnetInterface에서도 이 API를 제공하고 있다.- link()
PHY링크를 확인할 수 있는 함수 return값이 True이면 Link이고, Fail이면 Link-Fail이다* Check if an ethernet link is pressent or not. * * @returns true if successful */ bool link(int wait_time_ms= 3*1000);
- set_link()
PHY의 Duplex/SPEED를 설정할 수 있는 함수이다./* * Sets the speed and duplex parameters of an ethernet link. * * @returns true if successful */ void set_link(PHYMode phymode);
How to import
- import and update
Where is Clone repository
아래의 명령어를 이용하여 WIZnetInterface를 Clone할 수 있으며 hg명령어를 이용하여 버젼관리를 할 수 있다.
hg clone https://embeddist@developer.mbed.org/users/embeddist/code/WIZnetInterface/
How to use
- make main.cpp
- WIZwiki_W7500
#define _DHCP_ EthernetInterface eth; /*1. Creat eth object from EthernetInteface class*/ main() { /*2. MAC address as arr in HEX-Type*/ uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x01, 0x02, 0x03}; /*3. Select DHCP or Fixed IP address*/ #ifdef _DHCP_ /*3.1 Set MAC address, Initialize the interface with DHCP*/ eth.init(mac_addr); #else /*3.2 Set MAC address and Set MAC, IP, Gatway address and Subnet Mask as String-Type*/ eth.init(mac_addr, "192.168.77.34", "255.255.255.0", "192.168.77.1"); #endif /*4. Check Ethernet Link-Done */ printf("Check Ethernet Link\r\n"); if(eth.link() == true) { printf("- Ethernet PHY Link-Done \r\n"); } else {printf("- Ethernet PHY Link- Fail\r\n");} /*5. Set IP addresses ,start DHCP if needed */ if( eth.connect() == ture ) { printf("Connected, IP: %s\n\r", eth.getIPAddress()); printf("MASK: %s\n\r", eth.getNetworkMask()); printf("GW: %s\n\r",eth.getGateway()); } else { printf("eth.connect fail\n\r"); } ... /* Your application Visit for examples - https://developer.mbed.org/teams/WIZnet/ */ }
- W5500 Ethernet Shield
#define _DHCP_ /* 0. Set SPI Interface with SPI API*/ SPI spi(D11, D12, D13); // mosi, miso, sclk /*1. Creat eth object from EthernetInteface class*/ EthernetInterface eth(&spi, D10, D9); // spi, cs, reset main() { /*2. MAC address as arr in HEX-Type*/ uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x01, 0x02, 0x03}; /*3. Select DHCP or Fixed IP address*/ #ifdef _DHCP_ /*3.1 Set MAC address, Initialize the interface with DHCP*/ eth.init(mac_addr); #else /*3.2 Set MAC address and Set MAC, IP, Gatway address and Subnet Mask as String-Type */ eth.init(mac_addr, "192.168.77.34", "255.255.255.0", "192.168.77.1"); #endif /*3. Check Ethernet Link-Done */ printf("Check Ethernet Link\r\n"); if(eth.link() == true) { printf("- Ethernet PHY Link-Done \r\n"); } else {printf("- Ethernet PHY Link- Fail\r\n");} /*4. Set IP addresses ,start DHCP if needed */ if( eth.connect() == ture ) { printf("Connected, IP: %s\n\r", eth.getIPAddress()); printf("MASK: %s\n\r", eth.getNetworkMask()); printf("GW: %s\n\r",eth.getGateway()); } else { printf("eth.connect fail\n\r"); } ... /* Your application Visit for examples - https://developer.mbed.org/teams/WIZnet/ */ }
WIZnetInterface APIs for mbed Ethenret Interface
- EthernetInterfaec : https://developer.mbed.org/handbook/Ethernet-Interface
- Socket : https://developer.mbed.org/handbook/Socket
- TCP/IP Protocols : https://developer.mbed.org/handbook/TCP-IP-protocols-and-APIs
- Ethernet : https://developer.mbed.org/handbook/Ethernet
WIZnetInterface Implementation base on mbed Ethernet Interface
- EthernetInterface- EthernetInterface Class
Type Func. Descriptions WIZnetInterface static int init () Initialize the interface with DHCP. O static int init (const char ip, const char mask, const char *gateway) Initialize the interface with a static IP address. O static int connect (unsigned int timeout_ms=15000) Connect Bring the interface up, start DHCP if needed. O static int disconnect () Disconnect Bring the interface down. no use static char* getMACAddress () Get the MAC address of your Ethernet interface. O static char* getIPAddress () Get the IP address of your Ethernet interface. O static char* getGateway () Get the Gateway address of your Ethernet interface. O static char* getNetworkMask () Get the Network mask of your Ethernet interface. O void EthernetInterface (PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset) Initialize SPI SPI pins to user for SPI interface and Reset pin for W5500 0 (for W5500) void EthernetInterface (SPI* spi, PinName cs, PinName reset) Initialize SPI SPI pins to user for SPI interface and Reset pin for W5500 O (for W5500) - Socket - TCPSocketServer Class
Type Func. Descriptions WIZnetInterface TCPSocketServer () Instantiate a TCP Server. O int bind (int port) Bind a socket to a specific port. O int listen (int backlog=1) Start listening for incoming connections. O int accept ( TCPSocketConnection &connection) Accept a new connection. O void set_blocking (bool blocking, unsigned int timeout=1500) Set blocking or non-blocking mode of the socket and a timeout on blocking socket operations. O int set_option (int level, int optname, const void *optval, socklen_t optlen) Set socket options. no use int get_option (int level, int optname, void optval, socklen_t optlen) Get socket options. no use int close (bool shutdown=true) Get socket options. O - Socket - TCPSocketConnection Class
Type Func. Descriptions WIZnetInterface TCPSocketConnection () TCP socket connection. O int connect (const char *host, const int port) Connects this TCP socket to the server. O bool is_connected (void) Check if the socket is connected. O int send (char *data, int length) Send data to the remote host. O int send_all (char *data, int length) Send all the data to the remote host. O int receive (char *data, int length) Receive data from the remote host. O int receive_all (char *data, int length) Receive all the data from the remote host. O void set_blocking (bool blocking, unsigned int timeout=1500) Set blocking or non-blocking mode of the socket and a timeout on blocking socket operations. O int set_option (int level, int optname, const void *optval, socklen_t optlen) Set socket options. no use int get_option (int level, int optname, void optval, socklen_t optlen) Get socket options. no use int close (bool shutdown=true) Close the socket. O void reset_address (void) Reset the address of this endpoint. O int set_address (const char *host, const int port) Set the address of this endpoint. O char* get_address (void) Get the IP address of this endpoint. O int get_port (void) Get the port of this endpoint. O - etnerhet_api - ethernet_api Class
Type Func. Descriptions WIZnetInterface Ethernet () Initialise the ethernet interface. no use virtual ~Ethernet () Powers the hardware down. no use int write (const char *data, int size) Writes into an outgoing ethernet packet. no use int send () Send an outgoing ethernet packet. no use int receive () Recevies an arrived ethernet packet. no use int read (const char *data, int size) Read from an recevied ethernet packet. no use void address (char *mac) Gives the ethernet address of the mbed. no use int link() Returns if an ethernet link is pressent or not. O void set_link(Mode mode) Sets the speed and duplex parameters of an ethernet link. O
ARMmbed Web-IDE
ARM mbed Web-IDE에서 놀자
Goals : ARM mbed Web-IDE에서 프로젝트를 생성하는 방법을 알고 Compile/Program을 해보면서 Web-IDE에 친해지기
- Platform : WIZwiki_W7500
- ARM® Cortex™-M0 Core 48MHz
- 128KB Flash memory
- 16KB to 48 KB SRAM
- Hardwired TCP/IP Core (8 Sockets, MII: Medium-Independent Interface)
- Platform : WIZwiki_W7500
program workspace에서 new프로젝트 생성하기
- mbed.org로그인 후 Develor Site >> Compiler Site로 이동!
Compiler Site의 Web-IDE의 메뉴바에서 왼쪽 상단의 New를 클릭하고 New program..를 연타!
Create new program wizard가 뜨면 당황하지 말고 각자에 환경에 맞게 설정!
- Platform: WIZwiki-W7500의 이외의 보드를 이용할 경우 해당 Platform을 선택한다.
- Template: 각각 platform마다 제공하는 Template예제들을 선택할 수 있다.
- Program Name: 알맞게 Program Name을 변경할 수 있다. (아래의 그림은 mbed_blinky였던것을 0_mbed_blinky변경한 것임)
- update check box: Default로 체크가 되어있다. import할때 최신 Library를 적용하여 import한다는 의미
- 모든 설정을 마친 후 OK 버튼을 클릭하면 Compiler Site로 변경되며 import를 수행한다.
Web-IDE인 Compiler Site에 0_mbed_blinky program이 생성 되었는지 확인하자
Program workspace 창에 Create new program wizard에서 적용한 0_mbed_blinky가 있는지 확인
0_mbed_blinky program 뽀개기
컴파일 전에 코드와 프로젝트 감상하고 가시겠습니다.
0_mbed_blinky program은 크게 main.cpp와 mbed.lib로 구성된다.
- 0_mbed_blinky/main.cpp: main()가 구현되어 있는 파일
- mbed.lib: mbed library는 ARM mbed에 등록되어 있는 모든 Cortex-M기반의 MCU의 CMSIS및 각종페리페럴의 Hardware Adapataion Layer(HAL)를 포함한다. 따라서, new program을 생성할 때 Default로 포함되어야한다. library형태라 Souce code를 확인 할 수는 없다. 코드를 참고 하기 원한다면 Code Site에 가서 mbed-src를 검색하자 mbed library를 코드 레벨로 확인할 수 있다. 그리고 주의할 점은 mbed-src는 베타버전으로 unstable할 수 있다. 반다로 mbed.lib는 stable 버젼으로 생각하면 거의(?) 된다.
main.cc를 보면
- mbed.lib를 사용하기 위해 1번 Line에 #include “mbed.h”필수
- Class나 API는 Handbook Site를 참고 하자
- DigitalOut myled(LED1):
- DigitalOut Class타입으로 LED1이라는 인자를 받아 myled는 인스턴스를 생성
- DigtalOut과 같은 Class나 API들은 handbook Site를 참고 하자
- DigitalOut관련은 Handbook >> DigitalOut
- wait(time)는 time의 인자만큼 초 단위로 wait한다.
- DigitalOut myled(LED1):
- 결국 이 예제는 LED1를 On으로 0.2초 OFF로 0.2초를 무한 반복하는 예제구나
Compile
- Web-IDE의 menu중 Compile를 클릭
- Complie이 error없이 완료되면 자동적으로 Bin를 다운로드한다.
- Bin파일의 Name은 Program Name_platform Name.bin 형식으로 생성된다.
Program
ARMmbed
ARM mbed는 아래의 그림처럼 IoT Device Platform을 위하 구성되는 Sillicon, Cloud, Device Partner들의 Communty를 표방한다.
Cortex-M을 제공하던 ARM사가 Cortex-M IoT Device Ecosystem을 더욱 확고히 하기위해 Operating System인 mbedOS와
IoT Cloud Server개념의 mbed Deiver Server를 포함하고 있다.
또한 ARM mbed on Site에서 IoT Device의 개발이 이루어 지도록 Web-IDE를 On-Site에서 지원하고 있으며 재발된 코드들의
버젼관리 및 배포를 할 수 있도록 Mecurial기반의 파일 버젼관리 시스템을 연동하고 있습니다. 이러한 Web-IDE를 기반으로 Official 혹은 User Library들이 공유되며 이를 바탕으로 Rapid Protypting이 가능하다.
따라서, 개발자들이 ARM mbed Site에서 IoT Device의 개발부터 IoT Cloud service의 Test를 완료 할 수 있다.
자세한 내용의 아래의 링크를 확인하세요
mbedOS
- 기존에는 같은 Cortex M processor를 사용하더라고 Vendor마다 각각 사용하는 방법이 달라 Function적으로는 같은 코드지만, 다른 Vendor의 MCU를 사용할 경우에는 각각의 MCU에 의존적인 부분들을 선별하여 고치는 poring작업들이 개발자들의 괴롭혔다. Fuctionc적으로는 검증되어있지만 MCU바뀌어서 벌어지는 코드 수정에 따른 무한 디버깅이 개발자들을 지치게 하죠. 이러한 문제를 해결하기 위해 Cortex Microcontroler Software Interface Standard가 등장했다.. CMSIS는 Vendor별로 존재하던 Hardware부분을 Hardware abstraction layer이용하여 각각의 다른 Vendor의 MCU를 하나의 Cortex M processor 사용하는 것 처럼 할 수 있게 하였다. 따라서 개발자들은 Hardware변경에 따라 발생하는 문제들을 줄일 수 있고 자기가 개발하려는 Function기능에 더욱 집중할 수 있게 되었다. mbedOS에도 이 CMSIS 기반으로 작성된다. 따라서, mbedOS를 이용함에 있어 Hardware에 따른 수정들이 최소화 하였다.
mbed Device Server
- 현재 (2015.07)에는 mbed Device Server는 Beta open으로 partner만이 접근이 가능하다. Xivily, Axeda 와 같은 기존의 Cloud Service업체들의 기능들을 ARM mbed에서 수용하여 IoT Cloud Service의 제공을 준비중이다.
Web IDE
KEIL와 IAR과 같은 IDE가 Web기반으로 제공되고 있다. 따라서 IDE를 설치하는 과정들이 생략되는 단점이 생긴다. 물론 Web-bwroser를 사용하기 때문에 네트워크 상황에서 또한 Web-IDE Server의 상황에따라 “렉”이 걸릴때가 있다. 이러한 문제는 Web-IDE에서 현재 작업중인 코드를 Export하는 기능을 제공하기 때문에 코드를 프로젝트단위로 Local PC로 다운로드하여 코드 작업을 할 수도있다. 다만, 있때는 자신이 사용하려는 IDE가 Local PC에 구축되어 있어야 한다.
자 여기서 궁금한점은 Remote에 있는 Web-IDE에서 Compile된 Bin파일은 어떻게 Local에 있는 Target Board에 Program시키냐는 것이다. 이문제는 아래의 두 단계에 의해 해결된다.
- Complie이 성공적일 경우 아래의 경우처럼 Bin파일 형태로 Web-bwroser를 통해 다운받아진다. (왼쪽 밑에부분 다운로드된 Bin파일존재)
- mbed platform들은 Local PC에서 아래의 그림과 같이 드라이브(mbed)로 인식된다. 따라서 다운 받은 Bin파일을 mbed drive에 Copy하면 program은 끝!
mbed.org 탐방
아래와 같이 Product까지 개발할 수 있는 Developer Site에 접속했다. 메뉴바를 보면 Platform / Components / Handbook / Cookbook등이 존재한다 하나씩 구경해보자
Platform
ARM mbed communy에 공식적으로 등록된 platform을 소개하는 페이이며,
각각의 platform를 클릭해서 들어가면 Pin map / Schematic / HelloWorld Code(예제코드) / 살수 있는 곳 의 형식으로 Platform에 대한 정보가 답겨 있다.Components
ARM mbed platform에 적용이 가능한 Actuator / Sensor / Communication 등의 module를을 소개하는 페이지 이며,
각각의 Components 클릭해서 들어가면 Pin map / Schematic / HelloWorld Code(예제코드) / 살수 있는 곳 의 형식으로 Components 대한 정보가 답겨 있다.Handbook
ARM mbed platform을 이용하기 위한 Team mbed에서 official적으로 공개하는 Code / Tutorial이 담겨진 페이지이다.
아래 그림과 같이 Analog IO제어 부터 Networking에 대한 official material이 제공된다.Cookbook
ARM mbed platform을 이용하는 User각자가 공개하는 Code / Tutorial이 담겨진 페이지이다.Compiler
ARM mbed의 Web-IDE이다. 아래와 같이 Program workspace창에서 여러개의 프로젝트를 관리할 수 있다.
또한 Web-IDE에서 Code editing / 컴파일 / 버젼관리 (commit/publish) / import&export 등의 대표적인 기능을 지원한다.
2015년 6월 18일 목요일
WIZnetInterface for ARMmbed
WIZnetInterface for ARMmbed
This is WIZnet Ethernet Interface using Hardware TCP/IP chip, W5500 and TCP/IP Offload Engine, W7500.
Users » embeddist » Code » WIZnetInterface
-> WIZnetInterface Lib will be released on Team WIZnet
- WIZwiki_W7500
- W5500 Ethernet Shield
What is this?
This is an Ethernet Interface library port-based on EthernetInterface. This is where the driver using TCP/IP offload(W5500/W7500), which is a market-proven hardwired TCP/IP stack, is implemented. Therefore, this library does not need lwip-eth.library.
- The Socket folder contains files that implement the SocketAPI and Protocols as like DHCP and DNS.
- The arch folder contains files that implement the driver for W5500 and W7500x_TOE.
- The EthernetInterface.c/.h implement the functions from SocketAPI/EthernetInterface.h
- The eth_arch.h implement to select TCP/IP TOE depending on platform.
What is new?
eth_arch.h
The eth_arch.h file is added to select arch depending to Target platform, we used define of TARGET_platform.#if defined(TARGET_WIZwiki_W7500) #include "W7500x_toe.h" #define __DEF_USED_IC101AG__ //For using IC+101AG@WIZwiki-W7500 #else #include "W5500.h" // W5500 Ethernet Shield //#define USE_WIZ550IO_MAC // WIZ550io; using the MAC address #endif
link()
The link function is added to check Ethernet link (PHY) up or not.* Check if an ethernet link is pressent or not. * * @returns true if successful */ bool link(int wait_time_ms= 3*1000);
link_set()
The set_link function is added to check Ethernet link (PHY) up or not./* * Sets the speed and duplex parameters of an ethernet link. * * @returns true if successful */ void set_link(PHYMode phymode);
Included DHCP and DNS lib
DHCP and DNS lib moved in Socket folder.
How to import
- import and update
- Right Click and click ‘From Import Wizard’ to import WIZnetInterface Library
- In import Wizard, input ‘WIZnetInterfae” in search box and click ‘Search’ button. Click ‘WIZnetInterface’ in search result window and click ‘Import’ button.
- Set ‘Import name’ and ‘Target path’, check ‘update’
- Right Click and click ‘From Import Wizard’ to import WIZnetInterface Library
Where is Clone repository
hg clone https://embeddist@developer.mbed.org/users/embeddist/code/WIZnetInterface/
How to use
make main.cpp
WIZwiki_W7500
#define _DHCP_ EthernetInterface eth; /*1. Creat eth object from EthernetInteface class*/ main() { uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x01, 0x02, 0x03}; /*2. Set MAC, IP, Gatway address and Subnet Mask*/ #ifdef _DHCP_ /*2.1 Set MAC address, Initialize the interface with DHCP*/ eth.init(mac_addr); #else /*2.2 Set MAC address and Set MAC, IP, Gatway address and Subnet Mask with string type */ eth.init(mac_addr, "192.168.77.34", "255.255.255.0", "192.168.77.1"); //Use fixed IP address #endif /*3. Check Ethernet Link-Done */ printf("Check Ethernet Link\r\n"); if(eth.link() == true) { printf("- Ethernet PHY Link-Done \r\n"); } else {printf("- Ethernet PHY Link- Fail\r\n");} /*4. Set IP addresses ,start DHCP if needed */ eth.connect(); printf("Connected, IP: %s\n\r", eth.getIPAddress()); printf("MASK: %s\n\r", eth.getNetworkMask()); printf("GW: %s\n\r",eth.getGateway()); ... /* Your application Visit for examples - https://developer.mbed.org/teams/WIZnet/ */ }
W5500 Ethernet Shield
#define _DHCP_ /* 0. Set SPI Interface with SPI API*/ SPI spi(D11, D12, D13); // mosi, miso, sclk /*1. Creat eth object from EthernetInteface class*/ EthernetInterface eth(&spi, D10, D9); // spi, cs, reset main() { uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x1D, 0x62, 0x11}; /*2. Set MAC, IP, Gatway address and Subnet Mask*/ #ifdef _DHCP_ /*2.1 Set MAC address, Initialize the interface with DHCP*/ eth.init(mac_addr); #else /*2.2 Set MAC address and Set MAC, IP, Gatway address and Subnet Mask with string type */ eth.init(mac_addr, "192.168.77.34", "255.255.255.0", "192.168.77.1"); //Use fixed IP address #endif /*3. Check Ethernet Link-Done */ printf("Check Ethernet Link\r\n"); if(eth.link() == true) { printf("- Ethernet PHY Link-Done \r\n"); } else {printf("- Ethernet PHY Link- Fail\r\n");} /*4. Set IP addresses ,start DHCP if needed */ eth.connect(); printf("Connected, IP: %s\n\r", eth.getIPAddress()); printf("MASK: %s\n\r", eth.getNetworkMask()); printf("GW: %s\n\r",eth.getGateway()); ... /* Your application Visit for examples - https://developer.mbed.org/teams/WIZnet/ */ }
WIZnetInterface Implementations for mbed Ethenret Interface
For networking based on Ethernet network, Ethenret Interface library is provided and is composed TCP/IP Protocol layer, Ethernet, EthernetInterface and Socket. In other words, the EthernetInterface library includes the networking stack necessary for connect betwwen mbed platform and Internet.
Each layer in EthernetInterface provides APIs to connect to the internet.
- EthernetInterfaec : https://developer.mbed.org/handbook/Ethernet-Interface
- Socket : https://developer.mbed.org/handbook/Socket
- TCP/IP Protocols : https://developer.mbed.org/handbook/TCP-IP-protocols-and-APIs
- Ethernet : https://developer.mbed.org/handbook/Ethernet
WIZnetInterface Implementation base on mbed Ethernet Interface
EthernetInterface- EthernetInterface Class
Type Func. Descriptions WIZnetInterface Support static int init () Initialize the interface with DHCP. O static int init (const char ip, const char mask, const char *gateway) Initialize the interface with a static IP address. O static int connect (unsigned int timeout_ms=15000) Connect Bring the interface up, start DHCP if needed. O static int disconnect () Disconnect Bring the interface down. X static char* getMACAddress () Get the MAC address of your Ethernet interface. O static char* getIPAddress () Get the IP address of your Ethernet interface. O static char* getGateway () Get the Gateway address of your Ethernet interface. O static char* getNetworkMask () Get the Network mask of your Ethernet interface. O void EthernetInterface (PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset) Initialize SPI SPI pins to user for SPI interface and Reset pin for W5500 0 (for W5500) void EthernetInterface (SPI* spi, PinName cs, PinName reset) Initialize SPI SPI pins to user for SPI interface and Reset pin for W5500 O (for W5500) Socket - TCPSocketServer Class
Type Func. Descriptions WIZnetInterface Support TCPSocketServer () Instantiate a TCP Server. O int bind (int port) Bind a socket to a specific port. O int listen (int backlog=1) Start listening for incoming connections. O int accept ( TCPSocketConnection &connection) Accept a new connection. O void set_blocking (bool blocking, unsigned int timeout=1500) Set blocking or non-blocking mode of the socket and a timeout on blocking socket operations. O int set_option (int level, int optname, const void *optval, socklen_t optlen) Set socket options. X int get_option (int level, int optname, void optval, socklen_t optlen) Get socket options. X int close (bool shutdown=true) Get socket options. O Socket - TCPSocketConnection Class
Type Func. Descriptions WIZnetInterface Support TCPSocketConnection () TCP socket connection. O int connect (const char *host, const int port) Connects this TCP socket to the server. O bool is_connected (void) Check if the socket is connected. O int send (char *data, int length) Send data to the remote host. O int send_all (char *data, int length) Send all the data to the remote host. O int receive (char *data, int length) Receive data from the remote host. O int receive_all (char *data, int length) Receive all the data from the remote host. O void set_blocking (bool blocking, unsigned int timeout=1500) Set blocking or non-blocking mode of the socket and a timeout on blocking socket operations. O int set_option (int level, int optname, const void *optval, socklen_t optlen) Set socket options. X int get_option (int level, int optname, void optval, socklen_t optlen) Get socket options. X int close (bool shutdown=true) Close the socket. O void reset_address (void) Reset the address of this endpoint. O int set_address (const char *host, const int port) Set the address of this endpoint. O char* get_address (void) Get the IP address of this endpoint. O int get_port (void) Get the port of this endpoint. O etnerhet_api - ethernet_api Class
Type Func. Descriptions WIZnetInterface Support Ethernet () Initialise the ethernet interface. X virtual ~Ethernet () Powers the hardware down. X int write (const char *data, int size) Writes into an outgoing ethernet packet. X int send () Send an outgoing ethernet packet. X int receive () Recevies an arrived ethernet packet. X int read (const char *data, int size) Read from an recevied ethernet packet. X void address (char *mac) Gives the ethernet address of the mbed. X int link() Returns if an ethernet link is pressent or not. O void set_link(Mode mode) Sets the speed and duplex parameters of an ethernet link. O
Revision History
- Initial Release : 19 June. 2015