Модуль был куплен на замену 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 мне знакома
только такая версия)
и в самом конце файла правим два байта, конфигурационный и контрольной суммы:
В конце файла в строке
:0CFFD400FFFFFF
EF0000000000002000
15
изменяем два байта на
:0CFFD400FFFFFF
F70000000000002000
0D
Пайка и прошивка
Для подключения и прошивки модуля потребуется кусок ~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\0snps,dw-apb-uart";
reg = < 0x00 0xff120000 0x00 0x100 >;
interrupts = < 0x00 0x38 0x04 >;
clocks = < 0x02 0x27 0x02 0xd3 >;
clock-names = "baudclk\0apb_pclk";
reg-shift = < 0x02 >;
reg-io-width = < 0x04 >;
dmas = < 0x0c 0x04 0x0c 0x05 >;
dma-names = "tx", "rx";
pinctrl-names = "default";
pinctrl-0 = < 0x39 0x3a 0x3b >;
status = "okay";
phandle = < 0xa1 >;
};
Конвертирую dts в модифицированный dtb (uart)
dtc -I dts -O dtb -o rk3328-roc-cc_uart.dtb rk3328-roc-cc.dts
Делаю резервную копию оригинального dtb файла
sudo cp /boot/dtb/rockchip/rk3328-roc-cc.dtb /boot/dtb/rockchip/rk3328-roc-cc.dtb.back
И копирую модифицированный dtb на его законное место под старым именем
sudo cp rk3328-roc-cc_uart.dtb /boot/dtb/rockchip/rk3328-roc-cc.dtb
На всякий случай добавляем вашего пользователя в группу для доступа к /dev/ttyS1
sudo adduser $USER dialout
Перезагрузка
sudo reboot
И в системе появляется
/dev/ttyS1
Убираем старый USB стик на базе СС2531 и из системы исчезает /dev/ttyACM0, потребуется перенастройка модуля zigbee2mqtt на новый порт /dev/ttyS1. В Hass.io это делается в секции serial и advanced:
serial:
port: /dev/ttyS1
advanced:
baudrate: 115200
rtscts: false
Далее, очень желательно в этой же секции advanced заменить encryption key (Zigbee Transport Key) который установлен по умолчанию.
В настройках он представлен рядом из 16 десятичных чисел из диапазона 0..255, например
network_key: [1, 3, 5, 7, 9, 11, 13, 15, 0, 2, 4, 6, 8, 11, 12, 13]
Для лучшей приватности нужно рандомизировать этот ряд вручную или использовать скрипт
dd if=/dev/urandom bs=1 count=16 2>/dev/null | od -A n -t u1 | awk '{printf "["} {for(i = 1; i< NF; i++) {printf "%s, ", $i}} {printf "%s]\n", $NF}'
Который выдаст более приличный ключ, например
network_key: [83, 58, 101, 176, 134, 235, 98, 89, 17, 9, 228, 220, 18, 175, 149, 140]
И последний штрих: необходимо уменьшить таймаут команд до 5 мсек в секции queue
queue:
delay: 5
После замены Zigbee Transport Key и задержки необходимо перезагрузить zigbee2mqtt и заново провести сопряжение zigbee устройств с вашим координатором. Страшного в этом ничего нет: ID устройств не меняются, сопоставленные имена, принадлежность к зонам, автоматизации — все останется на месте.
Смотрим логи: все ок.
> [email protected] start /zigbee2mqtt-1.8.0
> node index.js
zigbee2mqtt:info 2020-05-11 12:11:23: Logging to console and directory: '/share/zigbee2mqtt/log/2020-05-11.12-11-23'
zigbee2mqtt:info 2020-05-11 12:11:24: Starting zigbee2mqtt version 1.8.0 (commit #unknown)
zigbee2mqtt:info 2020-05-11 12:11:24: Starting zigbee-herdsman...
zigbee2mqtt:info 2020-05-11 12:11:27: zigbee-herdsman started
zigbee2mqtt:info 2020-05-11 12:11:27: Coordinator firmware version: '{"type":"zStack30x","meta":{"transportrev":2,"product":2,"majorrel":2,"minorrel":7,"maintrel":2,"revision":20200327}}'
И под конец немного дегтя: продавцы акцентируют внимание на высокой выходной мощности СС2592 (до +22дБ), умалчивая что на прием у него стоит LNA (Low Noise Amplifier), который улучшает чувствительность всего на 3дБ.
То есть этот координатор будет «просто немного лучше слышать» удаленные маломощные устройства.
Написали бы в общих словах, что это за модуль и для чего.
Модуль состоит из SoC на базе СС2538, в котором интегрирован процессор Cortex M3, RAM 32Kb, Flash 512Kb, несколько групп портов разного назначения, АЦП, и RFcomm. Второй чип это усилитель мощности, предусилитель, коммутаторы.
Вот
Сейчас всё стало понятно.
всё чётко, что куда как когда.
(правда, у меня домотикз, но там просто добавить контроллер, скорее всего )
Питание — только 3,3в.
Jager здесь вроде выкладывал схемы, stl и печатные платы для сборки координатора версии v.3
Вы есть в чате зигби? t.me/zigbeer
На modkam.ru читал все статьи начиная с 1 версии.
В чате зигби меня нет. А там уже писали про все это?
Может быть он выключен?
Кстати я сравнивал с предыдущим модулем на СС2531 (зеленый текстолит, гребенка jtag, без усилка) с тем же самым пигтейлом и той же антенной.
Радиоэфир на 2,4 тут сильно загажен.
Вот, снизу подписаны zigbee каналы, 5MHz ширина канала
его можно както в горизонтальную ролету присобачить?
В ролеты ставят исполнительные модули, более простые по начинке но с дополнительными драйверами моторов и датчиками положения штор.
Только собираюсь их делать, но на базе wifi (модули ESP8266).
Но есть дополнительные фишки:
— сам по себе процессор в разы шустрее 8051, который применяется в СС2530/31.
— прошивка выше классом, например не требуется постоянное клацанье кнопками для первичного сопряжения (маялся с кубиками).
— больше памяти (вроде 200 устройств тянет)
— именно в нем есть USB и UART (в CC2530 — только UART, в CC2531 — только USB).
— лёгкое обновление (зажал пинцетом РА7 на землю и прошил прямо на месте)
Без проблем подключился датчик MiJia light intensity sensor ( GZCGQ01LM ). Он на протоколе подключения ZigBee 3.0
Я ведь верно понимаю, что кроме USB вы больше ничего использовать не будете при подключении к своему серверу?
Вот и возникла идея сэкономить USB порт, упростить подключение — без всяких плат напрямую к гребенке, с нее же получить готовое питание 3,3в.
Этот вариант годится для любых raspberry- orange- подобных плат, но активация UART может быть нетривиальной (специально для этого и делал эту статью).
Чуть выше Jager дал ссылку на его ресурс, где используется USB вариант подключения.
Выглядит интереснее, конечно. Даже в связке со «старыми» sonoff (а их у меня куча). К тому же, для него ничего не надо, в принципе: встроенная антенна есть, внешнюю тоже не сложно прицепить.
«Надо брать!» Спасибо!
Доставка только стала дорогой… С другой стороны, бестрековые теперь в половине случаев не доходят…
И тем более до конби и распби от Дрезден Элекроникс вообще не дотягивает по дальности и скорости?
Конби это — USB, распби это — UART карта расширения на 'классическую' гребенку RPi.
Антенны: либо SMD керамическая, либо травленая на плате Inverted F. Припаять IPX гнездо можно, но зачем?
Я не сравнивал их вживую, но посмотрел спецификации и картинки. Не увидел там третьей версии протокола и особой дальности.
СС2538 более универсальна и лучше по цене/качеству как мне кажется.
Одни и те же икеевские зигби лампы посредством деконза откликаются быстрее, нежели через zigbee2mqtt.
Повторюсь — наблюдаю у себя такое. Понятия не имею как у других. Это при том, что mqtt брокер царствует на отдельной персональной малине rp3b+ в одиночку.
И да, это не означает, что по mqtt задержка на минуту )) просто по деконзу мгновенно, по mqtt — на сек. позже (может чуть больше, когда как).
А если сделать группу икеевских ламп (скажем десяток) и замерить время включения-выключения?
Я использую conbee II и raspbee. Практически одинаковая скорость, но первый, за счет того, что на шнурке-удлинителе вынесен на метр от сервера, ловит куда дальше.
Кстати, сс2531 в роли роутера полная чушня. Прошил 3 штуки под роутеры, расставил в слабых местах покрытия для усиления меш-сети. Практически ничего не изменилось. Датчики радостно цепляются к чему угодно, но не к ним. А те кто вынужденно цепляются, параметры практически не изменяют. Вероятно я их готовить не умею ))
Насчет самосборки — думаю маловероятно. Это ноу-хау Дрезден Электроникс.
Мне не совсем понятно почему они до сих пор Raspbee выпускают, тем более модернизируют и есть вторая версия.
В любом случае даже для малины Conbee II лучше подойдет, так как при помощи доп. USB кабеля свисток отводится от паразитных эл/магнитных полей одноплатника или компа, тем самым увеличивая дальность и повышая надежность соединения датчиков.
СС2538 шилась секунд за 40
Чип-ид постоянно 0. Все контакты прозванивал, контакт был.
Пробовл так же ардуинкой. Раза с 10 как-то прошилось. Но github.com/ioBroker/ioBroker так и не увидел.
Заказал СС-дебагер. Проверю была ли проблема с 2531 или с руками.
P.S. Если у когото есть идее как пофиксить, напишите =)
Раньше пробовал ds18b20 к этому же OrangePi подключать, всё работало.
В любом случае сегодня получил cc-debugger. Прошилось с первого раза. И в системе обнаружилось сразу.
Если CC2531 на USB-свистке — то тоже должны эти ноги выводить, у меня на CC2531 USB Dongle была колодка контактов. RX и TX там — ноги P1.4 и P1.5, по идее тоже есть на этой колодке.
https://aliexpress.ru/item/4000522367679.html
я так понял это то же самое, только в окультуренном варианте, без необходимости паять мелкие контакты модуля. Или тут что-то не так?
Но его не впихнуть в корпус Малинки.
Обязательно что-то шить в модуль zigbee надо? Без этого HA или домотикс не увидит?
Думал xiaomi gateway сменить на usb-стик zigbee
В нее нужно прошить необходимый вид прошивки с требуемым вариантом интерфейса.
Подавляющее большинство шьют USB вариант, после чего все видится и работает.
Можно еще дроссель впаять ;)
Керамики на 10мкФ думаю хватит, через дроссель smd.
Хватит или нет — лучше сказать глянув осциллографом.
Тут как-то с enjoyneering смотрели что творится по 3.3В питанию ESP, так осциллографом было видно провалы по 0,4В, которые получилось устранить только танталлом.
Про дальность — разве устройства Zigbee не объединяются в Mesh-сеть? На сколько мне известно данные чипы могут выступать ретрансляторами — тем самым усиливая дальность (есть усиленные с выносными антенами)… Usb — сборку можно воткнуть в любой блок питания, а его в розетку — вуаля — ретранслятор без каких либо банана, малин и прочего…
Насчёт увеличения дальности я не расстроился, т.к. перед покупкой скачал и почитал даташиты на оба чипа.
Ретрансляторами (роутерами) в zigbee сети могут выступать только устройства с постоянным питанием (сетевые реле, умные розетки, лампы освещения и и т.п), именно они образуют mesh сеть. У меня всего пара таких устройств, поэтому пришлось прошить пару 'синеньких' свистков на 2531 — воткнуть в старый зарядник и поискать удачное место.
Но для 2538 прошивки — роутера я не видел, кмк это слишком жирно :)
Купил ворох E18-MS1PA1-PCB для исполнительных устройств.
Есть ли инструкции как работать с ними? Готовые прошивки, подключения?
Да, есть ресурс например у Jager, см сообщение выше
На E18-MS1PA1-PCB у него версия 2 как помнится
Хотелось бы для теста навесной монтаж или макетку с типовыми модулями реле, температура…
Вот такое бы…
Про сборку прошивки кстати недавно на Хабре классная статья вышла. Про Sonoff zigbee.
Именно для исполнительных устройств все-таки лучше развести/найти заказать свою универсальную плату (вывести пучок gpio, usb, usart, debug, питание организовать). И к ней добавлять реле, оптроны, сенсоры, дисплеи и тд.
Отладочные не пойдут — здоровенные.
Ну и софт — отдельная тема.
Сам пользуюсь парой модулей CC2530, у меня меш-сеть порядка 30 устройств, и пришлось шить на core router, новые устройства начинали вываливать старые из сети, сыпались ошибки маршрутов.
Сей девайс согласно спеке Z-Stack firmware может держать в 10 раз большую нагрузку, возможно заменю подобным в каком-то будущем.
Вопросы:
1. Сколько у вас устройств в сети, нормально ли тянет нагрузку?
2. Согласно той же спеке, данный девайс не рекомендуется для Zigbee 3.0:
Нет ли у вас проблем с производительностью?
Тормозов нет.
Сеть смешанная, на zigbee работают в основном автономные батарейные датчики-сенсоры.
Примерно столько же wifi исполнительных модулей (закупил в свое время esp8266 и sonoff с очень большой скидкой и прошил 'тасмоту').
Стоит прошивка стика от 11.02.2020. Заметил, что термометры все подключаются только к роутеру. На некоторых связь 1 lqi, хотя рядом есть роутеры, к которым термометры не хотят подключаться.
Стик подключен к Raspberry Pi4. Заметил, что после перезагрузки устройства (любые в сети устройства) перестают видеться. Через несколько часов они могут появиться, а некотоыре роутеры вовсе не появляются.
Не могу понять что нужно поменять. Стоит ли менять прошивку? Все эти устройства с 2 гетвеями Xiaomi работали отлично.
На вид — проблемы именно с координатором, может быть стоит подобрать рабочую прошивку.
github.com/reverieline/CC2538-CC2592-ZNP
Кажись частично со своей проблемой разобрался. У меня WiFi и стик работали на одном канале. Когда вайфай переключил на другой канал, то конечные устройства переподвязались на роутеры.
Видел не раз объявления о продаже шитых zigbee свистков.
Почему их в принципе не продают готовыми? Неужели из-за разнообразия прошивок? Или лицензии не предполагают коммерческого использования?
cc2538-prog 'видит' сам чип сс2538?
Скоростями прошивки поиграться может?
Или это через консоль делать? Что тогда в нее отправить?
Консоль — это подключение по UART к уже прошитому модулю (наверное).
Скоростями играть получается?
Или сократить время между подачей питания на модуль и началом прошивки?
Попробую…
А кнопка между РА7 и GND для первой прошивки ведь не нужна?
Кнопка при первой прошивке не нужна — нет поддержки входа.
В терминал при подключении что то выдает?
Для 2538 нужен j-link, он более 'навороченный' и использует больше сигналов.
Как я прошил:
Нужен raspberry, провода для подключения — лучше короче.
На raspberry установлен raspbian.
cd ~
sudo apt-get update
sudo apt-get install git autoconf libtool make pkg-config libusb-1.0-0 libusb-1.0-0-dev
git clone git.jim.sh/jim/openocd тут есть поддержка flash cc2538
cd openocd/
./bootstrap && ./configure --enable-sysfsgpio --enable-bcm2835gpio && make (не делал make install)
nano tcl/interface/raspberrypi-native.cfg настраиваем jtag
sudo src/openocd -f tcl/interface/raspberrypi-native.cfg -f tcl/target/cc2538.cfg -s tcl/ -c «program {/home/pi/MODKAMRU_V3_USB.hex}»
Прошивка модифицированная по этой статье, после прошивки появилась возможность зайти в режим bootloader uart замкнув PA7 на землю.
Как то так.
Вроде так, и частота Raspberry должна быть 700MHz:
adapter driver bcm2835gpio
bcm2835gpio_peripheral_base 0x3F000000
bcm2835gpio_speed_coeffs 146203 36
# Each of the JTAG lines need a gpio number set: tck tms tdi tdo
# Header pin numbers: 23 22 19 21
bcm2835gpio_jtag_nums 11 25 10 9
Получил ту же ошибку что и уважаемый amib, из вашей переписки не понятно, получилось ли у него решить проблему и какие действия для этого необходимы. Через линуксовые команды я прошел и не думаю что проблема там, а вот фраза «провода для подключения — лучше короче» не информативна. можно минимальную схему? Заранее спасибо.
В конфиге raspberrypi-native.cfg описано какие gpio используются.
jtag tck tms tdi tdo
пины 23 22 19 21
gpio 11 25 10 9
Подключаете к аналогичным jtag пинам на сс2538.
На английском тут:
gist.github.com/hwhw/fc43892785aa84913d03495c97b0f25a#wiring-up-the-cc2538-for-cjtag
Что можно сделать?
Open On-Chip Debugger 0.10.0+dev-01404-g393448342-dirty (2020-09-10-19:06)
Licensed under GNU GPL v2
For bug reports, read
openocd.org/doc/doxygen/bugs.html
BCM2835 GPIO config: tck = 11, tms = 25, tdi = 10, tdo = 9
Info: auto-selecting first available session transport «jtag». To override use 'transport select '.
Info: BCM2835 GPIO JTAG/SWD bitbang driver
Info: clock speed 100 kHz
Info: JTAG tap: cc2538.jrc tap/device found: 0x8b96402f (mfg: 0x017 (Texas Instruments), part: 0xb964, ver: 0x8)
Info: JTAG tap: cc2538.cpu enabled
Info: cc2538.cpu: hardware has 6 breakpoints, 4 watchpoints
Info: starting gdb server for cc2538.cpu on 3333
Info: Listening on port 3333 for gdb connections
Info: JTAG tap: cc2538.jrc tap/device found: 0x8b96402f (mfg: 0x017 (Texas Instruments), part: 0xb964, ver: 0x8)
Info: JTAG tap: cc2538.cpu enabled
Warn: Only resetting the Cortex-M core, use a reset-init event handler to reset any peripherals or configure hardware srst support.
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x0000136c msp: 0x20008000
** Programming Started **
flash
flash bank bank_id driver_name base_address size_bytes chip_width_bytes
bus_width_bytes target [driver_options ...]
flash banks
flash init
flash list
gdb_flash_program ('enable'|'disable')
nand
program [address] [pre-verify] [verify] [reset] [exit]
Error: invalid subcommand «write_image erase /openocd-jim/openocd/src/openocd/CC2538.hex»
embedded:startup.tcl:530: Error: ** Programming Failed **
in procedure 'program'
in procedure 'program_error' called at file «embedded:startup.tcl», line 595
at file «embedded:startup.tcl», line 530
резисторконденсатор выбора антенны. Фото и распиновка:Прошивал через ubuntu без установки: дополнительно надо доставить make, install, gcc(в первый раз подскажет команду, а дальше просто подставлять необходимое в эту команду) и прошивку выполнять через sudo