[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]/STM32F42015. 6. 29. 14:14

[STM32F4_ZE_NET] FSMC 테스트 - TFT LCD 출력 테스트


[STM32F4_ZE_NET] FSMC 테스트 - TFT LCD 출력 테스트





STM32F4의 FSMC를 이용하면 TFT-LCD를 버스 방식으로 제어 가능하다.


STM32F4의 FSMC는 4개의 64MB로 할당 가능하다.






STM32F405 FSMC 블록도





STM32F405 FSMC 테스트 초기화 코드


초기화 코드

#define LCD_BANK_ADDR                   ((uint32_t)0x6C000000)
#define _LCD_CMD_OUT(Data)              (*(uint16_t *) (LCD_BANK_ADDR) = Data)
#define _LCD_DAT_OUT(Data)              (*(uint16_t *) (LCD_BANK_ADDR) = Data)
#define _LCD_DATA(p)                    (*(volatile uint16_t*) (LCD_BANK_ADDR + (p<<1)))

#define Lcd_Cmd(reg)                    _LCD_DATA(0x0000) = reg;

#define Lcd_Data(dat)                   _LCD_DATA(0x0002) = dat;




테스트 코로 테스트 해 보면 CMD출력 할때 RS(A1)가 low가 되는것을 확인 할 수 있다.

       while(1)
       {
              Lcd_Cmd(0x0200);Lcd_Data(0x0000);
              Lcd_Cmd(0x0201);Lcd_Data(0x0000);
              Delay(delay_time);
       }







/CS와 /WR 신호를 확인 해 보면 4개의 /CS,/RS가 출력 되는것을 확인 할 수 있다.

타이밍을 최적화 해 보면 300ns 내에 4개의 명령이 수행 되는것을 확인 할 수 있다.

  /* Timing */
  Timing.AddressSetupTime = 4;
  Timing.AddressHoldTime = 4;
  Timing.DataSetupTime = 8;
  Timing.BusTurnAroundDuration = 6;
  Timing.CLKDivision = 2;
  Timing.DataLatency = 2;




LCD에 이미지 한장 출력하는데 7.5ms 정도 소요된다.






TFT-LCD에 BMP 파일 출력 해보면 정상 적으로 잘 출력 되는것을 확인 할 수 있다.








Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F103-Mtype2012. 1. 29. 23:49

[STM32F4-100 EVM] USB Host 보드 제작

[STM32F4-100 EVM] USB Host 보드 제작


STM32F407/STM32F17 , STM32F2는 USB Host기능을 지원하는데, STM32F1, STM32F2, STM32F4를 모두 사용할 수 있는 보드를   [M-Type EVM] 형태로 새롭게 제작했다.




USB Device/Host 기능 모두 지원 할수 있도록 커넥터를 배치 했다.



STM32시리즈는 UART 프로그램이 가능하기 때문에 USB2UART 연결할 수 있는 커넥터를 연결할 수 있다.



STM32F4 확장 테스트 보드
[M-Type EVM] 표준 핀맵이므로 기존 확장 테스트 보드에 연결하여 테스트 가능하다.



[LCD_EXP_EVM] 보드 

Posted by nexp

댓글을 달아 주세요

  1. 비밀댓글입니다

    2012.03.03 01:05 [ ADDR : EDIT/ DEL : REPLY ]
  2. 비밀댓글입니다

    2012.05.02 18:33 [ ADDR : EDIT/ DEL : REPLY ]
  3. 비밀댓글입니다

    2012.07.29 18:42 [ ADDR : EDIT/ DEL : REPLY ]
  4. 비밀댓글입니다

    2012.08.10 23:48 [ ADDR : EDIT/ DEL : REPLY ]

[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

댓글을 달아 주세요

[ST_MICRO]/STM32F42011. 12. 5. 20:00

[STM32F4] 속도 측정 - GPIO 토글 속도 테스트

[STM32F4] 속도 측정 - GPIO 토글 속도 테스트



STM32는 Cortex-M4F 코어로 168Mhz로 동작한다. GPIO 토글 테스트로 MCU의 속도를 테스트 해 보았다.
물론 클럭속도가 중요한 요소는 아지만 마이컴에서 GPIO속도는 중요할 때가 많이 있다. STM32F4는 FPU가 있어 DSP기능도 뛰어난것 같다. [참고] MCU속도 측정 결과  

또는 STM32 CPU속도 테스트 결과와 비교해 보면 ST시리즈 속도를 확인해 볼 수 있다.



클럭 설정없이 그냥 GPIO On/Off 시키니 10Mhz 출력된다. 느린데..
뭔가 이상한것 같다.

PLL설정후 STM32F4의 GPIO토글 속도는  33Mhz 까지 출력된다.
STM32F103에서 12Mhz가 출력 되었던과 비교하면 확실히 빨라진것을 확인 할 수 있다. 메인클럭이 72Mhz -> 168Mhz로 되었기 때문이다.


STM32F4 클럭 테스트를 위한 코드는 비트제어 방식으로  했고 아래 와 같다.

     25              while (1)
     26              {
     27                  Led1On();
   \                     ??main_1:
   \   00000082   3E83               STRH     R6,[R7, #+24]
     30                  Led1Off();
   \   00000084   7E83               STRH     R6,[R7, #+26]
   \   00000086   FCE7               B.N      ??main_1
   \                     ??main_0:
   \   00000088   ........           DC32     GPIO_InitStructure
   \   0000008C   00000240           DC32     0x40020000
   \   00000090   00180240           DC32     0x40021800




레지스터를 접근해서 포트 토글 해 보면 41ns(12Mhz) 정도 측정이 된다.

  while (1)
  {
         GPIOB->ODR ^= GPIO_PIN_1;
  }







비트 제어 명령으로 제어 해 보면 10ns(33.5Mhz) 로 측정된다.
  while (1)
  {
         //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
         GPIOB->BSRR = GPIO_PIN_1;
         GPIOB->BRR = GPIO_PIN_1;
  }






좀더 보기 편하게 하기위해 Delay를 주었다.

  while (1)
  {
         //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
         GPIOB->BSRR = GPIO_PIN_1;
         GPIOB->BRR = GPIO_PIN_1;
         HAL_Delay(1);
  }


On/Off 속도가 9.9ns 정도 측정이 된다.









Posted by nexp

댓글을 달아 주세요