- Цена: $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, порт РАх и требуемый логический уровень.
Смотрим на обратную сторону модуля:
Порты РА0-РА1 у меня будут использованы для подключения по UART, остаются РА2-РА7. Я выбрал «дальний» РА7 и низкий активный уровень, проще всего будет подключить тактовую кнопку между РА7 и GND.
Открываем hex прошивку координатора Zigbee (из готовых с подключением по UART, без линий CTS/RTS мне знакома только такая версия)
и в самом конце файла правим два байта, конфигурационный и контрольной суммы:
В конце файла в строке
:0CFFD400FFFFFFEF000000000000200015
изменяем два байта на
:0CFFD400FFFFFFF700000000000020000D
Пайка и прошивка
Для подключения и прошивки модуля потребуется кусок ~10 см 4-жильного кабеля (у меня это обрезок шнура от iphone), 4 коннектора и кусок термоусадки.
Паяем и оконечиваем кабель (см. первую картинку).
Натягиваем термоусадку (выход шнура дополнительно проклеил герметиком) и подключаем к USB-UART переходнику.
Схема соединения: TX->RX=PA0, RX->TX=PA1, GND->GND, Vcc3.3->3V3 (питание только 3.3В!)
Качаем исходник простейшего прошивальщика для СС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 и питание не составляет труда.
Подключаю модуль
Изолирую его вторым куском термоусадки и укладываю вокруг CPU (на него ставится куб теплосъемника)
Подготовка порта 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