Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: EFM32 (EnergyMicro) и ULINK
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
KnightIgor
Делюсь опытом.
Ключевые слова: EFM32, EnergyMicro, ULINK, SWDCLK, Bootloader, debug, отладка.

Как видно из форума, похоже мало кто на пространстве СНГ использует Cortex-Mx процессоры от EnergyMicro (ныне под Silabs). Форумчанам виднее, почему. Моя гипотеза: ввиду экспортных ограничений на эти процессоры, т.к. имеется встроенный модуль AES. Тем не менее, поделюсь нарытым опытом здесь.

Предыстория.
Хотя я вожусь с процессором довольно давно (наверное, с того времени, как они только начали появляться), ввиду удачного стечения обстоятельств с нижеописаной проблемой до недавнего момента мне сталкиваться не приходилось, т.к. для отладки и программирования я использовал DK от EnergyMicro, поскольку на нем есть замечательный бесплатный J-LINK, который к тому же никак не "залочен" (русский технический новояз) на сами EFM процессоры. Это и было до сих пор решающим фактором, почему все шло гладко. И тут на днях обращается ко мне коллега из другой конторы и жалуется на то, что, применив камень в своей разработке, он не может отлаживаться: все виснет непонятно где.

Проблема.
Начали разбираться, и накопали следующее.
С целью упрощения производства и последующей актуализации было решено не затирать встроенный загрузчик в первых 2K и разместить программу выше. При запуске под отладчиком прохождение зацикливалось где-то в загрузчике, не доходя до main() основной программы. Выясняем: вначале, как и описано, загрузчик анализирует состояние линии 0 порта F, что есть также сигнал SWDCLK. Если линия в "0", то происходит переход на пользовательскую программу, иначе - в ожидание команд по USART0. Возник вопрос, почему же я никогда с таким поведением не сталкивался? Ответ подсказал осциллограф: в то время, как мой onboard-JLINK выдает положительные импульсы по SWDCLK, то ULINK - отрицательные (по логике, не по полярности напряжения, конечно). Таким образом, под ULINK загрузчик ловит пассивное состояние SWDCLK как "1" и видит свой звездный час. onboard JLINK писался же SEGGER под неусыпным оком EnergyMicro, которая объяснила, как себя правильно вести.

Решение.
Тем, кто затирал и будет затирать встроенный загрузчик, беспокоиться не о чем: они с вышеописаным поведением не столкнутся.
Кто же хочет сохранить загрузчик, но и отлаживаться по ULINK, следует модицифировать загрузчик (исходные тексты есть на сайте EnergyMicro) так, чтобы он в момент проверки состояния SWDCLK проверял дополнительно, не находится ли он под отладкой, и принимал соответствующее решение. Вариант модифицированного фрагмента из проекта загрузчика (файл bootloader.c, версия 1.64, строки от 168):
Код
    /* Check if pins are not asserted AND firmware is valid */
//    if ((SWDpins != 0x1) && (BOOT_checkFirmwareIsValid())) // old version making troubles under ULINK
    if ((SWDpins != 0x1 || ((CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk) != 0x0))
         && (BOOT_checkFirmwareIsValid()))
x893
Использую EFM32 во всех проектах с низким потреблением (в основном трекеры для отслеживания диких животных). По сравнению с STM32L дает 2-х кратное увеличение времени в sleep. Компоненты конечно тоже приходится использовать малопотребляющие. После покупки Silabs конечно есть смутные сомнения, но они говорят, что ничего особо не изменится. Контора неплохая и поддержка гораздо адекватнее, чем у других. Когда друг передал на распитии пива привет - они прямо сильно обрадовались и в блоге написали, что первый привет был из России. Небольшие проблемы конечно бывают, но как то быстро всё решается через форум.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.