?

Log in

No account? Create an account

Previous Entry | Next Entry

Продолжение сравнения начатого здесь

Периферия


Рассматривалась только наиболее интересная для меня периферия.

TIMER (самый навороченный)


Тип TIMER TIM2...TIM5
Разрядность 16 16 или 32(TIM5)
Режимы счёта up, down, up/down auto-reload up, down, up/down auto-reload
Функции Input capture, Output compare, PWM, Pulse Input capture, Output compare, PWM, Pulse
Количество каналов 3 на таймер 4 на таймер
Управление событиями PRS или внешний сигнал (start, stop, reload and start) внешний сигнал
Прескайлер 10бит 1...65536
Объединение таймеров есть, поюс синхронизация таймеров есть
Прерывания Overflow/UnderFlow, capture/compare Overflow/UnderFlow, initialization, trigger, capture, compare
Доп фичи Квадратурный декодер, измерение периода и ширины импульса Квадратурный декодер
Прочее по два регистра захвата на каждый канал захвата, некий Dead-Time Insertion Unit, предназначенный для управления BLDC

RTC


Организация 2xReal Time Counter (24bit+32bit) навороченный Real Time Clock (Calendar)
Compare RTC - 2x24bitCompReg (autoreload самого RTC); BURTC - 32bitCompReg (autoreload самого BURTC) 16bit Autoreload wakeup TIM
Прескайлинг сравнивалки RTC - 2^n, n=0..15; BURTC - 2^n, n=0..7 /2,4,8,16; секундный вход календаря

ADC


Доступность до EM1 до Sleep
Разрядность 12,8,6 12,10,8,6
Число каналов 8+6 40+2
Дифференциальный вход 4 диф. канала нет
Частота АЦП 32kHz...13MHz max 0.48...16MHz
Тактирование частота периферии с собственным прескайлером 1...128 Напрямую от HSI с прескайлером /1,2,4
Диапазон от AGND до 1.25 <= Vref <= Vdda от AGND до Vref+ <= Vdda
Опора Int 1.25/2.5V, Vdd, int 5V diff ref, extref (ch6), diff extref (2*(ch6-ch7)), 2xVdd Внешняя (часто объединена с Vdda)
Частота выборок 12bit - 0.01...1Msps; 6bit - 0.01...1.86Msps 12bit - 0.03...1Msps; 6bit - 0.03...1.45Msps
Время захвата (sampling) 1...256 ADCclk cycles (2us min в каком-то кривом случае) до 0.25us
Время преобразования 7(6bit), 11(10bit), 13(12bit) ADCclk cycles 11(6bit), 13(8bit), 15(10bit), 16(12bit) ADCclk cycles; 1...24.75us
Время запуска 5us (включая опору, без неё 1us) 3.5us
Входное сопротивление 1MOhm min 0.5...50kOhm (в зависимости от Msps)
Входная ёмкость 2pF 16pF (internal sample and hold cap)
Входная фильтр Low pass RC filter (отключаемый), Decoupling capacitor
Ток на входной ноге 100nA
Потребление 63...351uA в зависимости от режима; внутренняя опора - 65uA По линии Vdda 1000uA, по линии Vref 400uA
Режимы работы Одиночное, сканирование (до 8 самплов в последовательности), непрерывное, Conversion tailgating, можно вклинить одиночное измерение в последовательность Одиночное конвертирование, непрерывное, сканирование выбранных каналов, VCMP, discontinuous (АЦПит серию самплов)
Oversampling суммирование и фильтрация, 2...4096 oversampling ratio
Энергосбережение Может АЦПить на максимальной частоте, когда CPU заторможен, умеет автоматически отключаться
Прерывания Окончено конвертирование, сканирование, overflow конвертирования, сканирование, может генерить PRS по завершению конвертирования окончание преобразования (regular и injected), "аналоговый вычдог", overrun, выход на рабочий режим
Управление от таймера/периферии PRS можно подключить к GP таймеру
Внутренние каналы Temperature, VDD/3, VDD, VSS, VREF/2, DAC, OPAMP Temperature, Vref
Конфигурация Независимое время преобразования для каждого канала
Программируемая задержка между измерениями

GPIO


Организация 6 портов по 16 выводов 6 портов по 16 выводов
Режимы работы третье состояние, PushPull, OpenDrain, PullUP, PullDown третье состояние, PushPull, OpenDrain, PullUP, PullDown
Ток по выводу настраиваемый 0.5, 2, 6, 20mA до 20mA
Доступность до EM3, в EM4 сохраняется конфигурация вывода до Stop
Входной фильтр glitch suppression filter ?
Прерывания 2 прерывания с 16 источников (любой pin) штук 5 прерываний
Защита ESD есть вроде есть
Блокировка конфигурации есть есть
Тактирование Все порты тактируются от одной частоты Тактирование каждого порта включается отдельно, каждый пин имеет индивидуальную настройку скорости выхода
5V Toleant I/O Нет Есть


Документация


Организация Datasheet (chip) - данные по фаршу, техническим характеристикам, распиновка
Reference manual (family) - схемы организации, инструкция по конфигурированию, использованию периферии
CM3 Reference manual (family) - описалово ядра
Errata (chip) - описание ошибок в железе
Datasheet (chip group) - данные по фаршу, техническим характеристикам, схемы организации, распиновка
Reference manual (family) - инструкция по конфигурированию, использованию периферии
Programming manual (family) - инструкция по использованию флеша и еепрома
Errata (family) - описание ошибок в железе
Общие впечатления У EFM документация кажется более структурированной и проработанной, организована с упором на оптимизацию потребления. Информация о конфигурации камней часто дублируется в разной форме, что упрощает понимание, что именно есть в том камне, который лежит перед тобой (эта информация есть даже в референс мануале в виде сводной таблицы) Вроде есть всё, но очень разрозненно - тяжко искать нужную инфу, пока не привыкнешь понять какая из возможной периферии есть в конкретном камне сложно
Схема наименования Имя содержит инфу о семействе и количестве флеша; тип корпуса и функционал как-то закодирован, как именно - пока не понял Имя содержит инфу о семействе, подгруппе, количестве флеша, типе корпуса; расшифровка в конце даташита

Библиотеки


CMSIS V3.01 (07 March 2012) V2.10 (25 July 2011)
Библиотека периферии единая для всей продукции EnergyMicro специфичная для STM32L1 (разные семейства используют разные библиотеки)
Дополнительные библиотеки USB, Generic graphic library for EFM32 kit USB, touch sensing library, I2C Communication peripheral application library, embedded GUI library
Сторонние библиотеки в комплекте FATfs, emWin

Организация и примеры использования библиотеки периферии


Документация Doxygen Doxygen
Описание разных девайсов Для каждого семейства отдельный каталог с грудой файлов (отдельный по каждому блоку + отдельный по каждому камню). Нафиг они такое учудили я не понял. Описание всего живёт в файле system_stm32l1xx.h
Удобство сборки библиотеки отдельно от программы Хорошо Удовлетворительно
Полнота API Периодически торчат прямые обращения к регистрам Вроде всё делается через API
Ассерты функции обработки ассертов дефайнятся в em_assert.h и могут быть переопределены в юзерской программе функции обработки ассертов должны дефайнится в юзерской программе (обычно в stm32l1xx_conf.h), или в сборочных скриптах
Инициализация GPIO простая функция
CMU_ClockEnable(cmuClock_GPIO, true);
GPIO_PinModeSet(gpioPortB, 9, gpioModePushPull, 1);
GPIO_PinModeSet(gpioPortB, 10, gpioModeInput, 0);
init-структура
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_PinAFConfig(GPIOA, GPIO_Pin_9, GPIO_AF_USART1);
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_PinAFConfig(GPIOA, GPIO_Pin_10, GPIO_AF_USART1);
GPIO_Init(GPIOA, &GPIO_InitStructure);
Инициализация периферии init-структура
CMU_ClockEnable(cmuClock_UART1, true);
uartInit.enable = usartDisable;
uartInit.refFreq = 0;
uartInit.baudrate = 115200;
uartInit.oversampling = usartOVS16;
uartInit.databits = usartDatabits8;
uartInit.parity = usartNoParity;
uartInit.stopbits = usartStopbits1;
uartInit.mvdis = false;
uartInit.prsRxEnable = false;
uartInit.prsRxCh = usartPrsRxCh0;
USART_InitAsync(uart, &uartInit);
init-структура
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx ¦ USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
Ногодрыг минималистичные инлайн функции
__STATIC_INLINE void GPIO_PortOutToggle(GPIO_Port_TypeDef port, uint32_t pins)
{
EFM_ASSERT(GPIO_PORT_VALID(port));
GPIO->P[port].DOUTTGL = pins & _GPIO_P_DOUTTGL_DOUTTGL_MASK;
}
минималистичные, но не инлайн функции
void GPIO_ToggleBits(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin){
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
GPIOx->ODR ^= GPIO_Pin;
}

Примечание: "Energy Micro is possibly the only ARM Cortex-M0/M3 MCU vendor whose peripheral drivers are available under a permissive open source license. This makes it ideal for Open Source Hardware projects. But, CMSIS dependency of emlib has to be reworked." (c) https://github.com/viswesr/EnergyMicro-Peripheral-Library


Инфраструктура


Вспомогательный софт Simplicity Studio
Настройка energyAware Designer energyAware Battery MicroXplorer MicroXplorer plugin для Eclipse Clock configuration tool
Отладка energyAware Profiler ST-Studio
Управление energyAware Commander Flash loader demonstrator
Связь с общественностью Форма техподдержки на сайте, есть официальный форум, на котором тусят инжкнкеры EM Техподдкржка локальными представителями

Примечание: не знаю, как у ST, а у EM большая часть вспомогательного софта пока выглядит сыровато, но потихоньку развивается, есть версии под линукс и макось.


Резюме


В целом на чаше весов STM`а раскрученность, доступность (и в следствии - более низкая цена) и количество/функциональность периферии, на чаше EFM`а - большая заточенность под низкое потребление, более проработанная документация, более красивые библиотеки, большая "близость к народу".

Comments

( 2 comments — Leave a comment )
severjon
May. 13th, 2016 09:52 pm (UTC)
что выбрали все же?
gremlinable
Sep. 16th, 2018 03:51 pm (UTC)
EFM, конечно. И ни разу не пожалели. А когда потом появились EFR32 то вообще радовались как дети - STM-мам такие возможности и не снились (в контексте сверхнизкого потребления конечно).
Правда, вот что теперь будет на фоне политико-экономической войны хз... Но технически отличные камни.
( 2 comments — Leave a comment )