Opensource прошивка для WB-MR

Здравствуйте уважаемые пользователи!

У меня в распоряжении есть целых два старых модуля, которые не поддерживают обновление прошивки, и в них нельзя поменять скорость обмена. Я с интересом залез внутрь самого простого: WB-MR2, не Мини. Модуль собран на контроллере STM32, внутреннее устройство весьма простое, грех не попробовать его похакать.

Первая попытка была сделана в среде Ардуино. К сожалению У неё тяжеленный рантайм, приложение с библиотекой mobdus не влезло в память контроллера. Пришлось осваивать инструментарий от STM.

На даный момент поддерживается только эта плата и её базовый функционал: два реле и две кнопки. Т. е. то, с чего начали. Разработка продолжается, но интересующиеся уже могут заглянуть сюда: https://github.com/Sonic-Amiga/OpenWB

Прошивка распространяется по GPL v3.
Почему я считаю что это интересно:

  1. Ну во-первых потому что я это уже сделал для себя лично.
  2. Можно портировать на другие контроллеры и аппаратную часть. Создавайте свои модули с любым количеством входов и выходов.
  3. Теперь можно экспериментировать с внутренней логикой. Двойное, тройное нажание? Длинное нажатие? Пожалуйста! Хотите управлять внешней нагрузкой по сигналам от датчиков? Нет проблем. Расширяйте функционал уже имеющейся у вас аппаратуры.
  4. Не нравится ModBus? Реализуйте свой протокол, например CAN.

Если кому-то это интересно, добро пожаловать в проект!

Планы:

  1. Совместимость с регистрами конфигурации новых версий.
  2. Поддержка WB-MR3 (мой второй снятый модуль)

Большое спасибо компании WirenBoard за такой дружественный к разработчику девайс!

2 Likes

Тольков новых версиях микроконтроллер стартует с загрузчика и прошивку залить можно (по умолчанию) только через Modbus

Моя прошивка заливается через ST-Link. Схема подключения прилагается. :slight_smile:

Разумеется, я рассмотрел потроха вашего заливателя. Сам по себе он не интересен и скучен, прошивка зашифрована и расшифровывается уже на борту. Ребята вроде тех, что кололи Энигму, возможно, восстановят бинарник на раз-два, вряд-ли алгоритм мегасложен в силу ограниченности ресурсов устройства. Но я силён в программировании куда больше, чем в криптоанализе, мне было проще написать с нуля. К тому же это уважает Вашу интеллектуальную собственность :slight_smile:
В принципе я могу написать и загрузчик, даже совместимый с вашим прошивальщиком (бинари, правда, возьмёт только свои), но мне лень ибо нет острой нужды на данный момент.

Я к тому что новые устройства стереть с помощбю st-link не получится - чип залочен битом защиты. Дешевле заказать непрошитые или сдуть МК и поменять на чистый.
UPD: Непрошитые заказать будет скорее нельзя. Так как тестировать их не получится…

@BrainRoot Если вам интересно, в процессе разработки высветились баги оригинальной прошивки:

  1. Не делает различий между Input registers и Holding registers, отвечает на оба кода функции. Возможно сделано для экономии памяти.
  2. При попытке обратиться к несуществующему регистру выдает InvalidValue; по стандарту должно быть InvalidAddress
  3. Некоторое железо, например вот такой вот адаптер (https://amperkot.ru/msk/catalog/modul_rs485-24327928.html) в сочетании с USB-to-serial на PL2303 производит шум при переключении направления, что выражается в мусоре в хвосте пакета. У меня с оригинальными модулями вообще напрочь теряется связь на скоростях выше 19200. Точнее в одну сторону: команду он примет, а ответ не придёт. Видимо алгоритм другой, мусор сбивает его с толку, он думает что это пакет такой. Я у себя тоже мусор наблюдал в виде одного байта, застрявшего в FIFO. Лечится принудительным Flush порта после обработки пакета. А длину пакета я определяю по коду функции, что немного не совпадает со стандартом, зато работает надёжно.
    Что интересно, влияет именно сочетание оборудования. Тот же адаптер RS485 у меня работает в продуктовой инсталляции на RaspberryPi 4 вообще без проблем.
2 Likes

хорошее замечание, за инфу спасибо. у меня много датчиков подключены через такой адаптер к шине modbus (тот же CO2 SenseAir S8, который подключается проще некуда к Modbus через это устройство). Но я на всяких случай решил разделить несколько modbus линий… для всех исполнительных WB-реле у меня одна линия (планирую на больших скоростях), для всем моих датчиков (температуры, co2…) другая линия на скорости 9600.