Прошивка через RS485?

Тема в разделе "Посоветуйте детальки", создана пользователем ostrov, 24 дек 2016.

  1. ostrov

    ostrov Гуру

    Имеется сеть из нескольких модулей соединенных по RS485. Модели вмотнированы в стены и прочие труднодоступные места. Иногда возникает необходимость обновить им прошивку и приходится тратить время и силы на их добычу. Возник вопрос, а нельзя ли прошить модуль прямо через сеть? Как это теоретически возможно сделать, чтобы прошивка легла именно на тот модуль какой надо? Встроить бутлоадер в программу каким то образом?
     
  2. rkit

    rkit Гуру

    Послать команду на перезагрузку, выключить связь на всех остальных модулях секунд на 20, да и зальется штатно, по-моему.
     
    ostrov нравится это.
  3. Tomasina

    Tomasina Иномирянин

    RS485 связан с пинами 0 и 1?
    Добавить в протокол новую команду, при получении которой все адресаты на 4 минуты впадают в "спячку" (игнорируют любые команды), а прошиваемое устройство входит в перезагрузку и бутлоадер по идее должен подхватить команду DTR (тройное сочетание не помню каких символов) и перепрошиться.
    И да, все модули должны быть настроены так: по умолчанию (подтяжкой,безо всяких действий со стороны МК) должны быть в режиме Rx.
     
    ostrov нравится это.
  4. ostrov

    ostrov Гуру

    То есть тупо даем команду с номером прошиваемого модуля. Все остальные получив команду и поняв что не им уходят в вечный цикл. Тот кому надо перегружается и прошивается бутлоадером. Осталось придумать как сделать отправку команды с последующей выдачей прошивкой и сделать это все быстро.
     
  5. ostrov

    ostrov Гуру

    Да, забыл уточнить, модули на базе Про Мини, то перегружать их надо в строго определенное время.
     
  6. ostrov

    ostrov Гуру

    Вот думаю как бы загнать Ардуино в вечный ребут но чтобы она из него вышла получив новую прошивку? Как то через метку в ЕЕПРОМ?
     
  7. rkit

    rkit Гуру

    Она ждет прошивки секунды три. Этого хватит ЗА ГЛАЗА.
     
  8. ostrov

    ostrov Гуру

    Хорошо, как сделать апппратный ребут? Софтовый не прокатывает.
     
  9. ostrov

    ostrov Гуру

    Кстати и 3х сек за глаза может не хватить на запуск прошивателя. Если из IDE так точно компилит дольше.
     
  10. ostrov

    ostrov Гуру

    Уже есть 485, надо бы на ней.
     
  11. ZAZ-965

    ZAZ-965 Гуру

  12. ostrov

    ostrov Гуру

  13. ZAZ-965

    ZAZ-965 Гуру

    В описании -
    Код (Text):
    RS-485 mode added
    По моему на про мини не optiboot, из boards.txt
    Код (C++):
    pro.menu.cpu.16MHzatmega328.upload.maximum_size=30720
    pro.menu.cpu.16MHzatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328.hex
     
  14. ostrov

    ostrov Гуру

    Нет, не optibooot потому и интересно чем от отличается и чето за 485 моде такое? Как оно поможет прошить?

    Вопрос с аппаратной перезагрузкой так же открыт. Пытаюсь программно дернуть ножку reset другой ножкой, но система ребутится до того как ножка выйдет на нужный режим. Притяжка не помогает. Вачдогом что ли перегружать?
     
  15. ostrov

    ostrov Гуру

    С аппаратным ребутом разобрался, уже проще стало. По сути остается найти способ подавать команду
     
  16. ostrov

    ostrov Гуру

    И еще проблема. Залива программы через UART представляет собой не одностороннюю передачу данных, а определенный протокол с обратной связью. То есть в случае с 485 придется как то вовремя дергать ножку прием-передача. Да еще и не раньше чем часть данных уйдет или придет полностью. Вот тут и не понятно когда ее дергать и за какое место. Дергать то должен бутлоадер. Может это и есть тот самый 485-mode? Тогда возникают другие вопросы и нет им числа. Или использовать 422, но это уже аппаратная модификация.
     
  17. stimer

    stimer Нуб

    RS-485 mode added. Direction pin is defined at compile time similar to
    led by means of `RS485=<PIN>` variable.
    Походу так и есть. @ostrov, здравствуйте, огромная просьба - поделиться, чем дело закончилось - как решилась проблема с аппаратным ресетом, был ли заюзан модифицированный optiboot и удалось ли решить поставленную задачу по удаленному обновлению в целом?
    PS прошу прощение, за раскапывание исторических тем - собираю инфу в сети по крупицам )
     
  18. parovoZZ

    parovoZZ Гуру

    через вачдог. А чтобы отличить штатную перезагрузку от внештатной, можно использовать переменную в секции init или в eeprom.
     
  19. Для этого есть специальный регистр