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에 비해 그렇게 빠르지는 않은데 소비 전류는 확실히 적은것 같다.
클럭을 더 낮추어 1Mhz로 구동시 소비 전류 특정 결과
500uA