본문 바로가기

[INTERFACE]/WIZNET_EVM

[W5100 EVM]Simple TCP-Client Example


[W5100 EVM]Simple TCP-Client 예제 - AVR128
사용자 삽입 이미지
[W5100 EVM]모듈을 이용하여 간단한 TCP-Client 예제를 작성해 보겠습니다.
 
 
코드구조
현제 예제는 AVR Studio(GCC)를 이용하여 작성되었지만 레이어를 두어 다른 CPU나 컴파이러에서도 쉽게 포팅 가능하도록 구성되어 있습니다.
전체 폴더 구조는
[00_hal] : 하드웨어 종속적인 데이터 파일
[01_drv] : 각종 드라이버 관련 파일
[ex0_..] : 사용자 Application
 
로 구성되어 있고 Wiznet칩 관련 드라이버는 [01_drv/wiznet/..]폴더에 있습니다.
사용자 삽입 이미지
 
 
 
 
버스모드 설정
W5100의 Access모드는 DIRECT_MODE, INDIRECT_MODE, SPI_MODE가 있고 자신의 하드웨어에 맞게 설정하면 됩니다.
DIRECT_MODE가 가장 속도는 빠르지만 Data-8, Address-14 Ctl-5 많은 제어핀이 필요하므로 하드웨어가 복잡해 집니다.
SPI_MODE는 속도는 느리지만 MOSI, MISO, SCLK, CS, INT의 5핀만으로 가능하므로 소형 마이컴에 적합 합니다.
INDIRECT_MODE는 Address핀을 사용하지 않아 핀을 좀더 줄인 모드로 동작할 수 있습니다. At91SAM7과 같이 포트가 적은 CPU는 이 방법을 쓰면 속도도 유지하면서 포트를 줄일 수 있는 방법입니다.
 
예제는 간단히 테스트 목적이므로 SPI방식으로 설정 했습니다.
 
[/01_drv/wiznet\mcu/types.h] 파일에서 버스모드를 설정할 수 있습니다.
 
//#define __DEF_IINCHIP_BUS__           __DEF_IINCHIP_DIRECT_MODE__
//#define __DEF_IINCHIP_BUS__           __DEF_IINCHIP_INDIRECT_MODE__

  #define __DEF_IINCHIP_BUS__            __DEF_IINCHIP_SPI_MODE__             //Enable SPI_mode
 
 
 
SPI방식 연결회로도
 
 /INT단자는 인터럽트 방식을 사용하지 않을때는 연결하지 않아도 됩니다. 간단히 폴링방식 테스트만 원한다면 인터럽트는 이용하지 않아도 되고 대부분의 예제는 폴링방식으로 가능합니다.
사용자 삽입 이미지
[ExpBoard]에서 AVR을 이용한 SPI방식으로 연결
 
사용자 삽입 이미지
 
 
 
 
DIRECT_MODE 연결 회로도
사용자 삽입 이미지
 
 
 
 
 
 
네트웍초기화
사용자 삽입 이미지
 
Source IP, Destiantion IP, Gateway ip등은 간단히 define으로 정의하여 자신의 네트웍 환경에 맞도록 설정해 줍니다.
 
 
클라이언트의 일은 접속되기를 수동적으로 기다는 서버와의 통신을 시작 하는 것이다.
TCP클라이언트가 수행하는 4가지 단계
1)socket()을 이사용하여 TCP소켓 생성
2)connect()함수를 이용하여 서버와의 연결을 설정
3)send(), recv()함수를 이용하여 데이터 송수신
3)close()함수로 연결 종료
 
 
메인 함수
프로그램 자체는 상당히 간단하게 작성 했습니다.
InitWiznet(), init_timer(), NetInit() 함수로 W5100을 초기화 하고
ProcessTcpClient()함수에서 이더넷을 수신되는 데이터를 감시 하다 데이터가 들어오면 recv()함수로 수신된 데이터 만큼 읽어올 수 있습니다.
len = recv(SOCK_MYTEST, data_buf, len);
 
데이터를 전송할 경우는 send()함수를 이용하여 데이터를 원하는 길이만큼 전송하면 됩니다.
send(SOCK_MYTEST, data_buf, len);
 
 
 
//-----------------------------------------------------------------------------
// Main Routine
//-----------------------------------------------------------------------------
int main(void)
{
   SystemInit();
 
   //Serial Init
   U0_Init(BAUD_115200);
   DebugPrint("Wiznet W5100 Test Program.\r\n");
 
   //W5100 Chip Initialize
   //----------------------------
   InitWiznet();
 
   NetInit();
   //----------------------------
 
   //Display Net Configuration
   GetNetConfig();
 
   while (1)
   {
      //TCP Client Process
      ProcessTcpClient();
   }  
}
//-----------------------------------------------------------------------------
 


실행결과

클라언트 모드로 동작하며 서버로 부터 데이터가 전송되면 시리얼 포트로 전송된 데이터를 출력하는 예제의 터미널 결과값 입니다.

사용자 삽입 이미지
반응형