[ST_MICRO]/STM32F42017. 1. 12. 00:46

[STM32F4_ZE_NET] FSMC 테스트 - W5300 이더넷 전송 속도 테스트

[STM32F4_ZE_NET] FSMC 테스트 - W5300 이더넷 전송 속도 테스트





[STM32F4_ZE_EVM] 보드는 FSMC에 Hardwired TCP/IP 칩인 W5300 모듈을 연결할 수 있다.

STM32F405도 MII(RMII) 이더넷 인터페이스가 있긴하지만 이더넷 전송속를 높일 수 있는 W5300을 이용하여 TCP/IP 전송율을 테스트 해 보자


[STM32F4_ZE_EVM] 보드에 STM32F405 FSMC NE2(PG9)에 CS가 연결되어 있고 Data Bus는 16bit 모드 이다.





기본 설정을 이용하여 STM32F405에서 W5300 TCP 루프백 전송율을 테스트 해본 결과 5Mbps 정도 측정이 된다.

이때 CS 타임이 1.6us 정도 이다.


/CS time -> 1.6us


  SRAM_Timing.AddressSetupTime       = 15;

  SRAM_Timing.AddressHoldTime        = 15;

  SRAM_Timing.DataSetupTime          = 255;

  SRAM_Timing.BusTurnAroundDuration  = 15;

  SRAM_Timing.CLKDivision            = 16;

  SRAM_Timing.DataLatency            = 17;





타이미을 최대한 짧게 설정하여 테스트 해보자.

동작하는 범위에서 최대로 짧게 설정하니 40ns 정도 되고 TCP 루프백 전송율은 90Mbps 정도로 출력된다.


다른 MCU에서 W5300 TCP전송율 테스트 결과와 비교해 보면 100M 이더넷에서 거의 최대 치로 출력되는것 같다.



/CS time -> 40ns


  SRAM_Timing.AddressSetupTime       = 2;

  SRAM_Timing.AddressHoldTime        = 2;

  SRAM_Timing.DataSetupTime          = 4;

  SRAM_Timing.BusTurnAroundDuration  = 3;

  SRAM_Timing.CLKDivision            = 2;

  SRAM_Timing.DataLatency            = 2;





Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F43x2014. 9. 7. 22:11

STM32F429 - W5300 을 이용한 TCP/IP 전송 속도 테스트

STM32F429 - W5300 을 이용한 TCP/IP 전송 속도 테스트



STM32F429 는 최대 180Mhz로 구동된다. W5300을 이용하여 TCP/IP 전송 속도 테스트 결과 37Mbps 정도로 측정된다.





STM32F4의 FMC 타이밍을 좀더 짧게 설정하니 속도가 2.5배 이상 상승한다.

90Mbs로 거의 최대 속도가 나오는것같다.





STM32F439 W5300 FMC초기화 코드


void InitFMC_W5300(void)

{


  GPIO_InitTypeDef GPIO_Init_Structure;

  

  hsram.Instance  = FMC_NORSRAM_DEVICE;

  hsram.Extended  = FMC_NORSRAM_EXTENDED_DEVICE;

  


  SRAM_Timing.AddressSetupTime       = 2;

  SRAM_Timing.AddressHoldTime        = 2;

  SRAM_Timing.DataSetupTime          = 4;

  SRAM_Timing.BusTurnAroundDuration  = 3;

  SRAM_Timing.CLKDivision            = 2;

  SRAM_Timing.DataLatency            = 2;


/*

  SRAM_Timing.AddressSetupTime       = 10;

  SRAM_Timing.AddressHoldTime        = 10;

  SRAM_Timing.DataSetupTime          = 25;

  SRAM_Timing.BusTurnAroundDuration  = 8;

  SRAM_Timing.CLKDivision            = 2;

  SRAM_Timing.DataLatency            = 4;

*/

  SRAM_Timing.AccessMode             = FMC_ACCESS_MODE_A;

  

  hsram.Init.NSBank             = FMC_NORSRAM_BANK3;

  hsram.Init.DataAddressMux     = FMC_DATA_ADDRESS_MUX_DISABLE;

  hsram.Init.MemoryType         = FMC_MEMORY_TYPE_SRAM;

  hsram.Init.MemoryDataWidth    = SRAM_MEMORY_WIDTH;

  hsram.Init.BurstAccessMode    = FMC_BURST_ACCESS_MODE_DISABLE;

  hsram.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;

  hsram.Init.WrapMode           = FMC_WRAP_MODE_DISABLE;

  hsram.Init.WaitSignalActive   = FMC_WAIT_TIMING_BEFORE_WS;

  hsram.Init.WriteOperation     = FMC_WRITE_OPERATION_ENABLE;

  hsram.Init.WaitSignal         = FMC_WAIT_SIGNAL_DISABLE;

  hsram.Init.ExtendedMode       = FMC_EXTENDED_MODE_DISABLE;

  hsram.Init.AsynchronousWait   = FMC_ASYNCHRONOUS_WAIT_DISABLE;

  hsram.Init.WriteBurst         = FMC_WRITE_BURST_DISABLE;

  hsram.Init.ContinuousClock    = SRAM_CONTINUOUS_CLOCK;

  

  /* Initialize the SRAM controller */

  if(HAL_SRAM_Init(&hsram, &SRAM_Timing, &SRAM_Timing) != HAL_OK)

  {

    /* Initialization Error */

    Error_Handler(); 

  }


}





STM32F429 W5300 드라이버 코드

//-----------------------------------------------------------------------------

#define W5300_BANK_ADDR                 ((uint32_t)0x64000000)

#define W5300_DATA_ADDR                 (*(uint16_t *) (W5300_BANK_ADDR))

                                        

#define _W5300_DATA(p)                    (*(__IO uint16_t*) (W5300_BANK_ADDR + (p<<1)))


#define W5300_RST_PORT GPIOA

#define W5300_RST_BIT BIT9


#define IINCHIP_RSToff() cbi(W5300_RST_PORT, W5300_RST_BIT)

#define IINCHIP_RSTon() sbi(W5300_RST_PORT, W5300_RST_BIT)



#define W5300_IO_INIT()

//-----------------------------------------------------------------------------




Posted by nexp

댓글을 달아 주세요

[DSP]/DSP283462014. 1. 11. 22:30

[TMS320C28346] W5300을 이용한 TCP/IP 전송속도 테스트

[TMS320C28346] W5300을 이용한 TCP/IP 전송속도 테스트



TMS320C28346 은 C28코어로 (C2834x) Delfino시리즈중 가장 성능이 좋은 MCU이다. 최대 300Mhz로 동작하고 512KB RAM의 풍부한 리소스를 가지고 있다. 
코어 자체가 C28 이므로 F28335와 코드는 거의 호환이된다.

TMS320F28335코드에서 약간의 수정만 해 주면 기존 TCP/IP코드가 동작한다.
init_zone() 함수에서 XTIMCK 를 1로 설정하니 정상 동작한다.
XintfRegs.XINTCNF2.bit.XTIMCLK = 1;
 
 
옵티마이즈 레벨3으로 설정시 32Mbsp 정도로 구동된다.






TMC320C28346을 이용하여 W5300에서 TCP/IP 전송 속도 테스트 결과 32MBps정도 측정된다.

 

[1] iInChip Send: 32.8414 Mbps(62999139 bytes, 14.6353 sec)
iInChip Recv: 33.1076 Mbps(62999139 bytes, 14.5177 sec)
------------------------------------------------------------
[2] iInChip Send: 32.4111 Mbps(62999139 bytes, 14.8297 sec)
iInChip Recv: 32.6400 Mbps(62999139 bytes, 14.7257 sec)


Posted by nexp

댓글을 달아 주세요

[DSP]/DSP283352013. 9. 22. 20:38

TMS320F28335 - W5300 MACRAW를 이용한 EtherCat Test

TMS320F28335 - W5300 MACRAW를 이용한 EtherCat Test




W5300은 하드웨어적으로 TCP/IP를 구현한 Ethernet Controller이지만 Ethernet 데이터 부분을 사용자 임의 데이터를 보낼수 있는 MACRAW 모드로 구동할 수 있다. MACRAW 모드를 이용하면 임의이 데이터를 보낼수 있는데.. EtherCat 페킷을 보내면  EhterCat 통신을 할 수 있다. 특히 TMS320F28335와 같이 실시간 처리가 가능한 DSP를 이용하면 EtheCat구현이 쉬어진다. 





아래 표는 EtherCat Frame 데이터 구조이다.

간단히 구조를 살펴 보면 목적지, 출발지 MAC주소와 EtherType에 0x88A4를 사용하고 EtherCat Data를 전송하면 된다.




EhterCat Data 필더에는 2Byte의 총 데이터 길이와 Cmd, Idx, Address... 등등의 Data Headerd와 데이터로 채워진다.

데이터는 2+26 번째 버퍼 부터 시작된다.





W5300 MACRAW 모드 초기화

Sn_MR_MACRAW 모드로 소켓을 생성하면 된다. 여기서 주의 사항은 MACRAW모드는 반드시 소켓 0번만 가능하다.

void Init_EtheCat(void)

{

socket(0, Sn_MR_MACRAW, 3000, Sn_MR_MF);

}




EtherCat 데이터 전송함수

데이터 송신시 첫 2Byte의 EtherHeader 와 마지막 2Byte CRC는 W5300에서 자동 생성된다. 다만 수신은 모든 페킷이 수신되므로 이부분을 적절히 처리해 주어야 한다.

uint32   EtherCatSend(SOCKET s, uint8 * buf, uint32 len)

{

   uint8 status=0;

   uint8 isr=0;

   uint32 ret=0;

   

   // check size not to exceed MAX size.

   if (len > getIINCHIP_TxMAX(s)) ret = getIINCHIP_TxMAX(s); 

   else ret = len;

   

   // copy data

   wiz_write_buf(s, buf, ret); 


   // send

   setSn_TX_WRSR(s,ret);

   setSn_CR(s, Sn_CR_SEND);

   

   

   // wait SEND command completion

   while (!((isr = getSn_IR(s)) & Sn_IR_SENDOK)) 

   {

      status = getSn_SSR(s);                               

      if ((status == SOCK_CLOSED) || (isr & Sn_IR_TIMEOUT)) 

      {                                                    

         setSn_IR(s,Sn_IR_TIMEOUT);

         return 0;

      }

   }

   

   // Clear Sn_IR_SENDOK

   setSn_IR(s, Sn_IR_SENDOK); 


   return ret;   

}





TMS320F28335, W5300을 이용한 EtherCat 테스트

테스트는 두세트의 이더넷 모듈을 이용해서 스위치를 누르면 EtherCat 페킷으로 데이터를 전송하고 수신된 데이터를 분석해서 LED를 On/Off 하도록 했다. 


수신된 데이터는 WireShack를 이용하여 패킷을 캡쳐할 수 있고 EtherCat 데이터를 확인할수 있다.

26번 버퍼부터 데이터 필더 이다.  테스트에서는 스위치를 누를때 마다 1씩 증가해서 전송하도록 해서 테스트 했다.



그리고 시리얼포트를 이용하여 수신된 페킷을 확인할 수 있다.




TMS320F28335와 W5300 MACRAW모드를 이용한 EtherCat 테스트 동영상



Posted by nexp

댓글을 달아 주세요

  1. kiisae

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

    2016.07.16 21:30 [ ADDR : EDIT/ DEL : REPLY ]

[DSP]/DSP283352013. 9. 15. 23:39

TMS320F28335 NET_EVM_EX 보드 + W5300 을 이용한 TCP/UDP 테스트

TMS320F28335 NET_EVM_EX 보드  + W5300 을 이용한 TCP/UDP 테스트




네트웍 및 MP3, Codec등을 테스트 할수 있는 [N_EX_NET EVM] 보드를 테스트 하기 위해 TMS320F28335에서 W5300을 이용한 TCP, UDP 테스틀 했다.


[N-EX_MCU] 보드는 다양한 타입의 MCU보드의 IO 및 Data/Address를 쉽게 확장해서 테스트 가능한보드이다.






W5300, W5100, W5200, Enc28J60등의 네트웍 컨트롤러를 쉽게 연결해서 테스트 가능하다.










TMS320F28335 EVM과 W5300을 이용한 TCP/UDP 테스트 동영상


Posted by nexp

댓글을 달아 주세요