Прошивка стиков EFR32

Сегодня я расскажу вам о том, как прошить еще один вид zigbee-стиков (кроме стиков на базе чипов TI ccXXXX). Эти стики пока не очень популярны в zigbee-тусовке, но возможно это изменится со временем.

Стики

В продаже на различных площадках можно найти стики/платы на базе модулей SiliconLabs EFR32, которые могут работать со стеками Zigbee, BLE и Thread.

Среди них есть уже полноценные устройства, например:

Есть устройства, которые можно перепрошить и использовать:

А есть для “домашнего творчества”, например такие:

На текущий момент нас интересует работа с Zigbee, поэтому будем делать из этих устройств координаторы.

Для запуска координатора на этих чипах, нужно прошить соответствующую NCP прошивку. Осталось выбрать прошивку и научиться прошивать.

Для выбора прошивки надо понять какой чип используется в модуле.

Чипы

В модуле Ebyte E180-ZG120B чип имеет маркировку EFR32MG1B232F256GM48
А в модуле SM-011 (кстати, точно такой же модуль используется в Sonoff Zigbee Bridge) — EFR32MG21A020F768IM32.

Что это означает?

Расшифровка основной части маркировки MG1B232F256GM48

M - family code
G - Gecko
1 - series 1
B - type: P (Performance), B (Basic), V (Value)
2 - Feature Code reserved
3 - Feature Code TXRX
2 - Feature Code Band 2.4GHz
F256 — Flash 256K

DataSheets:
https://www.silabs.com/wireless/zigbee/efr32mg1-series-1-socs/device.efr32mg1b232f256gm48
https://www.silabs.com/documents/public/data-sheets/efr32mg1-datasheet.pdf

Расшифровка основной части маркировки EFR32MG21A020F768IM32

M - family code
G - Gecko
21 - series 2 mod 1
A - Secure Vault (A - no, B - yes)
020 - 20dBm maximum power output
F768 — Flash 768K

DataSheets:
https://www.mouser.sg/datasheet/2/368/efr32mg21-datasheet-1627395.pdf
https://www.silabs.com/wireless/zigbee/efr32mg21-series-2-socs/device.efr32mg21a020f768im32

Чип MG1B232F256GM48 EFR32MG21A020F768IM32
MCU Core ARM Cortex-M4 ARM Cortex-M33
Core Frequency (MHz) 40 80
RAM (Kb) 32 64
Flash (Kb) 256 768
Tx (dBm) 19.5 20
Rx (dBm) -101 -104

Видим, что во втором модуле используется более новое и производительное поколение чипа, с большим количеством памяти..
Различия между чипами весьма существенные, по этой причине прошивки будут разные.

Прошивка bootloader’а

Для прошивки модуля, нам нужно сперва загрузить bootloader. Возможно, какие-то модули будут уже с прошитым bootloader, но пока будем прошивать.

Для этого понадобиться:

Для стика SM-011 bootloader можно взять тут:

файл BTL_STD_S2_768.s37 в каталоге https://github.com/grobasoz/zigbee-firmware/tree/master/EFR32MG2x-768k

Для платы Ebyte bootloader можно взять тут:

файл BTL_STD_MG1B232_TX-PA0_RX-PA1_BT-PB11-combined.s37 в каталоге https://github.com/grobasoz/zigbee-firmware/tree/master/EFR32%20Series%201/EFR32MG1B-256k/Bootloaders

Подключаем Jlink к модулям, контакты подписаны на модулях.

Достаточно соединить 4 контакта:

VTref --- +
  GND --- -
SWDIO --- SWO
SWCLK --- SWK
(на фото показан еще контакт rst, но это не обязательно)

Запускаем Simplicity Commander и подключаемся к Jlink. Должен определиться чип и можно посмотреть информацию.

На странице Flash можно стереть чип и, выбрав файл с прошивкой bootloader, прошить его.

Результат прошивки можно увидеть в Device Info нажав кнопку Map.

Дополнение от 20.09.2021:

Иногда для прошивки bootloader, необходимо стереть чип, иначе не получиться даже подключиться к нему. Стирание можно выполнить из командной строки:

commander device recover --device=EFR32MG21A020F768IM32
commander device masserase --device=EFR32MG21A020F768IM32

где EFR32MG21A020F768IM32 — маркировка чипа, который стираем.

Прошивка NCP

Теперь понадобиться gbl-прошивка.
Рекомендуется брать прошивку на базе текущего протокола EmberZNet v8 и прошивки старше 6.7.8 (где по словам разработчиков исправлены важные баги).

Для стика SM-011 прошивку можно взять тут:

файл NCP_USW_115k2_ZBBridge_678.gbl в каталоге https://github.com/grobasoz/zigbee-firmware/tree/master/Sonoff-ZBBridge

Для платы Ebyte bootloader можно взять тут:

файл NCP_UHW_MG1B232_678_PA0-PA1-PB11_PA5-PA4.gbl в каталоге https://github.com/grobasoz/zigbee-firmware/tree/master/EFR32%20Series%201/EFR32MG1B-256k/NCP

Можно прошить NCP прошивку также через Simplicity Commander и Jlink:

Но, с появлением у нас bootloader, можно шить и обновлять прошивки через USB.
Например, с помощью этой утилиты https://github.com/Elelabs/elelabs-zigbee-ezsp-utility

После прошивки bootloader, подключив стик к USB, узнав порт (у меня это COM9), выполним команду:

>python Elelabs_EzspFwUtility.py probe -p COM9
2021/02/25 21:21:58 Elelabs_EzspFwUtility: EZSP adapter in bootloader mode detected:
2021/02/25 21:21:58 Elelabs_EzspFwUtility: Gecko Bootloader v1.A.3

Т.е. успешно работает bootloader — можно прошивать. Выполняем команду flash указав файл соответствующей прошивки:

>python Elelabs_EzspFwUtility.py flash -f ../NCP_UHW_MG1B232_678_PA0-PA1-PB11_PA5-PA4.gbl -p COM9
2021/02/25 21:46:40 Elelabs_EzspFwUtility: EZSP adapter in bootloader mode detected:
2021/02/25 21:46:40 Elelabs_EzspFwUtility: Gecko Bootloader v1.A.3
2021/02/25 21:46:40 Elelabs_EzspFwUtility: Allready in bootloader mode. No need to restart
2021/02/25 21:46:41 Elelabs_EzspFwUtility: Successfully restarted into X-MODEM mode! Starting upload of the new firmware... DO NOT INTERRUPT(!)
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.....
.
2021/02/25 21:47:12 Elelabs_EzspFwUtility: Firmware upload complete
2021/02/25 21:47:12 Elelabs_EzspFwUtility: Rebooting NCP...
2021/02/25 21:47:20 Elelabs_EzspFwUtility: Generic EZSP adapter detected:
2021/02/25 21:47:20 Elelabs_EzspFwUtility: Firmware: 6.7.8-117
2021/02/25 21:47:20 Elelabs_EzspFwUtility: EZSP v8

После окончания прошивки, стик переключится в обычный режим и будет выведена версия прошивки: 6.7.8 EZSP v8.

Софт для работы

Что теперь с этим всем делать?

Я не знаю всё программное обеспечение, которое может работать с чипами EFR32, но применительно к теме Умного дома вы можете использовать эти прошитые стики в следующих приложениях:

Home Assistant — ZHA

Этот модуль изначально работал с чипами EFR32 и протоколом EmberZNet. В прошлом году его доработали для поддержки протокола EmberZNet v8 и теперь он тоже поддерживает современные прошивки NCP.

Tasmota

Эта прошивка для ESP8266/32 также может работать с этими чипами, достаточно подключить к ESP модуль с EFR32 проводами (например, как тут https://github.com/zigpy/zigpy/discussions/584) и запустить в режиме Sonoff ZBBridge.

SprutHub

Это новая разрабатываемая система Умного дома также успешно поддерживает работу со zigbee-стиками и протоколом EmberZNet.

Zigbee2MQTT

Работы ведутся и уже совсем скоро, протокол EmberZNet v8 будет доступен и на этом популярном решении. Обсуждение и тестирование ведется пока тут.

Дополнительные ссылки

Постскриптум

Первые тесты показывают, что эти стики достаточно производительны, у них большая зона покрытия и чувствительность. Не хуже, чем стики на базе чипов от TI (модуль eByte можно сравнить с чипом cc2538, а SM-011 с cc2652p). Но многое также зависит от используемого программного обеспечения.

При относительно небольшой цене (около 800руб за плату eByte и 1500руб за стик SM-011), они могут составить конкуренцию другим решениям.
А скорое появление аналогичного стика от Sonoff позволит сделать их более доступными и распространенными.

Будем дальше использовать и набираться опыта работы с этими чипами в чате https://t.me/zigbeer.

Отдельное спасибо за участие телеграм-пользователям http://t.me/AFaron0v и http://t.me/lmahmutov

15 комментариев для “Прошивка стиков EFR32

  1. Было бы неплохо для коллекции пинаут efr32 добавить. Обязательно использую эту статью. Илье большое спасибо

  2. Мне пришли залоченные стики, на них уже был какой-то древний бутлоадер 🙂 JLink не хотел коннектиться к ним.

    Чтобы разлочить, нужно из командной строки выполнить:

    ./commander device recover —device=EFR32MG21A020F768IM32
    ./commander device masserase —device=EFR32MG21A020F768IM32

  3. STLink не цепляется программой Simplicity Commander

    А тасмота выдала о модуле такую инфу:
    Project tasmota Tasmota Version 9.4.0(zbbridge)-2_7_4_9(2021-04-21T16:23:53)
    12:51:30.439 ZIG: Resetting EZSP device
    12:51:31.612 RSL: RESULT = {«ZbState»:{«Status»:1,»Message»:»EFR32 booted»,»RestartReason»:»Power-on»,»Code»:2}}
    12:51:31.665 ZIG: specific frame_control 0xFF80
    12:51:31.668 RSL: RESULT = {«ZbState»:{«Status»:55,»Version»:»0.0.0.0″,»Protocol»:0,»Stack»:0}}
    12:51:31.669 RSL: RESULT = {«ZbState»:{«Status»:98,»Message»:»Only EZSP protocol v8 is currently supported»}}
    12:51:31.670 RSL: RESULT = {«ZbState»:{«Status»:99,»Message»:»Abort»}}

  4. Simplicity Commander кмк вообще не знает про STLink, он только в JLink умеет. По идее можно попробовать через OpenOCD если найти к нему конфиг под этот чип.

    1. Да, точно. STM прошил в j-link. Подключился к модулю zigbee. Прошивается только segger утилитами.
      Как подключить к sonoff так и не получилось. Ребутается, после нескольких попыток ресетить esp.

      1. А зачем подключать его к sonoff? Чтобы на пути сигнала был еще один дополнительный бридж? Проще воткнуть его в USB и он отлично подхватывается через ZHA.

        1. Тот модуль что в руках у меня, совсем не то что было перечислено в статье. Это «совсем другая история» просто чип такой же. Знать бы пинаут что бы втыкать в USB )))

          1. А, в таком случае нужно что-то типа CP2102 или CHM340, у самого чипа USB внутри нет, те стики что в статье как раз имеют на борту CP2102.

Добавить комментарий