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

[W5200 EVM] TCP 전송 속도 테스트

[W5200 EVM] TCP 전송 속도 테스트


W5200을 이용하여 MCU별로 TCP/IP Loopback 전송 속도를 테스트 해 보았다.
MCU별 SPI최대 속도도 참고 할 수 있는 자료가 될것 같다.
TCP/IP 전송 속도 테스트 결과 참고 

PIC32
마이크로 칩사의 PIC32는 SPI최대 속도가 20Mhz임에도 불구 하고 4MBps정도 까지 출력된다. SPI로 데이터 읽고 쓰는데 상당히 빠른것 같다. 저렴하면서 성능이 좋아 가장 마음에 든다.




dsPIC33
SPI클럭 13Mhz 에서 최대로 나오며 2.4Mbps 정도 출력 된다.

[3] iInChip Send: 2.3772 Mbps(6596649 bytes, 21.1710 sec)
iInChip Recv: 2.4131 Mbps(6596649 bytes, 20.8568 sec)
------------------------------------------------------------
[4] iInChip Send: 2.3933 Mbps(6596649 bytes, 21.0288 sec)
iInChip Recv: 2.4132 Mbps(6596649 bytes, 20.8557 sec)
------------------------------------------------------------


STM32
최대 SPI클럭 18Mhz 인 [STM32 EVM]에서 전송 속도는 2.5Mbps정도 출력된다.





CANTUS
국산 32bit MCU코어인 CANTUS는 SPI 최대 클럭이 23Mhz이고 이때 전송 속도는 2.38Mbps가 출력 된다.
 ar

인다이렉트/다이렉트 모드로 테스트시

[1] iInChip Send: 7.4276 Mbps(11983617 bytes, 12.3092 sec)
iInChip Recv: 7.4303 Mbps(11983617 bytes, 12.3048 sec)
------------------------------------------------------------


[adStar]

108Mhz로 동작하는 adStar에서는 W5200에서 TPC송수신 속도가 3Mbps정도로 측정된다. 





LPC1LK
Cortex-M0코어의 저렴한 LPC1113의 SPI최대 속도가 12Mhz이고 W5200 TCP전송 속도는 1.5Mbps정도 나온다.
[1] iInChip Send: 1.5744 Mbps(3966014 bytes, 19.2184 sec)
iInChip Recv: 1.5546 Mbps(3966014 bytes, 19.4632 sec)
------------------------------------------------------------
[2] iInChip Send: 1.5687 Mbps(3966014 bytes, 19.2887 sec)
iInChip Recv: 1.5694 Mbps(3966014 bytes, 19.2800 sec)
------------------------------------------------------------


LM3S5732
TI의 Cortex-M3 LM3S5732의 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)
------------------------------------------------------------


DSP (TMS320F2808)
TMS320F2808의 SPI 최대 속도는 6.2Mhz 정도 이고 이때 TCP 전송 속도는 1.5831 Mbps 정도 나온다.


DSP(TMS320F28335)
TMS32F28335에서 SPI방식의 W5200을 이용하여 TCP Server 전송 속도 테스트 결과 SPI Clock 10MHz에서 대략 2.3Mbps정도 출력된다.


LPC1756 (Cortex-M3)
SPI클럭 24Mhz에서 2.8Mbps 정도 출력된다.

[31] iInChip Send: 2.8086 Mbps(348160 bytes, 0.9457 sec)
iInChip Recv: 2.5316 Mbps(348160 bytes, 1.0492 sec)
------------------------------------------------------------
[32] iInChip Send: 2.8575 Mbps(348160 bytes, 0.9296 sec)
iInChip Recv: 2.4732 Mbps(348160 bytes, 1.0740 sec)
-------------------------------------------------------


MSP430 (MSP430F5529)
메인 클럭을 32Mhz로 설정하고 SPI클럭을 16Mhz로 설정하여 테스트한 결과 2.2Mbps 정도의 전송 속도가 나온다.

-----------------------------------------------------------
[8] iInChip Send: 2.2657 Mbps(3880723 bytes, 13.0676 sec)
iInChip Recv: 2.1496 Mbps(3880723 bytes, 13.7736 sec)
------------------------------------------------------------
[9] iInChip Send: 2.1323 Mbps(3880723 bytes, 13.8855 sec)
iInChip Recv: 2.2160 Mbps(3880723 bytes, 13.3608 sec)
-------------------------------------------------------



Cortex-M4 STM32F4
SPI 최대 클럭 21Mhz에서 3.5Mbps 정도 나온다
------------------------------------------------------------
[7] iInChip Send: 3.5567 Mbps(5278574 bytes, 11.3230 sec)
iInChip Recv: 3.5074 Mbps(5278574 bytes, 11.4822 sec)
------------------------------------------------------------
[8] iInChip Send: 3.5647 Mbps(5278574 bytes, 11.2975 sec)
iInChip Recv: 3.3565 Mbps(5278574 bytes, 11.9982 sec)
--------------------------------------------------------


EFM32G210 - 저전력 Cortex-M3

EFM32를 이용하여 TCP/IP 전송율 테스트 결과 1.4Mbps 정도

Posted by nexp

댓글을 달아 주세요

  1. 캐럴리

    관리자의 승인을 기다리고 있는 댓글입니다

    2011.09.14 17:55 [ ADDR : EDIT/ DEL : REPLY ]
  2. december

    관리자의 승인을 기다리고 있는 댓글입니다

    2012.07.18 12:52 [ ADDR : EDIT/ DEL : REPLY ]

[Microchip]/PIC322011. 9. 2. 22:00

[PIC32] W5200(W5100) TCP/IP Boopback 전송 속도 Test

[PIC32] W5200(W5100) TCP/IP Boopback 전송 속도 Test





마이크로 칩사의 PIC32는 SPI최대 속도가 20Mhz임에도 불구 하고 4MBps정도 까지 출력된다. SPI로 데이터 읽고 쓰는데 다른 MCU보다 상당히 빠른것 같다. 저렴하면서 성능이 좋아 가장 마음에 든다. (SPI 효율은 가장 뛰어난것 같다.)
TCP/IP 전송 속도 테스트 결과 참고 





PIC32 W5200 제어 HAL 드라이버 코드
#define _SPI0_ENABLE    1

//-----------------------------------------------------------------------------
// W5100 HAL
#define W5100_CS_PORT     LATG
#define W5100_CS_BIT     BIT9


#define W5100_RST_PORT     LATD
#define W5100_RST_BIT     BIT1

#define IINCHIP_RSToff()    Cbi(W5100_RST_PORT, W5100_RST_BIT) 
#define IINCHIP_RSTon()     Sbi(W5100_RST_PORT, W5100_RST_BIT)


#define W5100_IO_INIT()     Cbi(TRISG,  W5100_CS_BIT );Cbi(TRISD,  W5100_RST_BIT);

#define IINCHIP_CSoff()     Cbi(W5100_CS_PORT, W5100_CS_BIT)
#define IINCHIP_CSon()     Sbi(W5100_CS_PORT, W5100_CS_BIT)

#define IINCHIP_SPI_INIT()    SPI0_Init();IINCHIP_SpiSpeed()
#define IINCHIP_SpiSendData    SPI0_WriteReadByte
#define IINCHIP_SpiRecvData    SPI0_WriteReadByte
#define IINCHIP_SpiSpeed()              SPI0_SetSpeed(SPI_SPEED_MAX)
//-----------------------------------------------------------------------------


Posted by nexp

댓글을 달아 주세요

[MCU]/CANTUS2011. 4. 10. 21:13

[CANTUS EVM] 이더넷을 이용한 전자액자 테스트

[CANTUS EVM] 이더넷을 이용한 전자액자 테스트



CANTUS와 W5100을 이용하여 이더넷 전자 액자를 만들어 보았다. 이더넷을 이용하면 속도도 빠르고 네트웍으로 제어 할 수 있기 때문에 여러가지 이점이 많다. 일단 네트웍으로 기본 이미지 전송하고 LCD에 표시하는 간단한 예제를 작성해 보았다.

LCD_EXP_EVM 보드 를 이용하면 TFT-LCD및 W5100연결이 가능하다.



W5100모듈을 뒷면에 연결할 수있다.





CANTUS, W5100을이용한 이더넷 전자액자 테스트 동영상
UDP로 접속하여 이미지 데이터를 고속으로 전송하고 TFT LCD에 출력하도록 했다.




USB 전송과비교해 보면 두배 정도의 차이가 나는것을 확인할 수 있다. W5100을 SPI방식이 아닌 인다이렉트모드로 바꾸면 속도는 훨씬더 빨리질것이다.




이더넷 호스트 프로그램
BMP파일을 열어 16비트 이미지로 변환후 이더넷으로 데이터 전송하는 프로그램




Posted by nexp

댓글을 달아 주세요

[INTERFACE]/WIZNET_EVM2010. 11. 19. 01:32

[W5100] STM32에서 SPI로 테스트중... 속도문제

[W5100] STM32에서 SPI로 테스트중... 속도문제

STM32에서 SPI로 테스트중...
STM32를 SPI를 이용하여 W5100테스트 중이다. 기본 동작은 잘 되지만 전송 속도가 문제다.
SPI클럭을 18M/4 = 4.5Mhz 로 구동 하는데 속도가 400kbps도 안된다. AVR 4Mhz로 구동해도 500k이상 나왔는데...




SPI를 클럭을 메인클럭에서 2분주 해서 다시 시도 해본다. 아예 SPI리드 라이트가 않된다.

wiz_write_buf() 함수를 좀 수정해야 할듯...
CS를 for루프 위쪽으로 올려서 CS제어 부분도 줄여볼까해서 해보니 데이터 에러가 발생한다.

  IINCHIP_CSoff();        
  for(idx=0;idx<len;idx++)
 {
  IINCHIP_SpiSendData(0xF0);
  IINCHIP_SpiSendData(((addr+idx) & 0xFF00) >> 8);
  IINCHIP_SpiSendData((addr+idx) & 0x00FF);
  IINCHIP_SpiSendData(buf[idx]);
   }
 IINCHIP_CSon();


SPI Wirte를 함수에서 직접 레지스트로 바꾸니 좀 더  빨라졌다

 void SPI1_WriteByte(unsigned char Data)
{
 //while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
 while((SPI2->SR & SPI_I2S_FLAG_TXE) == RESET);
   
 SPI_I2S_SendData(SPI2, Data);

//while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
 while((SPI2->SR & SPI_I2S_FLAG_RXNE) == RESET);

 SPI_I2S_ReceiveData(SPI2);

}



[1] iInChip Send: 0.4277 Mbps(148684 bytes, 2.6525 sec)
iInChip Recv: 0.4213 Mbps(148684 bytes, 2.6923 sec)
------------------------------------------------------------


Data Read, Write부분도 변경하니 좀더 빨라진다.
[1] iInChip Send: 0.5328 Mbps(148684 bytes, 2.1290 sec)
iInChip Recv: 0.5251 Mbps(148684 bytes, 2.1604 sec)
------------------------------------------------------------


SPI Read/Wrte 두 함수 모두 변경하니 조금 더 빨라졌다.

void SPI1_WriteByte(unsigned char Data)
{
 while((SPI2->SR & SPI_I2S_FLAG_TXE) == RESET);
    
 SPI2->DR =  Data;

 while((SPI2->SR & SPI_I2S_FLAG_RXNE) == RESET);

 Data = SPI2->DR;
}


560k까지 나오고 있다.
[1] iInChip Send: 0.5737 Mbps(148684 bytes, 1.9773 sec)
iInChip Recv: 0.5655 Mbps(148684 bytes, 2.0060 sec)
------------------------------------------------------------

SPI1_WriteByte() 함수를 쓰지 않고 하니 더 빨라진다.

       int temp;
      
    while((SPI2->SR & SPI_I2S_FLAG_TXE) == RESET);
    SPI2->DR = 0xF0;
 while((SPI2->SR & SPI_I2S_FLAG_RXNE) == RESET);
    temp = SPI2->DR;
   
   
 while((SPI2->SR & SPI_I2S_FLAG_TXE) == RESET);
    SPI2->DR = ((addr)>>8);   
 while((SPI2->SR & SPI_I2S_FLAG_RXNE) == RESET);
    temp = SPI2->DR;

   
 while((SPI2->SR & SPI_I2S_FLAG_TXE) == RESET);
    SPI2->DR = (addr);  
 while((SPI2->SR & SPI_I2S_FLAG_RXNE) == RESET);
    addr = SPI2->DR;
   
   
 while((SPI2->SR & SPI_I2S_FLAG_TXE) == RESET);
    SPI2->DR = data;    
 while((SPI2->SR & SPI_I2S_FLAG_RXNE) == RESET);
    temp = SPI2->DR;


630kbps가 최대 인것 같다.
[1] iInChip Send: 0.6455 Mbps(148684 bytes, 1.7574 sec)
iInChip Recv: 0.6362 Mbps(148684 bytes, 1.7831 sec)
------------------------------------------------------------

Posted by nexp

댓글을 달아 주세요

[INTERFACE]/WIZNET_EVM2008. 7. 22. 20:49

[W5300] WIZ830MJ 모듈 보드 테스트

W5300 모듈 보드 테스트


사용자 삽입 이미지


Architecture

TCP / IP

W5300

PHY

Embedded in W5300

MAG JACK

Interface

10/100 Base-T Ethernet (Auto Detection

Network

Protocol

TCP, UDP, IP, ARP, ICMP, IGMP, PPPoE, MAC

Dimension

53.3 x 34.0 x 19.5 mm (W x D x H)

Connector Type

2.54 mm pitch 2x14 header pin

Input Voltage

3.3V Internal Operation, 5V Tolerant I/Os

Power Consumption

Temperature


MAC, IP는 정상 Read/Write되지만 GW, SUB는 정상적으로 Acc 되지 않는 현상 발생

W5300 Reg Dump

정상 

056 000 000 000 000 032 000 000 000 008
220 000 000 146
000 000 192 168 001 094
255 255 255 000 192 168 001 092 007 208
000 008 008 008 008 008 008 008 008 008
008 008 008 008 008 008 008 008 000 255
000 000 000 000 000 040 000 000 000 000
000 000 000 000


비정상

056 000 000 000 000 032 000 000 000 008
220 000 000 146
000 000 000 000 000 000
000 000 000 000 192 168 001 092 255 255
000 000 008 008 008 008 008 008 008 008
008 008 008 008 008 008 008 008 000 255
000 000 000 000 000 040 000 255 000 000
000 000 000 000


보드에 연결된 SRAM 메모리를 제거후 테스트 하니 정상 동작한다. RAM이 불량인듯...


 

W5300 모듈 속도 테스트

direct모드에서 0.5Mbps 밖에 나오지 않고 있음...

[1] iInChip Send: 0.5604 Mbps(108336 bytes, 1.4749 sec)
iInChip Recv: 0.5336 Mbps(108336 bytes, 1.5491 sec)
------------------------------------------------------------

->옵티마이즈 옵션 설정 수정후 2.6Mbps 나옴

[1] iInChip Send: 2.6742 Mbps(1007370 bytes, 2.8740 sec)
iInChip Recv: 2.6547 Mbps(1007370 bytes, 2.8951 sec)
------------------------------------------------------------


W5100->W5300 기존 예제 테스트

W5300은 패킷 단위로 데이터 처리 하므로 최소 버퍼 사이즈를 1460으로 처리 해야 함

(단 Aline모드에서는 더 적은 사이즈로 처리 가능하지만 짝수 데이터로 송 수신 되어야 함)

recv()함수에서 최소 버퍼 사이즈로 처리됨

그래서 처리 버퍼를 1460으로 설정해 두는것이 좋다.

#define TX_RX_MAX_BUF_SIZE 1024

 

#define TX_RX_MAX_BUF_SIZE 1460



   if (len > TX_RX_MAX_BUF_SIZE)len = TX_RX_MAX_BUF_SIZE;

   
   //read the received data
   len = recv(SOCK_TCPS, data_buf, len);

Posted by nexp

댓글을 달아 주세요

  1. 비밀댓글입니다

    2008.07.23 11:39 [ ADDR : EDIT/ DEL : REPLY ]