самоперепрошивание ардуинины
- Войдите на сайт для отправки комментариев
Вс, 11/11/2018 - 21:13
Приветствую.
Есть много устройств на ардуининах и стоят они у заказчика на объёктах. Часть устройст находятся в таких местах, что добраться до них это ещё тот квест. Устройства кастомизированные и иногда приходится обновлять на них прошивки. Боль. У каждого из этих устройств есть на борту Lan и свой протокол общения с ПК. На текущий момент уже невозможно ничего аппаратно передалать.
1)изменить бутлоадер для возможности писать в flash (там где лежит основная прошивка, но рядом)
2)принять эту прошивку, через лан и записать в flash.
3)перезагрузиться перейдя по нулевому(?) адресу.
Возможно ли?
Чтобы бутлоадер умел писать во флеш из сети - его нужно, как минимум, обучить с этой сетью работать. Ну и еще там по мелочам: проработать процесс обновления - как-то удаленно заресетить МК, бутлоадеру как-то намекнуть, что существует новая прошивка и ее надо качнуть.
Сумеете такой бутлоадер написать - ваше желание осуществится. Я пока не видал таких на AVR-ардуинах. ESP через OTA обновляется...
Не совсем так, но возможно. Где-то уже обсуждался загрузчик для прошивки из SD-карт ридера. Возможно копать надо в этом направлении: приняли прошивку - залили её на флешку в карт-ридере, с неё перепрошили МК "спец" загрузчиком. Он при этом уже должен быть "в верхней области", заранее. Поищите, может на гитхабе что уже и есть подобное. Тут помнится было только обсуждение.. даже собирался тоже заняться этим вопросом, но "руки так и не дошли".
Зависит от нескольких факторов, в вашем посте не достаточно информации для того что бы полноценно ответить.
Какой протокол отвечающий за сеть? Какое железо отвечающие за сеть, как соединён с ардуино?
Приветствую.
Есть много устройств на ардуининах и стоят они у заказчика на объёктах. Часть устройст находятся в таких местах, что добраться до них это ещё тот квест. Устройства кастомизированные и иногда приходится обновлять на них прошивки. Боль. У каждого из этих устройств есть на борту Lan и свой протокол общения с ПК. На текущий момент уже невозможно ничего аппаратно передалать.
1)изменить бутлоадер для возможности писать в flash (там где лежит основная прошивка, но рядом)
2)принять эту прошивку, через лан и записать в flash.
3)перезагрузиться перейдя по нулевому(?) адресу.
Возможно ли?
Еще раз перечитал ваш пост, если я правильно понял, (не имея физического доступа к контроллеру) вы хотите из под основной прошивки перепрошить бутлоадер(Ардуино) ,принимая пакеты по сети, затем что бы он(новый бутлоадер) в будущем по сети мог перепрошивать основную прошивку?
1) Свой кастомный протокол (по UDP), но штука в том, что места для прошивку в ОЗУ не хватит и придется писать частями в flash собирая полностью прошивку из кусков.
2)соединён по SPI c чипом w5500. Да, есть в инете вариант писать прошивку, через эту комбинацию, но так поступать не очень хочется. Дополнительный софт устанавливать на стороне клиета не желательно.
3)Есть уже ПО на стороне ПК, которое общается с этими железками. Желательно ему скормить новую прошивку, которую он частями передаст в ардуинину, а та уже увидит, что прошивка новая приехала и себе её поставит.
Приветствую.
Есть много устройств на ардуининах и стоят они у заказчика на объёктах. Часть устройст находятся в таких местах, что добраться до них это ещё тот квест. Устройства кастомизированные и иногда приходится обновлять на них прошивки. Боль. У каждого из этих устройств есть на борту Lan и свой протокол общения с ПК. На текущий момент уже невозможно ничего аппаратно передалать.
1)изменить бутлоадер для возможности писать в flash (там где лежит основная прошивка, но рядом)
2)принять эту прошивку, через лан и записать в flash.
3)перезагрузиться перейдя по нулевому(?) адресу.
Возможно ли?
Прошить я могу. Сейчас часть устройств находится в моём городе (хоть и доступ к ним затруднён), я их могу прошивать, но скоро, на новом объёкте (в другом городе), физического доступа к ним не будет. И подготовиться к этому хочется заранее.
Слова ардуина - игрушка для хоби - и объект в другом городе звучат сюрреалистично в одной строке...
Слова ардуина - игрушка для хоби - и объект в другом городе звучат сюрреалистично в одной строке...
В промышленных решениях кремний в контроллерах другой? Стеклотекстолит девственницы в недрах мордора делают?
Единственное с чем действительно сталкивался - плохо помытые платы, которые через некоторое время начинают глючить. Теперь всегда мою платы в ультрозвуковой ванне вместе с изопропиловым спиртом и покрываю лаком. Полёт нормальный.
1) Свой кастомный протокол (по UDP), но штука в том, что места для прошивку в ОЗУ не хватит и придется писать частями в flash собирая полностью прошивку из кусков.
2)соединён по SPI c чипом w5500. Да, есть в инете вариант писать прошивку, через эту комбинацию, но так поступать не очень хочется. Дополнительный софт устанавливать на стороне клиета не желательно.
3)Есть уже ПО на стороне ПК, которое общается с этими железками. Желательно ему скормить новую прошивку, которую он частями передаст в ардуинину, а та уже увидит, что прошивка новая приехала и себе её поставит.
То есть, что бы было все ясно, у вас будет физический доступ к контроллерам, в т.ч для того что бы их перепрошить и вы хотите добавить функционал удалённого обновления для будущих версий основной прошивки?
Бутлоадер, это по сути самостоятельная прошивка, которая сидить во флеш памяти(в другой области) как и основная прошивка. Просто после того как бутлоадер "отрабатывает" - обновляет основную прошивку или нет, он передаёт управление основной прошивке
Да это возможно, но надо учесть "пару ньансов" :
-в будущую основную прошивку, в сетевой протокол надо будет добавить команду "есть новая версия" для того что бы основная прошивка передала управление бутлоадеру.(тут несколько вариантов)
-бутлоадер должен, в себе реализовать ваш протокол (хотябы частично, на уровне запросить/принять/проверить целостность пакета(а сам протокол "сидит" над socket.h/socket.c который "сидит" над W5500.h/w5550.c драйверами). Так же поскольку протокол UDP, то и черёдность, и целостность принимаемых данных на ответственности бутлоадера).
-в W5500 16 KB оперативки в буферах приёма, так что можно пользоваться. (емнип в atmega328p всего 32KB flash)
-Далее, бутлоадер "стучиться на сервер", запрашивает прошивку и сервер ему выдаёт.. Тоже по идее на сервере должен быть протокол который будет понимать что от него "хочет" бутлоадер, который будет выдавать пакеты только если предыдущие дошли и прошлись успешно(в случае UDP).
Бутлоадер будет делать unlock прошиваемым областям памяти и "шить" попакетно.. То есть в бутлоадере должен быть реализован интерфейс доступа ко внутренней flash памяти контроллера.
-смотреть как пишутся бутлоадеры(в частности как производиться доступ к flash памяти) и как переносится таблица прерываний основной программы, в зависимости от размера бутлоадера(я не в курсе, в atmega328p просто линейно или секторно или ещё как)
И ещё есть вариант, но я его видел когда всколзь читал datasheet на atmega328p, есть такая фишка read while write.. Не читал, не знаю.. Но это тоже может быть вариантом к "самопереписи" прошивки.
К кремнию и текстолиту претезний, как раз и нет. А вот железные контакты разъемов с покрытием "под золото", которые китайцы запаивают в ардуины -- это такое отложенное харакири.