본문 바로가기

Cortex-M/EFM32

EFM32 성능테스트 - 클럭 설정 및 소비 전류 테스트

EFM32 성능테스트 - 클럭 설정 및 소비 전류 테스트

 

EFM32 는 Cortex-M3코어의 저전력 기능이 강화된 MCU이다. 저전력을 위해 여러가지 기능들이 많이 있다.

저전력 기능중 가장 큰 부분인 클럭 부분을 살펴 보면 칩내부에 있는 HFRCO, LFRCO 와, 칩외부에서 공급할수 있는 HFXO, LFXO로 나누어 진다.
초기에 리셋되면 디폴트로 내부 28Mhz를 2분주한 14Mhz로 구동이 된다.

 

HFRCO : 1-28 Mhz High Frequency RC Oscillator

LFRCO: 32.768 kHz Low Frequency RC Oscillator


HFXO: 4-32 Mhz High Frequency Crystal Oscillator

LFXO: 32.768 kHz Low Frequency Crystal Oscillator

 

 

 EFM32 클럭 구조

 

 

EFM32 클럭 블록도



 

클럭 설정은 CMU_HFRCOBandSet() 함수를 이용하여 설정 가능하고 1Mhz ~ 28Mhz 로 설정할 수 있다.

typedef enum
{
  /** 1MHz RC band. */
  cmuHFRCOBand_1MHz  = _CMU_HFRCOCTRL_BAND_1MHZ,
  /** 7MHz RC band. */
  cmuHFRCOBand_7MHz  = _CMU_HFRCOCTRL_BAND_7MHZ,
  /** 11MHz RC band. */
  cmuHFRCOBand_11MHz = _CMU_HFRCOCTRL_BAND_11MHZ,
  /** 14MHz RC band. */
  cmuHFRCOBand_14MHz = _CMU_HFRCOCTRL_BAND_14MHZ,
  /** 21MHz RC band. */
  cmuHFRCOBand_21MHz = _CMU_HFRCOCTRL_BAND_21MHZ,
  /** 28MHz RC band. */
  cmuHFRCOBand_28MHz = _CMU_HFRCOCTRL_BAND_28MHZ
} CMU_HFRCOBand_TypeDef;

 

 

CMU_ClockDivSet() 함수로 클럭 분주를 아주 세밀하고 자유롭게 설정할 수 있다.

typedef enum
{
  cmuClkDiv_1     = 0,  /**< Divide clock by 1. */
  cmuClkDiv_2     = 1,  /**< Divide clock by 2. */
  cmuClkDiv_4     = 2,  /**< Divide clock by 4. */
  cmuClkDiv_8     = 3,  /**< Divide clock by 8. */
  cmuClkDiv_16    = 4,  /**< Divide clock by 16. */
  cmuClkDiv_32    = 5,  /**< Divide clock by 32. */
  cmuClkDiv_64    = 6,  /**< Divide clock by 64. */
  cmuClkDiv_128   = 7,  /**< Divide clock by 128. */
  cmuClkDiv_256   = 8,  /**< Divide clock by 256. */
  cmuClkDiv_512   = 9,  /**< Divide clock by 512. */
  cmuClkDiv_1024  = 10, /**< Divide clock by 1024. */
  cmuClkDiv_2048  = 11, /**< Divide clock by 2048. */
  cmuClkDiv_4096  = 12, /**< Divide clock by 4096. */
  cmuClkDiv_8192  = 13, /**< Divide clock by 8192. */
  cmuClkDiv_16384 = 14, /**< Divide clock by 16384. */
  cmuClkDiv_32768 = 15  /**< Divide clock by 32768. */
} CMU_ClkDiv_TypeDef;

 

 

 

 

프로젝트 별로 구동 속도를 쉽게 변경할 수 있도록 config.h 에 정의해 두었다.

// Prescale the HFPERCLK -> HF/4 = 28/1 = 28Mhz
#define _SET_MCU_CLK_()                    CMU_HFRCOBandSet(cmuHFRCOBand_28MHz);\
                                                                   CMU_ClockDivSet(cmuClock_HFPER, cmuClkDiv_1)


 

 


우선 아무 설정 없이 기본 동작 시킨후 GPIO 토글 속도를 측정해 보았다.

14Mhz 구동에서  1.17Mhz 로 측정된다.

 

 

최고 속도인 28Mhz로 구동시 테스트

28Mhz -> 2.35Mhz

 

GPIO토글이 아닌 On/Off 만 했을때 3Mhz 정도 나온다.

이때 소비 전류는 7mA 이다.

 

속도 면으로 보면 동급 클럭의 MCU에 비해 그렇게 빠르지는 않은데 소비 전류는 확실히 적은것 같다.

[참고] MCU속도 측정 결과 

 

클럭을 더 낮추어 1Mhz로 구동시 소비 전류 특정 결과

500uA

 


 

 

 


 

반응형