[INTERFACE]/WIZNET_EVM2014. 11. 22. 21:55

[W5500 EVM] 모듈 보드 제작

[W5500 EVM] 모듈 보드 제작




W5200 EVM 과 동일 한 핀맵으로 W5500 EVM 보드를 제작 했다. W5500 칩 자체 크기가 커져서 사이즈는 약간 크지만 저렴한 가격 때문에 사용할 곳이 많을것 같다.


W5500 은 W5200과 거의 동일한 기능을 하지만 칩 공정상 더 최신 기술이 들어가 저렴해 진것 같다. 


W5500은 기존 W5200 모듈 및 SPI 모듈의 핀맵과 호환되도록 제작해서 여러 확장 보드에서 쉽게 연결하여 테스트 가능하도록 제작했다.


W5500의 테스트 소스코드는 Winzet 에서 제공하는 W5500 Driver 파일을 수정해서 작성했다.






W5500 EVM에서 추가된 부분은 MAC Address 할당 메모리가 추가되었다. 필요에 따라 MAC Address 할당된 메모리 실장하면 MAC Address 할당을 해결할 수 있다.


Posted by nexp

댓글을 달아 주세요

[INTERFACE]/W72002013. 1. 1. 22:00

[W7200 EVM] Internet MCU 보드제작 - Cortex M3 with hardwired TCP/IP, MAC & PHY

[W7200 EVM] Internet MCU 보드제작 - Cortex M3 with hardwired TCP/IP, MAC & PHY




H/W TCP/IP 포함된 Wiznet 사의 Cortex-M3(STM32) W7200 보드를 제작 했다. W7200은 한 칩에 MAC PHY, H/W TCP/IP(W5200), STM32가 들어 있어 소형의 임베디드 네트웍을 구성할 수 있다.


[STM32-SM EVM] 보드와 핀맵을 호환할 수 있도록 제작했고, STM32코어 이므로 때문에 소스코드는 그대로 사용가능하다.



W7200 특징


W7200 ARM 32-bit Cortex-M3

  - 72MHz maximum frequency (1.25 DMIPS/MHz)
  - 20KBytes Data Memory (RAM)
  - 128KBytes Code Memory
  - Low Power: Support Sleep, Stop and Standby modes
  - 7 timers
  - Three 16-bit timers, each with up to 4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input
  - 2 watchdog timers (Independent and Window)
  - SysTick timer 24-bit down counter
  - Full-duplex UART
  - Programmable Watchdog Timer
  - CRC calculation unit, 96-bit unique ID
  - GPIO, SPI, USART and USB Interfaces
  - 10BaseT/100BaseTX Ethernet PHY embedded



W7200 블록도




[W7200 EVM]




W7200 - H/W TCP IP W5200, MAC, PHY, STM32 가 하나의 칩으로 구성되어 있어 소형으로 제작 가능하다.

다만 페키기가 QFN타입이 아니라 수작업으로 납땜하기에는 약간의 기술을 요한다.




STM32 코어 이기 때문에 USB2UART를 이용하여 시리얼 포트로 펌웨어 다운로드 할 수 있다.




[ST-Type EVM]형태로 제작해서 기존 확장 보드와 쉽게 호환 가능하다.






W7200 회로도




Posted by nexp

댓글을 달아 주세요

[AVR]/AT90USB2012. 1. 27. 22:46

[AT90USB1287-EX] 이더넷 테스트 - 초간단 웹서버 만들기

[AT90USB1287-EX] 이더넷 테스트 - 초간단 웹서버 만들기




AVR와 W5100을 이용하여 아주 간단한 웹서버를 만들어 보도록 하자.
웹서버는 TCP서버의 일종으로 웹브라우저에서 80번 포트로 접속하면 HTTP프로토콜에 따라 데이터를 송수신 하면 된다.

AVR 초간단 웹서버 테스트 동영상
[AT90USB1287-EX] 보드가 임베디드 웹서버로 동작하고 접속하여 보드의 LED제어하는 간단한 예제를 작성해 보았다.





먼저 접속하면 보여줄 웹페이지를 HTML 코드로 작성해서 변수로 저장해 둔다. 추후 좀더 복잡한 페이지는 USB메모리 스틱이나 SD Card에 저장할 수 있다.




const unsigned char str_http_ok[] = {"HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n"};

const unsigned char str_msg[] = {"HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n\
    <html><head></head><body ><DIV><p align=\"center\"><b><size=\"8\"><br>[AT90USB1287-EX] WebServer - LED Test</font></b></DIV>\
    <HR style=\"COLOR: #3366FF; BACKGROUND-COLOR: #EB9243\"></DIV><div align=\"center\"><p align=\"center\"></p></div>\
    <form name=\"form1\" method=\"get\" action=\"$LED_ON\"><p align=\"center\"><input type=\"submit\" value=\"LED ON\"  name=\"ledo\"></p></form>\
 <p><p></td></tr><tr><td><form name=\"form2\" method=\"get\" action=\"$LED_OF\"><p align=\"center\">\
    <input type=\"submit\" value=\"LED OFF\" name=\"ledn\"></p></form><p></td></tr></table></div></body></html>"};




TCP서버 처리를 위한 함수는 기존과 동일한데 HTTP프로토콜은 디폴트 80번 포트 이므로 80번포트로 소켓을 생성하고 데이터 수신되면 웹페이지를 전송해 주면 된다. 아래 코드와 같이 아주 간단하다.

void ProcessTCPS(unsigned int sock)
{
    unsigned int len;
 unsigned int port = MY_LISTEN_PORT;

 switch (getSn_SR(sock))
 {
  // Socket CLOSED일 경우     
 case SOCK_CLOSED:
  if(!m_SokStatus1)
  {
   DebugPrint("[%d] : Web Server Started.",sock);
   m_SokStatus1 = 1;
  }

  if(socket(sock, Sn_MR_TCP, DEFAULT_HTTP_PORT, 0x00) == 0)
  {
   DebugPrint("\a%d : Fail to create socket.",sock);
   m_SokStatus1 = 0;
  }
  else listen(sock);
 
  break;

case SOCK_ESTABLISHED:
  //수신데이터가 있으면
  if((len = getSn_RX_RSR(sock)) > 0)   
  {
      if (len > TX_RX_MAX_BUF_SIZE) len = TX_RX_MAX_BUF_SIZE;
      //데이터 수신
      len = recv(sock, data_buf, len);  
  
     //수신데이터 처리 -> 웹 쿼리 응답
     ProcessWebpage(sock, data_buf);    
  } 
  break;

 case SOCK_CLOSE_WAIT:                            
  //If the client request to close
  disconnect(sock);
 
  m_SokStatus1 = 0;
  break;  
  } 
}



이제 웹페이지에서 특정한 응답을 받아서 처리 하는 부분을 작성해 보자. 이번 예제에서는 웹페이지에 있는 버튼에 따라 LED를 On/Off할 수 있도록 해 보았다.

아래 코드와 같이 브라우저에서 웹페이지를 요청하면 "HTTP/1.0 200 OK" 메세지와 HTML페이지를 전송하면 된다.
  send(sock, str_http_ok, strlen(str_http_ok));
  send(sock, str_msg, strlen(str_msg));


void ProcessWebpage(unsigned sock, unsigned char *data_buf)
{
 int wait_send=0;

 //LED 제어 처리
 if(strncmp("$LED_ON", (char *)&(data_buf[5]), 7)==0)
 {     
  Led1On();
  send(sock, str_http_ok, strlen(str_http_ok));
  send(sock, str_msg, strlen(str_msg));
  DebugPrint("led on\r\n");
 }
 else if(strncmp("$LED_OF", (char *)&(data_buf[5]), 7)==0)
 {     
  Led1Off();
  PORTF = 0xFF;
  send(sock, str_http_ok, strlen(str_http_ok));
  send(sock, str_msg, strlen(str_msg));
  DebugPrint("led off\r\n");
 }
 else
 {
  send(sock, str_msg, strlen(str_msg));   
 }

 while(getSn_TX_FSR(sock)!= getIINCHIP_TxMAX(sock))
 {
  if(wait_send++ > 1500)
  {
   DebugPrint( "HTTP Response send fail");
    break;
  }
  Delay(1);
 }
 disconnect(sock);
 DebugPrint("closed\r\n");
}





Posted by nexp

댓글을 달아 주세요

[TI]/LM3S5xxx2011. 9. 15. 23:00

[LM3S5732 EVM] W5200 테스트

[LM3S5732 EVM] W5200 테스트










type.h의 bool 타입이 기존 프로젝트와 겹쳐서 컴파일 에러가 발생한다.
이런 부분은 컴파일마다 차이가 발생할 수 있으므로 unsigned char로 대체 했다.
//typedef enum { false, true } bool;


socket.c, socket.h 파일에서 bool 사용하는것을 수정 했다.
extern uint16 send(SOCKET s, const uint8 * buf, uint16 len, bool retry); // Send data (TCP)


다른 MCU와 다르게 INT/RST 를 묶어 두었을때 포트가 정상 동작하지 않는다.(다른 MCU에서는 INT/RST핀을 동시에 사용하도록 했었다.)
아무래도 GPIO특성상 4mA밖에 흘리지 못해서 그런것 같다.
INT/RST 핀을 따로 분리 하니 잘 동작한다.




또 한가지 문제가 발생 했다.

SPI클럭 설정 부분에서 12Mhz이상 되면 정상 동작하지 않는다.
스펙상으로 25Mhz까지 동작한다고 하는데...
12Mhz이상 설정하면 무조건 25Mhz클럭이 출력되도 정상 동작하지는 않는다.

 SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(),
        SSI_FRF_MOTO_MODE_0, //SPI MODE 설정
        SSI_MODE_MASTER,  //Maser/Slave
        12000000,    //SPI 클럭 주파수
        gSpIDataWidth);     //데이터크기


SSIClk = FSysClk / (CPSDVSR * (1 + SCR))

레지스터를 직접 설정해 보았지만 아무리 조합 해 봐도 12Mhz이상 나오지 않는다. 계산상으로도 그렇고..(CPSR 은 2의 배수이기 때문이다.)
HWREG(SSI0_BASE + SSI_O_CPSR) = 3;
HWREG(SSI0_BASE + SSI_O_CR0) &= ~(0xFF00);

결론은 Luminary의 최대 클럭은 12Mhz이다.


12Mhz일 때 TCP 전송 속도는 1.79Mbps정도 된다. 
[1] iInChip Send: 1.7998 Mbps(3966014 bytes, 16.8116 sec)
iInChip Recv: 1.7996 Mbps(3966014 bytes, 16.8136 sec)
------------------------------------------------------------
Posted by nexp

댓글을 달아 주세요

[INTERFACE]/WIZNET_EVM2011. 9. 9. 08:30

[W5200 EVM] 보드 제작

[W5200 EVM] 보드 제작


하드웨어 TCP/IP 스택을 지원하는 W5100의 신버전 W5200 테스트 보드를 제작했다. SPI방식만 지원해서 더 소형 으로 제작 가능하다. SPI 클럭속도가 훨씩 더 빨라지고 8개의 스택을 지원하므로 웹서와 같은 어플리케이션에 저렴하고 간단하게 적용할 수 있다. 




기존 W5100 EVM과 비교해서 크기가 더 작아지고



기존 보드와 핀맵을 동일하게 제작하여 확장보드에 연결 가능하다.



W5200, W5100 확장 테스트 보드 [NET-EVM]



[W5200 EVM] 핀맵 회로도



Posted by nexp

댓글을 달아 주세요