Сегодня я расскажу вам о том, как прошить еще один вид zigbee-стиков (кроме стиков на базе чипов TI ccXXXX). Эти стики пока не очень популярны в zigbee-тусовке, но возможно это изменится со временем.
Стики
В продаже на различных площадках можно найти стики/платы на базе модулей SiliconLabs EFR32, которые могут работать со стеками Zigbee, BLE и Thread.
Среди них есть уже полноценные устройства, например:
- https://spruthub.ru/device/defaro-sprut-stick-2-pro
- https://elelabs.com/products/elelabs-usb-adapter.html
Есть устройства, которые можно перепрошить и использовать:
А есть для “домашнего творчества”, например такие:
На текущий момент нас интересует работа с 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, но пока будем прошивать.
Для этого понадобиться:
- программатор Jlink v9 (версия v8 позволит прошить Cortex-M4, а вот для прошивки Cortex-M33 понадобиться версия v9 https://wiki.segger.com/Software_and_Hardware_Features_Overview).
Возможно получится прошить и другими программаторами, например STLink, но я не проверял. - утилита Simplicity Commander (скачать тут https://www.silabs.com/mcu/programming-options).
- прошивки 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 будет доступен и на этом популярном решении. Обсуждение и тестирование ведется пока тут.
Дополнительные ссылки
- https://github.com/SillyDay/EFR32/
- https://mysku.ru/blog/diy/84501.html
- https://github.com/zigpy/zigpy/discussions/584
- https://www.digiblur.com/2020/07/how-to-use-sonoff-zigbee-bridge-with.html?m=1
- https://notenoughtech.com/home-automation/flashing-tasmota-on-sonoff-zigbee-bridge/
Постскриптум
Первые тесты показывают, что эти стики достаточно производительны, у них большая зона покрытия и чувствительность. Не хуже, чем стики на базе чипов от TI (модуль eByte можно сравнить с чипом cc2538, а SM-011 с cc2652p). Но многое также зависит от используемого программного обеспечения.
При относительно небольшой цене (около 800руб за плату eByte и 1500руб за стик SM-011), они могут составить конкуренцию другим решениям.
А скорое появление аналогичного стика от Sonoff позволит сделать их более доступными и распространенными.
Будем дальше использовать и набираться опыта работы с этими чипами в чате https://t.me/zigbeer.
Отдельное спасибо за участие телеграм-пользователям http://t.me/AFaron0v и http://t.me/lmahmutov
А ещё EFR32 есть в роутере Smart Box Turbo+, и его уже научились использовать:
https://mysku.ru/blog/diy/84501.html
Да, я указал ссылку на эту стаью
Китайские клоны JLink v9 с алиэкстпресса справятся с Cortex-M33?
Да. У меня как раз справился.
Было бы неплохо для коллекции пинаут efr32 добавить. Обязательно использую эту статью. Илье большое спасибо
Легко же гуглится даташит…
Мне пришли залоченные стики, на них уже был какой-то древний бутлоадер 🙂 JLink не хотел коннектиться к ним.
Чтобы разлочить, нужно из командной строки выполнить:
./commander device recover —device=EFR32MG21A020F768IM32
./commander device masserase —device=EFR32MG21A020F768IM32
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»}}
Simplicity Commander кмк вообще не знает про STLink, он только в JLink умеет. По идее можно попробовать через OpenOCD если найти к нему конфиг под этот чип.
Да, точно. STM прошил в j-link. Подключился к модулю zigbee. Прошивается только segger утилитами.
Как подключить к sonoff так и не получилось. Ребутается, после нескольких попыток ресетить esp.
А зачем подключать его к sonoff? Чтобы на пути сигнала был еще один дополнительный бридж? Проще воткнуть его в USB и он отлично подхватывается через ZHA.
Тот модуль что в руках у меня, совсем не то что было перечислено в статье. Это «совсем другая история» просто чип такой же. Знать бы пинаут что бы втыкать в USB )))
А, в таком случае нужно что-то типа CP2102 или CHM340, у самого чипа USB внутри нет, те стики что в статье как раз имеют на борту CP2102.