?

Log in

No account? Create an account

Previous Entry | Next Entry

Для работы составил небольшое сравнение двух семейств энерго-эфективных армов. Что бы труд не пропадал, решил выложить его в инет - вдруг кому пригодится.
Сравниваться будут семейства контроллеров на базе ядра Cortex M3. Конечно, было бы интереснее сравнить Cortex M4F, но что-то сейчас не хочется сравнивать то, чего реально пока нет (EFM32WG обещают во втором квартале 2013-го, ATSAM4L, вроде как уже вышли, но в продаже только киты, а о STM32L4 вообще ничего не известно). Для конкретики данные будут браться из даташитов на контроллеры, которые у меня есть - EFM32LG332F256 и STM32L151CB. Хоть это и не ближайшие аналоги по количеству памяти, набору периферии и типу корпуса, но по большей части цифры одинаковые для всей линейки. В качестве вводной напишу параметры сравниваемых чипов.



Сравнительная таблица начинки


Семейства (конфигурация по максимуму)


EFM32LG STM32L1
Core Cortex M3 r2p1 Cortex M3 r2p0
Тактовая частота 32kHz - 48MHz 32kHz - 32MHz
Память 256k Flash (до 1024k в EFM32GG)
32k RAM (до 128k в EFM32GG)
384k Flash
48k RAM
12k EEPROM
Периферия - коммуникация USB OTG
3xUSART/SPI/I2S
2xUART
2xLEUART
2xI2C
USB
5xUSART
3xSPI/I2S
2xI2C
1xSDIO
Периферия - интерфейс LCD8x36
1xEBI/TFT (шина памяти)
1xLESENSE (индуктивный/емкостной/резистивный датчики)
LCD8x40
1xFSMC (шина памяти)
1xCapacitiveSense
Периферия - аналог 1x8Chx12bit ADC
2x1Chx12bit DAC
2x8Ch ACMP
3xOPAMP
1x40Chx12Bit ADC
1x2Chx12bit DAC
2xACMP
3xOPAMP
Таймеры 4x16bitGP(12xPWM chan)
1xLETIMER
1x24bitRTC
1x32bitBackupRTC
1xWatchdog
3xPulseCounter
1x32bitGP(4xPWM chan)
6x16bitGP(18xPWM chan)
2xBasic
1xRTC
2xWatchdog
GPIO 93 (6 портов) 114 (6 портов)
Коммуникация периферии 1x12Ch DMA + 12xPRS 1x7Ch + 1x5Ch DMA
Шифрование, хеши 128/256bit AES 128bit AES + CRC32(EN/IEC 60335-1)
Отладка SWD + Trace JTAG + SWD + Trace
История (wikipedia) Apr 2008, Energy Micro announced that it licensed the ARM Cortex-M3 core.
Oct 2009, Energy Micro announced EFM32 Gecko MCU family (EFM32G Series) based on Cortex-M3.
Mar 2010, Energy Micro announced EFM32 Tiny Gecko MCU family (EFM32TG Series) based on Cortex-M3.
Jul 2010, Energy Micro announced EFM32 Giant Gecko MCU family (EFM32GG Series) based on Cortex-M3 for memory heavy applications.
Mar 2011, Energy Micro announced EFM32 Zero Gecko MCU family (EFM32ZG Series) based on Cortex-M0 for low cost applications.
Sep 2011, Energy Micro announced EFM32 Leopard Gecko MCU Family (EFM32LG Series) based on Cortex-M3
Oct 2006, ST announced that it licensed the ARM Cortex-M3 core.
Jun 2007, ST announced the STM32 based on the Cortex-M3 (currently known as STM32 F1-series).
Oct 2009, ST announced that new ARM chips would be built using the 90 nm process.
Apr 2010, ST announced the STM32L-series (currently known as STM32 L1-series).
Nov 2010, ST announced the STM32 F2-series, and future development of chips based on the ARM Cortex-M4 and ARM Cortex-M0 cores.
Mar 2011, ST announced the expansion of their STM32L-series with flash densities of 256 KB and 384 KB.
Sep 2011, ST announced the STM32 F4-series.
Feb 2012, ST announced the STM32 F0-series.
Jun 2012, ST announced the STM32 F3-series.
Перспективность Данные контроллеры - основное направление компании. TG имеет меньшее потребление по сравнению с базовым семейством (G); LG, GG - большее. Сама периферия потребляет одинаково - разница только в ядре. В ближайшие несколько месяцев ожидаются ZG - Cortex-M0+ (правда он без DMA, так что непонятно зачем нужен) и WG - Cortex-M4F. Всё это повыводно и программно совместимо. К концу года обещают радио-контроллеры EFR с потреблением в два раза меньше, чем TG. Микроконтроллеры - одно из множеств разных направлений компании, низко потребляющие контроллеры составляют малую долю от всех контроллеров компании. Все последующие подсемейства потребляют больше базового, причём не только ядро, но и периферия. Обещают L0 - Cortex-M0 и L4 - Cortex-M4F, но когда они будут и что там будет неизвестно. Семейства обычно повыводно совместимы и частично программно совместимы.

Конкретные камни


EFM32LG332F256 STM32L151CB
Flash 256KB 128KB
RAM 32KB 16KB
Timers 4GP+1LE 16bit 6GP+2Basic 16bit
USART 3USART+2LEUART 3USART
SPI -(3 в составе USART) 2
I2C 2 2
USB 1 FullSpeed(OTG+PHY, 6OUT+6IN EP) 1 FullSpeed(PHY, 8 EP)
GPIO 50 37
ADC 8 16
DAC 2 2
COMP 2 2
AES + -
DMA 12chan 7chan
CPU freq Up to 48MHz Up to 32MHz
VCC 1.85..3.8V 1.8..3.6V
Temp -40..+85 -40..+85
Package TQFP64 LQFP48
Price $6..8 $4..6

Энергопотребление


Как ни странно, в даташите на EFM разных параметров нормированно по току меньше, чем у STM, так что брались параметры, данные для EFM и искались их аналоги. Для EFM рассмотрены два семейства - самое жрущее и самое экономное на данный момент. Со стороны STM взят самый маложрущий вариант.
EFM32LG EFM32TG STM32L1
Потребление в активном режиме (сравниваем на 1 и 32МГц при исполнении кода из Flash) Vdd = 3.0V Напряжение питания ядра неизвестно.
Потребление на 1MHz (HFRCO) примерно 244uA,
на 32MHz (внешний кварц) - 6.4mA (200uA/MHz)
на 1MHz (HFRCO) примерно 210uA,
на 32MHz (внешний кварц) - 5mA (157uA/MHz)
Vdd = 3.6V Возможна перестройка внутреннего LDO между тремя диапазонами (1V2, 1V5, 1V8). При питании 1.2В камень и АЦП могут работать на частоте до 4MHz. Таким образом,
потребление (внешний кварц) на 1MHz - 270uA,
на 32MHz - 9.6mA (300uA/MHz),
внутренняя RC даёт на 4.2MHz - 0.9mA (214uA/MHz),
на 0.524MHz - 150uA (286uA/MHz)
Потребление в Sleep(EM1) режиме (сравниваем на 1 и 32МГц при исполнении кода из Flash) Vdd = 3.0V Напряжение питания ядра неизвестно.
Потребление на 1MHz (HFRCO) примерно 114uA,
на 32MHz (внешний кварц) - 1.6mA (50uA/MHz)
на 1MHz (HFRCO) примерно 53uA,
на 32MHz (внешний кварц) - 4.5mA (140uA/MHz)
Vdd = 3.6V Возможна перестройка внутреннего LDO между тремя диапазонами (1V2, 1V5, 1V8). При питании 1.2В камень и АЦП могут работать на частоте до 4MHz. Таким образом,
потребление (внешний каврц) на 1MHz - 80uA,
на 32MHz - 2.3mA (72uA/MHz),
внутренняя RC даёт на 4.2MHz - 210uA (50uA/MHz),
на 0.524MHz - 60uA (115uA/MHz)
LowPower Sleep/Deep Sleep (EM2) 1.1uA 1uA 4.4uA...22uA в зависимости от периферии
Stop Mode (EM3) 0.9uA 0.59uA 0.6uA...8uA в зависимости от периферии
Standby/Shutoff Mode (EM4) 0.02uA 0.02uA 0.3uA...1.55uA в зависимости от периферии
Flash (write/erase) 7mA 7mA 1.5mA
GPIO токи утечки +/-25nA (HiZ to Vcc/GND) +/-25nA +/-50nA
Кварц/RC LFXO - 190nA;
HFXO - 85uA(4MHz), 165uA(32MHz);
LFRCO - 190nA;
HFRCO - 22uA (1.2MHz), 106uA(28MHz)
LFXO - 190nA;
HFXO - 85uA(4MHz), 165uA(32MHz);
LFRCO - 190nA;
HFRCO - 22uA (1.2MHz), 106uA(28MHz)
LSE - 600nA;
HSE - 460uA;
LSI - 400nA;
HSI - 100uA(16MHz);
MSI - 0.75uA(65.5kHz), 4.5uA(1.05MHz), 15uA(4.2MHz)
ADC 1MSamples/s, 12bit, extref - 351uA;
10kSamples/s, 12bit, intref 1.25V - 67uA
1MSamples/s, 12bit, extref - 351uA;
10kSamples/s, 12bit, intref 1.25V - 67uA
ADC (по Vdda) - 1000uA;
Ref - 400uA
DAC 500kSamples/s, 12bit - 400uA;
100kSamples/s, 12bit - 200uA;
1kSamples/s, 12bit - 38uA
500kSamples/s, 12bit - 400uA;
100kSamples/s, 12bit - 200uA;
1kSamples/s, 12bit - 38uA
DAC (по Vdda) - 210..320uA;
Ref - 130...220uA
OpAmp 13...400uA 13...400uA (STM32L151xD) 30..100uA
Компаратор 0.1...195uA в зависимости от режима;
5uA опора
0.1...195uA в зависимости от режима;
5uA опора
Copm1 - 160nA;
Comp2 - 0.5uA(SlowMode), 3.5uA(FastMode)
VoltageComp (программное отслеживание напряжения питания) 0.1...14.7uA 0.1...14.7uA объединён с ADC
UART USART - 7.5uA/MHz;
UART - 5.63uA/MHz;
LEUART - 150nA
USART - 7.5uA/MHz;
UART - 5.63uA/MHz;
LEUART - 150nA
USART - 9 [6]uA/MHz (Vcore = 1.8 [1.2V])
I2C 6.25uA/MHz 6.25uA/MHz 8.5 [5.5uA]/MHz (Vcore = 1.8 [1.2]V)
Timer TIM0 - 8.75uA/MHz;
LETIMER - 150nA;
PCNT - 100nA;
RTC - 100nA
TIM0 - 8.75uA/MHz;
LETIMER - 150nA;
PCNT - 100nA;
RTC - 100nA
TIM2,3,4 - 13 [8]uA/MHz;
TIM6,7 - 5.5 [3.5]uA/MHz;
RTC - 470nA (Vcore = 1.8 [1.2]V)
AES 2.5uA/MHz 2.5uA/MHz (STM32L162xD) 5 [3]uA/MHz (Vcore = 1.8 [1.2]V)
GPIO на порт 5.31uA/MHz похоже, что все 6 портов в сумме 5.31uA/MHz 5 [3.5]uA/MHz (Vcore = 1.8 [1.2]V)
PRS 2.81uA/MHz 2.81uA/MHz
DMA 8.12uA/MHz 8.12uA/MHz 12 [8]uA/MHz (Vcore = 1.8 [1.2]V)

Источники тактовой частоты


Встроенная RC очень низкой частоты ULFRCO - 1kHz, доступен до EM4, может использоваться для RTC, WDG, LCD и низкопотребляющей периферии (LETIM, LEUART, LESENSE, BURTC), потребление и время запуска не указаны
Встроенная RC низкой частоты LFRCO - 32.768kHz, доступен до EM2, может использоваться для любой периферии, потребление 190nA, время старта 150us LSI - 37kHz, доступен до Stanby(?), может использоваться для IWDG, RTC, LCD, потребление 400nA, время старта 200us
Встроенная RC средней частоты частоты MSI - 65.5kHz, 131kHz, 262kHz, 524kHz, 1.05MHz, 2.1MHz, 4.2MHz, доступен до LowPowerSleep(?), может использоваться для всего кроме ADC, IWDG, RTC, LCD, потребление 0.75...15uA, время старта 5...30us
Встроенная RC высокой частоты HFRCO - 1.2MHz, 6.6MHz, 11MHz, 14MHz, 21MHz, 28MHz, доступен до EM1, может использоваться для любой периферии кроме WDG и BURTC, потребление 22...106uA, время старта 0.6 Cycle HSI - 16MHz, доступен до LowPowerSleep(?), может использоваться для любой периферии кроме IWDG, RTC, LCD, потребление 100uA, время старта 3.7us
Внешний часовой кварц LFXO - 32.768kHz, использование аналогично LFRCO, потребление 190nA, время старта 400us (настраиваемое) LSE - 32.768kHz, использование аналогично LSI, кроме IWDG, плюс можно завести на TIM9,10,11, потребление 600nA, время старта 1s
Внешний высокочастотный кварц HFXO - 4...48MHz, использование аналогично HFRCO, потребление 85...165uA, время старта 400us (настраиваемое) HSE - 1...24MHz, использование аналогично HSI, кроме ADC, плюс можно завести на RTC, LCD, потребление 460uA, время старта 1ms
Использование генератора частоты LFXO, HFXO LSE - 1...1000kHz; HSE - 1...32MHz
Дополнительные источники AUXHFRCO - 1...28MHz, используется для программирования флеша, отладки (SWO) и LESENSE
PLL x3..x48 - /2,/3,/4 (вход от HSI,HSE, выход на ядро и периферию)
Прескайлинг Отдельные прескайлеры для ядра и высокочастотной периферии, у таймеров есть отдельные прескайлеры, низкочастотная периферия прескайлится индивидуально Для ядра, потом эта частота может прескайлиться для APB1, APB2, TIM2,3,4,6,7 и TIM9,10,11
Вывод частоты наружу 2 выхода с разными наборами частот 1 выход
Прочее Периферия может работать на частоте выше частоты ядра Есть защита от сбоя HSE

Режимы работы


Run (EM0) Всё работает, ядро выполняет код Всё работает, ядро выполняет код
LowPower Run Ядро включено, периферия включена, но внутренний регулятор в низкопотребляющем режиме, по-этому всё работает на низких частотах (только 32kHz) и с ограничениями
Sleep (EM1) Ядро спит, всё остальное работает в штатном режиме; время просыпания 0Cycles Ядро спит, всё остальное работает в штатном режиме; время просыпания 0.36us
LowPowerSleep (EM2) Высокая частота отключена, на низкой могут работать LCD, RTC, LETIMER, PCNT, WDOG, LEUART, I2C, ACMP, LESENSE, OPAMP, USB; включены POR, BOD, сохраняется состояние RAM и CPU; время просыпания 2us Sleep с регулятором в низкопотребляющем режиме; просыпание по прерываниям и эвентам; время просыпания 32us
Stop (EM3) Отключена и высокая и низкая частота, включены POR, BOD, сохраняется состояние RAM и CPU, аозможно просыпание по ACMP, extint, PCNT, I2C; время просыпания 2us Все частоты в основном домене отключены, регулятор в низкопотребляющем режиме, сохраняется состояние RAM; просыпание по extint, PVD, RTC, USB wakeup, ACMP; время просыпания 7.8...210us в зависимости от используемой тактовой
Standby (EM4) Отключено всё, кроме PinReset, GPIO wakeup, BURTC, POR; время просыпания 163us Все частоты в основном домене отключены, регулятор отключен, RAM и регистры не сохраняются (за исключением регистров в Standby-домене - wakeup logic, IWDG, RTC, LSI, LSE32k, RCC CSR); просыпание по external reset, IDWG reset, WKUP pin, RTC; время просыпания 50us FastWakeup, 2.5ms SlowWakeup
Backup domain Блоки, автоматически переключающиеся на питание от резервного источника (например, кондёра) - BURTC, 512bytes RAM; работает BOD, есть функция зарядки резервного источника в отдельном домене RTC и 80bytes RAM, специального бекапного питания нет
Описание доступности функций в разных режимах Таблица в разделе 10.3.1 (EMU->EnergyModes) референс мануала Таблица доступнности функций есть в даташитах свежих версий в разделе 3.1
Прямой переход между спящими режимами Нет Нет
Прочее До EM3 периферия может ограниченно взаимодействовать без участия ядра с помощью PRS Возможна настройка напряжения питания ядра, от которой зависит максимальная частота работы

Организация памяти


Flash


Выносливость 20k циклов; 10 лет (<85*C) 20 лет (<70*C) 10k циклов; 30 лет (=85*C)
Время стирания (page) 20.4ms 3.28ms
Время записи (word) 20us 3.28ms
Потребление при записи/стирании 7mA MAX 300uA AVG; 2.5mA MAX
Организация одна банка, поделённая на основной и информационный блоки (у EFM32GG две банки, со всеми вытекающими); размер страницы 2k (у EFM32GG 4k) Две банки (для старших девайсов), в каждой банке присутствует доп. область; организация 96sect*16pages*256bytes
Использование доп. области В информационном блоке хранятся пользовательские данные (2k), локбиты и системная информация по 4k системной области и 32b оптион байтов на банку
Время доступа 0ws до 16MHz, 1ws до 32MHz, 2ws до 48MHz 0ws до 2MHz(1.2V)/16MHz(1.8V), 1ws до 4MHz(1.2V)/32MHz(1.8V)
Доступность EM0, EM1 Run, Sleep, LPRun
RWW, 2word write только для девайсов > 512k (EFM32GG) (?)
Контроль Прерывания по окончанию записи/стирания, возможность прервать стирание, контроль отказов Прерывания по окончанию записи/стирания, по ошибкам шины
Локбиты Постраничные, отдельно для основного блока и UserData, блокируют страницу от записи и стирания, плюс блокировка отладки и массового стирания Посекторные для флеша и еепрома; поблочные для Prog/Data/Options; есть защита от чтения встроенным бутлоадером
Адреса Основной блок 0x00000000
User data 0x0FE00000
Lock bits 0x0FE04000
Device info 0x0FE08000
Program 0x08000000
Data mem 0x08080000
System mem 0x1FF00000
Options 0x1FF80000
Запись/стирание(за исключением случаев использования RWW) Чтение не возможно, выполнение кода из flash останавливается (TG, LG, GG; на G попытка исполнения карается хардфайлом - неподтвержённая инфа, источник не помню - , а использование DMA для доступа во флешь, пока идёт запись не предсказуемо...) При попытке чтения выполнение приостанавливается, или вылетает BusError, в зависимости от ситуации. Причём EEPROM так же подпадает под эти ограничения
Прочее Независимы источник тактирования, UserData не стирается по DeviceErase MassErase чистит EEPROM (!) и бекап регистры RTC

У STM время записи/стирания и токи потребления даны для EEPROM. В даташите на STM32F103 указаны следующие цифры:

  • Время очистки страницы 20-40ms
  • Время записи полуслова 52.5us
  • Потребление при записи/стирании 7/5mA MAX



RAM


Организация блоки по 32k, которые можно отключать по отдельности
Retention до EM3 (можно отключть в EM2/EM3) до Stop
Адреса Периферия 0x40000000
RAM 0x20000000; может быть ремаплена на 0x10000000 для эффективного исполнения из RAM
Периферия 0x40000000
RAM 0x20000000; может быть ремаплена на 0x00000000 для эффективного исполнения из RAM
Доступ байт, полуслово, слово
Bit-banding RAM и периферия RAM и периферия

DMA


Контроллер ARM PL230 неизвестно
Количество каналов один 12-канальный контроллер два контроллера, 7+5 каналов
Организация доступа периферии Любую периферию можно подключить к любому каналу Каналы прибиты гвоздями к определённой периферии (можно выбрать какая именно периферия юзает сейчас канал)
Поток данных периферия->память(RAM,EBI); память(RAM,EBI,Flash)->периферия; память(RAM,EBI,Flash)->память(RAM,EBI); !режима периферия->периферия нет! периферия->память; память->периферия; периферия->периферия; память->память
Приоритеты 2 приоритета + номер канала 4 приоритета + номер канала
Режимы Обычный, Ping-pong, Scatter-gather, циклическая (каналы 0, 1; для старших семейств), прямоугольное копирование (каналы 0; для старших семейств) Обычный, циклический, Memory-to-Memory
Прерывания TransferComplte, Error; одно на все каналы(!) HalfTransfer, TransferComplte, Error; отдельное прерывание на каждый канал
Преобразование данных возможно продвинутое преобразование данных с использованием Scatter-gather и прямоугольного копирования перепаковка на основе src и dst длины
Размер пакета до 1024 до 65536
Арбитраж настраиваемы для каждлго сеанса передачи данных из доки не понятно - то ли после каждого слова, то ли вообще нет

Вывод: EM тупо взяли стандартный почти взрослый контроллер, забыв про специфику. В итоге у них навороченное DMA, но всего одно прерывание на все каналы и не умеет нормального "периферия->периферия" (может оно и заработает для периферии с одинаковым размером слова, но "You must set dst_size to contain the same value that src_size contains" (с)).



Продолжение в следующей серии

Comments