io6Library



Goto English Version


Overview

io6Library는 위즈네트의 Hardwired Dual TCP/IP Stack Controller( WIZCHIP) 제품군을 사용하는 User Application들을 손쉽게 통합하고 관리하고, 새로운 위즈네트 제품 출시에 따른 User Application의 수정을 최소화할 수 있는 IPv6 통합 Library이다.

io6Library는 사용자의 특정 MCU에 의존적인 Code를 따로 관리하도록 구현하여, 사용자가 io6Library를 사용자 MCU에 맞게 Porting 작업을 할 필요가 없는 것이 특징이다. (자세한 내용은 How to Use를 참조하라)

Content

io6Library는 크게 아래와 같이 크게 3가지로 분류될 수 있다.

  • Reigsters Defintion

    • Common Registers
      : Network 정보, Mode, Interrupt 등과 같은 일반적인 Register을 정의한다.
    • Socket Registers
      : SOCKET을 Control하기 위한 Regsiter를 정의한다.
  • WIZCHIP 별 I/O Access function

    • Basic I/O function
      : WIZCHIP이 정의하는 Host Interface(SPI, BUS 등)를 통해 Input/Output를 Access하는 기본 단위 Function
    • Common Register Access Functions
      : Basic I/O Function을 기반으로 Common Register를 Access하는 Function
    • Socket Register Access Functions
      : Basic I/O Function을 기반으로 Socket Register를 Access하는 Function
  • 사용자 Application 통합,관리, Migration을 위한 WIZCHIP Control APIs

    • SOCKET APIs
      : BSD SOCKET API와 유사한 이름으로 사용가능한 SOCKT 통신 관련 함수를 제공한다.
    • Extra APIs
      : 칩별로 의존적인 Regiter/Memory, Address Map, Features 등에 상관없이 User Application의 통합을 지원하는 함수를 제공한다.
      : 이 함수들은 User Application의 Small footprint를 위해 WIZCHIP 별 I/O Access funcions로 대체 될 수 있다.

자세한 내용은 doxygen 문서 io6Library.chm 를 참조하라.
io6Library.chm는 최신이 아닐 수 있으므로, doxygen programDoxyfile.dox Project 파일을 이용하여 chm이나, html 문서를 만들어 참조하라.

Directory

ioLibrary는 상기 그림과 같은 Directory 구조를 가지며,주요 Directory는 아래와 같다.

io6Library 사용자는 wizchip_conf.h 에 정의된 몇몇 Define만을 수정하여 곧 바로 사용할 수 있다. 자세한 내용은 How to Use를 참조하라.

How to use

io6Library 설정하기

wizchip_conf.h 파일에 정의된 칩 종류, 및 칩 Interface등을 사용하고자하는 용도에 맞게 정의한다.

  • 사용할 Hardwired Dual TCP/IP Stack controller을 선택한다.
    하기 그림의 Blue Box 목록에서 하나를 선택하여 WIZCHIP을 Red Box와 같이 정의한다.

  • 사용자가 WIZCHIP Access에 사용하게 될 HOST Interface(Parallel Bus, Serial Bus Mode, 기타등등)를 선택한다.
    하기 그림의 Blue Box 목록 중에서 하나를 선택하여, Red Box와 같이 정의한다.

    • Parallel Bus Mode를 사용할 경우에만, CHIP에 할당할 HOST의 Memory Bank Base Address를 Red box와 같이 반드시 설정한다.

  • WIZCHIP PHY Access Mode 설정하기
    아래 그림과 같이, Blue Box에 정의된 Ethernet PHY 2가지 접근 방법 중 하나를 선택하여 Red box와 같이 설정한다.

    • _PHY_IO_MODE_PHYCR_ : WIZCHIP 내의 PHY cotnrol & Status Register를 통해 Operation Mode나 Link Status 같은 간단한 제어를 한다.
    • _PHY__IO_MODE_MII_ : Ethernet PHY Register를 MDC/MDIO 신호를 통해 직접 제어한다.

WIZCHIP I/O을 위한 사용자 단위 Function 만들기

사용자가 선택한 HOST Interface에 맞는 기본 단위 Access Function을 직접 작성한다.
이는, 사용자 HOST마다 Interface Control 방법이 다르기 때문에 사용자 맞는 기본 단위 Access Function을 직접 작성하여 한다.

예로 아래와 같이 정의하고 ST사의 STM32FXXX의 SPI1을 사용하여 WIZCHIP을 제어할 경우

  #define _WIZCHIP_IO_MODE_       _WIZCHIP_IO_MODE_SPI_VDM_

아래와 같이 SPI interface를 통해 WIZCHIP select/deselect, 1byte read/write, critical section enter/exit 와 같은 기본 단위 함수를 작성한다.

  • WIZCHIP select/deselect : WIZCHIP의 CSn Pin과 연결된 STM32FXXX의 임의의 GPIO PIN을 SET/RESET 하는 함수

    void your_wizchip_enable(void)
    {
     /* void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) */
     HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_RESET)
    }
    
    void your_wizchip_disable(void)
    {
     HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_SET)
    }
    
  • WIZCHIP 1 byte read/write : SPI를 통해 1 byte를 읽고 쓰는 함수

    /* Read 1 byte thru SPI */
    uint8_t your_spi_read_byte()
    {
     uint8_t ret;
     /*HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)*/
     HAL_SPI_Receive(SPI1, &ret, 1, 1000);
     return ret;
    }
    
    /* Write 1 byte thru SPI */
    void your_spi_wite_byte(uint8_t wd)
    {
    /* HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout); */
    HAL_SPI_Transmit(SPI1, &wd, 1, 1000);
    }
    
  • WIZCHIP Critical Section Enter/Exit : WIZCHIP을 Access하는 동안 Interrupt나 Task swtiching과 같은 Event로 보호하는 함수

    void your_critical_enter(void)
    {
    __disable_irq();
    }
    
    void your_critical_exit(void)
    {
    __enable_irq();
    }
    
  • WIZCHIP을 N byte read/write 함수
    : 필수 작성 코드는 아니다.
    : 하지만 WIZCHIP을 DMA와 같은 Peripheral를 이용하여 고속 접근을 원한다면, 하기와 같이 작성한다.
    : 작성하지 않았을 경우 N byte read/write는 당신의 1 byte read/write 함수를 기본적으로 반복 수행하여 N-Byte를 접근한다.

    void your_spi_dma_write_buf(uint8_t* pbuf, iodata_t len)
    {
     /* HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) */
     HAL_SPI_Transmit_DMA(SPI1, pbuf, (uint16_t)len);
    }
    
    void your_spi_dma_read_buf(uint8_t* pbuf, iodata_t len)
    {
     /* HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) */
     HAL_SPI_Receive_DMA(SPI1, pbuf, (uint16_t)len);
    }
    

    User Function을 io6Library에 등록하기

    void main(void)
    {
      uint16_t chip_id;
      wiz_NetTimeout tmp_timeout = 0;
      /*
      // Intialize your Target System such as SPI, UART, DMA, and etc.
      */
    
      /* Register your basic access function to io6Library */
    
      //WIZCHIP Enable/Disable
      reg_wizchip_cs_cbfunc(your_wizchip_enable, your_wizchip_disable);
    
      //WIZCHIP Critical Section
      reg_wizchip_cris_cbfunc(your_critical_enter, your_critical_exit);
    
      //WIZCHIP read/write function
      reg_wizchip_spi_cbfunc(your_spi_read_byte, your_spi_write_byte, 0, 0);
    
      // If you made DMA function for readign/writting function, you can register as following
      // reg_wizchip_spi_cbfunc(your_spi_read_byte, your_spi_write_byte, your_spi_dma_read_buf, your_spi_dma_write_buf);
      //
    
      /* For io6Library Read/Write Test */
    
      ctlwizchip(CW_GET_ID,&chip_id); // Check WIZCHIP ID value for read test
    
      int_mask = 0x
      ctlwizchip(CW_PHY_RESET, 0);  // Check PHY Link Led to turn off and then on
    
      /////////////////////////////////
      // Enjoy, WIZCHIP & io6Library //
      // Thank you                   //
      /////////////////////////////////
    }
    
  • 위의 예로 작성된 사용자 코드를 WIZCHIP 초기화 이전에 아래와 같이 등록한다.

Examples for io6Library & ioLibrary

WIZnet-ioLibrary Examples

Available Chip sets

Product Name Figures
W6100-L(Q)

Reference Site

블로그 이미지

MidnightCow

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

,