[DSP]/DSP283352011. 11. 12. 18:30

[DSP28335 EVM] W5200 TCP Server 전송 속도 테스트 (SPI속도 테스트)

[DSP28335 EVM]  W5200 TCP Server 전송 속도 테스트 (SPI속도 테스트)


TM320F28335와 같이 OS없는 MCU에서 이더넷 처리를 하려며 하드웨어 TCP/P 모듈을 이용하는 것이 가장 간단한 벙법이다. TCP/IP처리를 위한 복잡한 스텍이 필요 없이 간단히 이더넷을 연결 할 수 있다.
드라이버 코드만 수정하면  아주 간단하게 포팅 가능도록 코드를 작성해 두었기 때문에  W5200 모듈을 이용하여 테스트 해볼 예정이다.


TMS320F28335 의 클럭은 150Mhz로 동작한다. 하지만 SPI 동작속도는 최대 10Mhz이다. 참고로 TMS320F2808는 6Mhz, PICCOLO시리즈 TMS320F28069는 4.5Mhz로 이들과 비교 하면 두배 정도 빠른 속도 이다.
요즘 SPI가 대부분인데 최대속도가 다소 느려서 많이 아쉽다.




[LCD_EXP_EVM] 보드에 연결하면 W5100, W5200 TCP/IP 모듈을 쉽게 테스트 가능한다. SPI CS는 TMS320F28335의 GPIO14에 연결되어 있고 Reset(INT)는 GPIO15에 연결되어 있다.






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





W5100/W5200 제어 드라이버 코드
드라이버 코드만 수정하면 모든 MCU에서 쉽게 포팅 가능하도록 코드를 작성해 두고 있다.

//-----------------------------------------------------------------------------
// W5100 HAL
#define W5100_CS_PORT     GPIOA
#define W5100_CS_BIT     BIT14

#define W5100_RST_PORT     GPIOA
#define W5100_RST_BIT     BIT15

#define IINCHIP_RSToff()    cbi(W5100_RST_PORT, W5100_RST_BIT) 
#define IINCHIP_RSTon()     sbi(W5100_RST_PORT, W5100_RST_BIT)


#define W5100_IO_INIT()     EALLOW;\
          GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 0;\
          GpioCtrlRegs.GPADIR.bit.GPIO15 = 1;\
          GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;\
          GpioCtrlRegs.GPADIR.bit.GPIO14 = 1;\
          EDIS;\


#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()
#define IINCHIP_SpiSendData    SPI0_WriteReadByte
#define IINCHIP_SpiRecvData    SPI0_WriteReadByte
#define IINCHIP_SPI_SPEED()    SPI0_SetSpeed(SPI_SPEED_MAX)
//-----------------------------------------------------------------------------



 

Posted by nexp

댓글을 달아 주세요

  1. 비밀댓글입니다

    2014.08.06 13:01 [ ADDR : EDIT/ DEL : REPLY ]

[NXP]/LPC17002011. 11. 6. 23:00

[LPC1756 EVM] TCP/IP Server 전송 속도 테스트

[LPC1756 EVM] TCP/IP Server 전송 속도 테스트


LPC1756 을 이용하여 SPI방식의 Hardwired TCP/IP 모듈 W5200을 테스트 했다.
SPI속도가 빠르기 때문에 간단한 이더넷 솔루션으로 사용해 볼 만하다.
(TCP/IP 전송 속도 테스트 참고)

LPC1756의 SPI클럭 최대 속도는 48Mhz 이지만 실제 24Mhz이상에서는 정상적으로 동자하지 않는다.
SPI클럭 24Mhz에서 2.8Mbps 정도 출력된다.
(PIC32에 비하면 약간은 기대에 못미치는데... 클럭만 빠르다고 전송속도가 빠른것은 아닌것 같다.)


[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)
-------------------------------------------------------


[LPC1756 EVM] W5200 드라이버 코드

//-----------------------------------------------------------------------------
// W5100 HAL
#define W5100_CS_PORT     GPIO0
#define W5100_CS_BIT     BIT16

#define W5100_RST_PORT     GPIO0
#define W5100_RST_BIT     BIT6

#define IINCHIP_RSToff()    cbi(W5100_RST_PORT, W5100_RST_BIT) 
#define IINCHIP_RSTon()     sbi(W5100_RST_PORT, W5100_RST_BIT)


#define W5100_IO_INIT()     GPIOInit(0, DIR_OUT, W5100_CS_BIT);GPIOInit(0, DIR_OUT, 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()
//#define IINCHIP_SpiSendData    SPI0_WriteByte
#define IINCHIP_SpiSendData    SPI0_WriteReadByte
#define IINCHIP_SpiRecvData    SPI0_WriteReadByte
//-----------------------------------------------------------------------------

Posted by nexp

댓글을 달아 주세요

[DSP]/DSP280x-M2011. 10. 29. 12:05

[TMS320F2808 EVM] W5200 이용한 TCP Server 전송 속도 테스트

[TMS320F2808 EVM] W5200 이용한 TCP Server 전송 속도 테스트


TMS320F2808의 SPI 최대 속도는 6.2Mhz 정도 이고 이때 TCP 전송 속도는 1.5831 Mbps 정도 나온다.
결론 적으로 CPU속도는 나쁘지 않는데.. SPI클럭 속도가 너무 느리다. SPI속도를 요하는 어플리케이션은 고려할 필요가 있는것 같다.
그래도 1.5Mbps면 간단한 웹서버 정도 돌리는데는 문제가 없을것 같다.


[NET_EXP] W5100 / W5200 모듈 보드 핀맵



Posted by nexp

댓글을 달아 주세요

[Microchip]/dsPIC2011. 9. 30. 22:12

[dsPIC33 EVM] W5200 TCP/IP Loopback 전송 속도 테스트

[dsPIC33 EVM] W5200 TCP/IP Loopback 전송 속도 테스트



dsPIC33을 이용하여 SPI방식의 하드웨어 TCP/IP W5200 (W5100)의 전송 속도를 테스트 했다.

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

[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)
------------------------------------------------------------





[NET EVM] 보드에서 W5200 핀맵





dsPIC33 W5100 HAL 드라이버 코드 소스
//-----------------------------------------------------------------------------
// W5100 HAL
#define W5100_CS_PORT     PORTG
#define W5100_CS_BIT     BIT9


#define W5100_RST_PORT     PORTF
#define W5100_RST_BIT     BIT6

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


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

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

#define IINCHIP_SPI_MAX_SPEED()   SPI1_SetSpeed(SPI_SPEED_MAX)
#define IINCHIP_SPI_INIT()    SPI1_Init();IINCHIP_SPI_MAX_SPEED()
//#define IINCHIP_SpiSendData    SPI0_WriteByte
#define IINCHIP_SpiSendData    SPI1_WriteReadByte
#define IINCHIP_SpiRecvData    SPI1_WriteReadByte
//-----------------------------------------------------------------------------


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

댓글을 달아 주세요