Zigbee модуль CC2538 с усилителем CC2592. Прошивка — подключение — настройка (Homeassistant и zigbee2mqtt).

  • Цена: $5.67
  • Модуль был куплен на замену USB-стика на базе СС2531 для решения такого ряда задач:

    1. Улучшение производительности Zigbee — координатора (ускоряется прохождение команд и увеличивается число поддерживаемых устройств).

    2. Переход к протоколу Zigbee v3.0.

    3. Интеграция в корпус контроллера с подключением по UART (у меня только 3 USB).

    4. Увеличение дальности связи.

    Т.к. продавец шлет модули на базе нового (не шитого ранее) чипа, то есть возможность загрузить прошивку Zigbee координатора используя простейший $1 USB-UART переходник и режим Serial Boot Loader CC2538.

    Подробности под катом.

    Вводная

    У SoC CC2538 есть Serial Bootloader (SBL) — специальный загрузчик, который позволяет загрузить прошивку через UART. Если вы купили «свежий» чип с фабрики, то этот загрузчик включен и доступен по умолчанию. При прошивке какого-либо firmware этот загрузчик как правило отключается.

    За механизм включения-выключения отвечает специальный бит конфигурации в CCA (Customer Configuration Area).

    Если бит сброшен, то при подаче питания (или сбросе через reset) будет выполняться Application code, если установлен — SBL boot code. При прошивке этот бит обычно сбрасывается, так что в режим SBL больше не попасть и потребуется jtag программатор (j-link, segger и т.п).

    Чтобы микроконтроллеру понять куда грузиться, в SBL boot code или Application code, микроконтроллер при включении опрашивает определенный порт. Какой именно порт и какой у него будет активный логический уровень — задается в соответствующих битах конфигурации CCA (Customer Configuration Area), см. Serial Boot Loader for CC2538.

    Как сохранить режим SBL

    Необходимо слегка модифицировать прошивку, установив бит SBL, порт РАх и требуемый логический уровень.

    Смотрим на обратную сторону модуля:

    Zigbee модуль CC2538 с усилителем CC2592. Прошивка - подключение - настройка (Homeassistant и zigbee2mqtt).

    Порты РА0-РА1 у меня будут использованы для подключения по UART, остаются РА2-РА7. Я выбрал «дальний» РА7 и низкий активный уровень, проще всего будет подключить тактовую кнопку между РА7 и GND.

    Открываем hex прошивку координатора Zigbee (из готовых с подключением по UART, без линий CTS/RTS мне знакома только такая версия)

    и в самом конце файла правим два байта, конфигурационный и контрольной суммы:

    В конце файла в строке

    :0CFFD400FFFFFFEF000000000000200015

    изменяем два байта на

    :0CFFD400FFFFFFF700000000000020000D

    Zigbee модуль CC2538 с усилителем CC2592. Прошивка - подключение - настройка (Homeassistant и zigbee2mqtt).

    Пайка и прошивка

    Для подключения и прошивки модуля потребуется кусок ~10 см 4-жильного кабеля (у меня это обрезок шнура от iphone), 4 коннектора и кусок термоусадки.

    Zigbee модуль CC2538 с усилителем CC2592. Прошивка - подключение - настройка (Homeassistant и zigbee2mqtt).

    Паяем и оконечиваем кабель (см. первую картинку).

    Zigbee модуль CC2538 с усилителем CC2592. Прошивка - подключение - настройка (Homeassistant и zigbee2mqtt).

    Натягиваем термоусадку (выход шнура дополнительно проклеил герметиком) и подключаем к USB-UART переходнику.

    Схема соединения: TX->RX=PA0, RX->TX=PA1, GND->GND, Vcc3.3->3V3 (питание только 3.3В!)

    Zigbee модуль CC2538 с усилителем CC2592. Прошивка - подключение - настройка (Homeassistant и zigbee2mqtt).

    Качаем исходник простейшего прошивальщика для СС2538 под Linux

    wget https://github.com/1248/cc2538-prog/archive/master.zip

    распаковываем и компилируем:

    make

    Подключаем собранную связку (на последнем фото) к порту USB и прошиваем:

    ./cc2538-prog -d /dev/ttyUSB0 -f myfile.hex

    где ttyUSB0 — порт переходника

    myfile.hex — файл прошивки в формате hex

    Модуль готов к использованию.

    Подключение

    Подключаем полученный модуль координатора к контроллеру Homeassistant (Hass.io) на базе плат renegade- orange- raspberry- banana- (и т.д.).

    У меня используется Renegade ROC-RK3328-CC в безвентиляторном корпусе от Asus Tinker board. Корпус полностью алюминиевый, поэтому для подключения внешней антенны к CC2538 потребовался самодельный короткий переходник IPX<->RP-SMA.

    На плате ROC-RK3328 каждый пин гребенки подписан, вычислить UART и питание не составляет труда.

    Zigbee модуль CC2538 с усилителем CC2592. Прошивка - подключение - настройка (Homeassistant и zigbee2mqtt).

    Подключаю модуль

    Zigbee модуль CC2538 с усилителем CC2592. Прошивка - подключение - настройка (Homeassistant и zigbee2mqtt).

    Изолирую его вторым куском термоусадки и укладываю вокруг CPU (на него ставится куб теплосъемника)

    Zigbee модуль CC2538 с усилителем CC2592. Прошивка - подключение - настройка (Homeassistant и zigbee2mqtt).

    Подготовка порта UART

    На многих мини-ПК типа orange- raspberry- banana- порты UART в системе по умолчанию отключены.

    Включить их можно в файле /boot/armbianEnv.txt, добавив строку

    overlays=uartX

    где Х — номер требуемого порта

    Но такой метод сработает при наличии в папке /boot/dtb/ специального overlay- файла с расширением .dts

    У меня такого overlay файла нет, поэтому пришлось править конфигурационный dtb (Device Tree Blob) файл моей системы вручную.

    Далее все делаю под учетной записью пользователя hassio

    Перехожу в рабочую папку

    cd /home/hassio/

    Копирую исходный dtb файл в рабочую папку

    sudo cp /boot/dtb/rockchip/rk3328-roc-cc.dtb /home/hassio/rk3328-roc-cc.dtb

    Конвертирую dtb в dts

    dtc -I dtb -O dts -o rk3328-roc-cc.dts rk3328-roc-cc.dtb

    Запускаю редактор

    sudo nano rk3328-roc-cc.dts

    Включаю UART1 (по документации это serial@ff120000) заменяя значение status с «disable» на «okay»

    serial@ff120000 {

    compatible = "rockchip,rk3328-uart

Оцените статью