[ST_MICRO]/STM32F103-SM2012. 1. 28. 20:45

[STM32-SM2 EVM] W5200 이더넷 테스트 - NET-EVM 보드

[STM32-SM2 EVM] W5200 이더넷 테스트 -  NET-EVM 보드



STM32를 이용하여 [NET-EVM] 보드에서 W5200 모듈을 테스트 했다.





[NET-EVM] W5100/W5200용 커넥터




STM32-SM2는 핀맵이 약간 수정되었는데.. W5200의 /RST(INT0) 핀이 3.3V로 연결되기 때문에 3.3V끊고 PA15와 0옴으로 연결해 주어야 한다.




W5200 드라이버 코드
//-----------------------------------------------------------------------------
// W5100 HAL
#define _SPI1_ENABLE     1

#define W5100_CS_PORT     GPIOB
#define W5100_CS_BIT     BIT12
#define IINCHIP_RSToff()    cbi(W5100_RST_PORT, W5100_RST_BIT) 
#define IINCHIP_RSTon()     sbi(W5100_RST_PORT, W5100_RST_BIT)

#define W5100_IO_INIT()     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);\
          GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;\
          GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;\
          GPIO_InitStructure.GPIO_Pin=BIT12;\
          GPIO_Init(GPIOB, &GPIO_InitStructure);\
          GPIO_InitStructure.GPIO_Pin=BIT15;\
          GPIO_Init(GPIOA, &GPIO_InitStructure);


#define W5100_RST_PORT     GPIOA
#define W5100_RST_BIT     BIT15

#define IINCHIP_CSoff()     cbi(W5100_CS_PORT, W5100_CS_BIT) 
#define IINCHIP_CSon()     sbi(W5100_CS_PORT, W5100_CS_BIT)

#define IINCHIP_SPI_INIT()    SPI1_Init()
#define IINCHIP_SpiSendData    SPI1_WriteReadByte
#define IINCHIP_SpiRecvData     SPI1_WriteReadByte




STM32 TCP/IP 전송 속도 테스트
최대 SPI클럭 18Mhz 인 STM32에서 전송 속도는 2Mbps정도 출력된다.

코드 옵티마이즈 후 2.5Mbps 까지 가능하다.





Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F42011. 12. 6. 23:30

[STM32F4] W5100/W5200 TPC/IP Loopback 전송 속도 테스트

[STM32F4] W5100/W5200 TPC/IP Loopback 전송 속도 테스트



SPI 최대 클럭 21Mhz에서 3.5Mbps 정도 나온다.
빠르긴 한데.. 아쉬운 점은 168Mhz MCU인데 속도가 기대한 만큼은 나오지 않는것 같다.
(PIC32 CP/IP 전송 속도 테스트 결과 와 비교하면 80Mhz PIC32가 더 빠르게 나온다)

SPI클럭 설정을 좀더 자유롭게 할 수 있으면 좋을것 같은데....
SPI FIFO가 없어 그런것 같은데... DMA를 이용하면 좀더 빨라지지 않을까?

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






Cortex-M4 STM32F405 의 W5200 HAL Driver 코드
//-----------------------------------------------------------------------------
// W5100 HAL
#define _SPI1_ENABLE     1

#define W5100_CS_PORT     GPIOB
#define W5100_CS_BIT     BIT12

#define W5100_RST_PORT     GPIOA
#define W5100_RST_BIT     BIT0

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

#define W5100_IO_INIT()     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);\
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;\
          GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;\
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;\
          GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;\
          GPIO_InitStructure.GPIO_Pin=W5100_CS_BIT;\
          GPIO_Init(GPIOB, &GPIO_InitStructure);\
          GPIO_InitStructure.GPIO_Pin=W5100_RST_BIT;\
          GPIO_Init(GPIOA, &GPIO_InitStructure);


#define IINCHIP_CSoff()     cbi(W5100_CS_PORT, W5100_CS_BIT) 
#define IINCHIP_CSon()     sbi(W5100_CS_PORT, W5100_CS_BIT)

#define IINCHIP_SPI_INIT()    SPI1_Init();IINCHIP_SpiSpeed()
#define IINCHIP_SpiSendData    SPI1_WriteReadByte
#define IINCHIP_SpiRecvData    SPI1_WriteReadByte
#define IINCHIP_SpiSpeed()              SPI1_SetSpeed(SPI_SPEED_MAX)
//-----------------------------------------------------------------------------
Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430F5x2011. 11. 26. 18:00

[MSP430F5529 EVM] W5200/W5100 TCP/IP loopback 전송 속도 테스트

[MSP430F5529 EVM] W5200/W5100 TCP/IP loopback 전송 속도 테스트



[MSP430F5529 EVM] 을 이용하여 TCP/IP loopbak 전송 속도를 테스트 해 보았다.
MSP430F5x 의 경우 클럭이 최대 32Mhz이고 SPI클럭 속도 설정을 자유롭게 설정 가능하기 때문에 SPI클럭 속도에서 유리한 점이 있다.

메인 클럭을 32Mhz로 설정하고 SPI클럭을 16Mhz로 설정하여 테스트한 결과 2.2Mbps 정도의 전송 속도가 나온다.
다른 MCU의 TCP/IP 전송 속도 테스트 결과 와비교 했을때 나쁘지 않다.

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




Posted by nexp

댓글을 달아 주세요

[MCU]/CANTUS2011. 11. 20. 16:51

[CANTUS EX EVM] W5100 외부 메모리로 제어하기 - W5100 Direct Mode TCP전송 속도

[CANTUS EX EVM]  W5100 외부 메모리로 제어하기 - W5100 Direct Mode TCP전송 속도



[CANTUS-EX EVM] 보드의 W5200 CS는 nCS2(6008_0000h)에 할당되어 있다.




일단 간단히 W5100 제어 레지스터에 값을 읽고 쓰는 테스를 해 보자
 #define COMMON_BASE                              0x60080000
#define SHAR0                                                 (COMMON_BASE + 0x0009)


while(1)
{
        //W5100 MAC 레지스터에 값 쓰기
        *((vuint8*)(COMMON_BASE+SHAR0 )) = data;
        Delay(500);

        //MAC 레즈스터값 읽기
        temp =  *((vuint8*)(COMMON_BASE+SHAR0 ));
        DebugPrint("read=%x\r\n", tenp);
       Delay(500);
}



정상 동작한다.

W5100 TCP Server 루프백 테스트 예제를 포팅하여 테스트 해 보았다.

의외로 속도가 그리 빠르지 않다.
옵티마이즈나? 메모리 타이밍 설정이 필요 할것 같다.
[7] iInChip Send: 4.8839 Mbps(1193338 bytes, 1.8642 sec)
iInChip Recv: 4.0566 Mbps(1193338 bytes, 2.2443 sec)
------------------------------------------------------------
[8] iInChip Send: 4.3536 Mbps(1193338 bytes, 2.0913 sec)
iInChip Recv: 4.0821 Mbps(1193338 bytes, 2.2303 sec)
--------------------------------------------------------




한가지 문제가 발생했다.
데이터 전송을 잘 되는데... 수신이 문제가 있는것 같다.(송신이 이상한가?)
루프백 테스트시 read에서 invaild가 발생한다.

물론 한번에 100000Byte 이상 보내는것은 문제가 없이 송수신된다.

PC 소프트웨어 문제이가?
하드웨어적 이상인가?

패킷 캡쳐해본 결과 데이터 자체는 문제가 없는것 같다. 송수신 데이터는 같은데...
소프트웨어 문제 인가?

10kbye정도의 작은 데이터 전소 성공후 또 잘 된다.
메모리 엑세스 타이밍 조절으로 최대 6.2Mbps까지 출력은 되는데...
기대하던 속도는 아니다.(이정도면 SPI 방식보다 그리 빠르지 않은데... 뭔가 좀 이상하다.)




옵티마이즈와 메모리 엑세스 타이밍을 적절히 조절 후 최종 7MBps이상 나온다.
한가지 의심스러운것은 direct모드와 indirect 모드에서 속도차이가 별로 나지 않는다는 것인데... 그렇다면 어쩌면 속도는 더 나올지도 모르겠다.

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

Posted by nexp

댓글을 달아 주세요

[DSP]/DSP283352011. 11. 13. 23:30

[DSP28335 EVM] Hardware TCP/IP W5300 TCP전송 테스트 - TMS320F28335 [EXP-ALL EVM]

[DSP28335 EVM] Hardware TCP/IP W5300 TCP전송 테스트 - TMS320F28335 [EXP-ALL EVM]



[EXP-ALL EVM] 보드에는 wiznet사의 고속 Hardwired TCP/IP  W5300모듈을 연결할 수 있다.
TMS320F28335 외부 메모리 인터페이스로 제어 하면 고속의 이더넷 데이터를 전송할 수 있기 때문에 여러가지 실험해 볼것이 많을것 같다.
(좀더 자세한 내용은 TM320F28335 W5300포팅 참고)

[EXP-ALL EVM] 의 W5300모듈 연결 회로도
TMS320F28335는 16비트 모드를 지원하기 때문에 R49, R1을 제거한다. W5300의 CS는 TMS320F28335 의 CS0에 연결한다.





TMS320F28335를 이용하여 W5300 TCP 서버 루푸백 전송 속도 테스트 결과
대략 28Mbps 정도 출력된다.  55Mbyte 동영상 전송시 15초 정도 걸린다.
저렴하고 OS없는 임베디드 보드에서 간단한 코드로 TCP전송 속도가 이정도 이면.. 상당히 빠르다. (참고로 ARM9 2410으로 테스트시 45Mbps정도 나온다) .
물론 비교 대상은 아니지만 ATmega128(8Mhz) 에서 W5300 속도 테스트 결과(2.6Mbps)와 비교해 보면 아주 많은 차이가 난다.







TCP Server 처리 함수
Wiznet칩 제어를 위한 함수를 통합했다. 앞으로 손을 좀더 봐야 겠지만 이 코드로 수정 해 나갈 예정인다.
//-----------------------------------------------------------------------------
//TCP Server 처리함수
void ProcessTCPS(SOCKET s, unsigned int port)
{
 unsigned long len;
 unsigned int mode = 0;

 //TCP SOCKET status
 switch(getSn_SSR(s))               
 {     
  //초기에
  case SOCK_INIT:
   //접속대기
   temp = listen(s);
   if(!gTcpStatus)DebugPrint("%d : LOOPBACK_TCPS(%d) Started.\r\n",s,temp);
   gTcpStatus = 1;
   break; 
  
  // Socket CLOSED일 경우
  case SOCK_CLOSED:
   
   //닫고
   _close(s);  //C2000에서 close() 함수는 예약되어 있어서 함수명 변경했다.
  
   //새롭게 Open
   DebugPrint("TCP Server Opne.\r\n");
   socket(s,Sn_MR_TCP,port,mode);
   gTcpStatus = 0;
   break;
   
  //ESTABLISH?
  case SOCK_ESTABLISHED:          
   //수신된 데이터가 있으면
   if((len=getSn_RX_RSR(s)) > 0)
   {
    //수신하고
    len = recv(s,data_buf,len);

    //재전송(루프백 테스트)
    send(s, data_buf, len);
   }
   break;

  // PASSIVE CLOSED
  case SOCK_CLOSE_WAIT:              
    disconnect(s);
    break; 
  
  default:
   break;
 }
}
//-----------------------------------------------------------------------------



W5300초기화 함수
//WIZENT Chip 초기화함수
void IINCHIP_NetInit(void)
{
 uint8 tx_mem_conf[8] = {8,8,8,8,8,8,8,8};          // for setting TMSR regsiter
 uint8 rx_mem_conf[8] = {8,8,8,8,8,8,8,8};          // for setting RMSR regsiter

 unsigned char addr[6] = MY_NET_MAC;

 //initiate W5300
 iinchip_init(); 

 /* allocate internal TX/RX Memory of W5300 */
 if(!sysinit(tx_mem_conf,rx_mem_conf))          
 {
  DebugPrint("MEMORY CONFIG ERR.\r\n");
  while(1);
 }

 // If Little-endian, set MR_FS.
    setMR(getMR() | MR_FS|BIT10|BIT11|BIT12);
 Delay(100);

 //set MAC
 IINCHIP_SET_MAC(addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); 

 //set subnet
    MY_SUBNET_SET();
 IINCHIP_SET_SUB(addr[0], addr[1], addr[2], addr[3]);
 
 //set Gateway
    MY_GWIP_SET(); 
 IINCHIP_SET_GAR(addr[0], addr[1], addr[2], addr[3]);
 
 //set IP
    MY_IP_SET();
 IINCHIP_SET_IP(addr[0], addr[1], addr[2], addr[3]); 
}



TMS320F28335 W5300 TCP Server 테스트 예제코드
void main(void)
{
 short data = 0;
 unsigned int flag = 0;

 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 DebugInit(BAUD_115200);
 DebugPrint("W5300 Test\r\n");

 //TMS320F28335 외부 메모리 초기화
 init_zone();  

 //W5300 초기화
 IINCHIP_NetInit();
 DisplayConfig();

 while(1)
 {
  //TCP 서버 루프백 처리함수
  ProcessTCPS(SOCK_TCPS, MY_LISTEN_PORT); 
 }
}  


Posted by nexp

댓글을 달아 주세요