|
Обновление прошивки через эзернет, Как сделать удобнее для пользователя, какой протокол? |
|
|
|
Aug 26 2015, 09:25
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Приветствую всех.
Делаю устройство, у которого основным каналом общения с пользователем будет эзернет. Не могу определиться, как лучше сделать обновление программы в нем. В устройстве есть еще RS-485, CAN, можно даже подцепиться к UART, но подключение компа к этим интерфейсам для обновления прошивки требует каких-то специальных переходников. В моем же случае устройство берет в руки обычный пользователь, у которого никаких переходников нет да и вообще не хотелось бы для обновления делать какие-то дополнительные подключения. Считаем, что устройство установлено в месте, доступ к которому затруднен. В предельном случае пользователь берет в руки устройство, в котором прошит только загрузчик, т.е. приложение в процессе обновления может и не участвовать (чуть ниже распишу). Оно может сохранить где-то свои сетевые настройки, при отсутствии которых загрузчик берет какой-то статический адрес по умолчанию, скажем 192.168.3.2 и я могу научить пользователя настроить свой комп для связи с этим адресом. А что дальше? Как красивее и удобнее организовать сам процесс обновления? Я делал множество устройств с обновлением через UART, RS-485 и USB (VCP), там у меня все давно отработано, но мне никогда не приходилось до этого делать обновления по эзернету. Вся имеющаяся у меня информация об обновлении через эзернет - это слухи с форумов. Поэтому надеюсь, что более опытные в этом вопросе коллеги направят меня в сторону нужного решения.
Начну с того, чего я не хочу: 1) я не хочу чтобы это устройство лазило куда-то за обновлениями само. Во-первых потому, что у меня нет сайта, куда я мог бы выкладывать обновления и я не имею желания такой сайт делать, поддерживать и содержать. Во-вторых, устройство может находиться в локальной сети не имеющей выхода в интернет. В-третьих - человек должен сам решать когда и, главное, на какую версию обновляться. 2) я не хочу, чтобы пользователю для обновления нужно было на свой компьютер устанавливать какой-то дополнительный сервер или программу-клиента, потому что неизвестно, какая ОС стоит у пользователя и найдется ли бесплатная программа под эту ОС. Тем более не хотелось бы писать никакую программу для компьютерной стороны. У всех есть браузер и хотелось бы ограничиться его возможностями.
Теперь чего хочу: 1) все это должно уместиться в первые сектора STM32F4xx, максимум 48К, поэтому полноценный сайт с апачем или полноценный ФТП-сервер развернуть там не удастся. Хотелось бы, чтобы пользователь попадал на страничку "бла-бла-бла, текущая версия такая-то, нажмите эту кнопку, чтобы выбрать у себя на компе файл обновления", а дальше как тут на форуме при прикреплении файлов к сообщению.
2) Запуск процесса обновления чаще всего будет происходить из работающего приложения, но при отсутсвии приложения (после сбоя обновления или сразу после производства) точно такой же запуск должен быть возможен и средствами самого загрузчика. Из этого вытекает, что загрузчик должен содержать весь минимально необходимый функционал, т.е. быть способным показать пользователю веб-страницу обновления.
3) Чтобы прошивка происходила в процессе передачи файла, то есть чтобы пользователь имел обратную связь и наблюдал на экране какую-то полосу с процентами. Поэтому не хочу, чтобы прошивка сначала сохранялась где-то, а потом загрузчик молча переписывал ее собствено в память контроллера.
4) Я пока очень смутно представляю, как работают веб-морды. Хочу разделить процесс выбора файла и процесс его передачи, т.е. чтобы вот эту страницу выбора файла мог показывать как загрузчик, так и приложение(пункт 1 хотелок), а после выбора файла посылался бы какой-то сигнал серверу, соединение бы закрывалось, контроллер сбрасывался, попадал в загрузчик в режим обновления и уже загрузчик ждал бы нового соединения от браузера с передачей собственно содержимого файла.
Вот такие вот у меня мысли. Странного ли я хочу? Какие еще варианты обновления вы встречали и находили удобными (мне очень хочется, чтобы процесс обновления был удобным). Что еще посоветуете, что раскритикуете?
********* На борту есть еще SD-карта. Можно было бы создать в ней отдельную директорию, в которую пользователь клал бы свежую прошивку. Класть можно как на компе со считываетем SD-карт, так и через веб-морду в основном приложении. И загрузчик вынимал бы версию прошивки из имен файлов в этой папке, находил самую свежую, сравнивал с текущей и при несовпадении переписывал бы приложение из этого файла. Откат на предыдущую версию сводится к удалению файла самой последней версии и перезагрузке. Вроде все выглядит достаточно красиво и этот вариант был бы, наверное, гораздо проще в реализации, но мне он не нравится по следующим причинам: 1) В процессе обновления нет обратной связи. Допустим, не понравился чем-то файл обновления загрузчику, а сказать чем именно не понравился ему некуда. 2) Для записи самой первой прошивки на карточку надо иметь считыватель. ******** Спасибо форуму. Пока формулировал это сообщение, хотелки стали понятны самому.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
Сергей Борщ Обновление прошивки через эзернет Aug 26 2015, 09:25 Lotor Цитата(Сергей Борщ @ Aug 26 2015, 12:25) ... Aug 26 2015, 09:36 _pv ни разу не знаток html
но страничка с кнопкой доба... Aug 26 2015, 09:53 AlexandrY Цитата(Сергей Борщ @ Aug 26 2015, 12:25) ... Aug 26 2015, 10:02 zltigo QUOTE (AlexandrY @ Aug 26 2015, 13:02) Эт... Aug 26 2015, 10:39  AlexandrY Цитата(zltigo @ Aug 26 2015, 13:39) Незач... Aug 26 2015, 10:43   zltigo QUOTE (AlexandrY @ Aug 26 2015, 13:43) Ис... Aug 26 2015, 11:00    AlexandrY Цитата(zltigo @ Aug 26 2015, 14:00) Не сп... Aug 26 2015, 11:05 SSerge У ST есть пара примеров в обычном для них стиле:
L... Aug 26 2015, 10:16 Aner 48 К памяти хватит, ... сделано, работает. Проблем... Aug 26 2015, 10:25 AlexandrY Цитата(Aner @ Aug 26 2015, 13:25) 48 К па... Aug 26 2015, 10:35 zltigo QUOTE (Сергей Борщ @ Aug 26 2015, 12:25) ... Aug 26 2015, 10:28 Aner QUOTE (zltigo @ Aug 26 2015, 13:28) Самое... Aug 26 2015, 11:10  zltigo QUOTE (Aner @ Aug 26 2015, 14:10) TFTP бе... Aug 26 2015, 11:15 Сергей Борщ не-не-не, не все так плохо. DHCP будет, но если у ... Aug 26 2015, 11:33 zltigo QUOTE (Сергей Борщ @ Aug 26 2015, 14:27) ... Aug 26 2015, 11:42 AlexandrY Цитата(Сергей Борщ @ Aug 26 2015, 14:27) ... Aug 26 2015, 11:42  zltigo QUOTE (AlexandrY @ Aug 26 2015, 14:42) До... Aug 26 2015, 12:01 zltigo QUOTE (Сергей Борщ @ Aug 26 2015, 14:33) ... Aug 26 2015, 11:50  AlexandrY По нынешним временам проще Wi-Fi использовать. Уви... Aug 26 2015, 11:59 _pv я так понимаю основная проблема со статическим адр... Aug 26 2015, 13:15 zltigo QUOTE (_pv @ Aug 26 2015, 16:15) но это в... Aug 26 2015, 16:00  _pv Цитата(zltigo @ Aug 26 2015, 23:00) Отроу... Aug 26 2015, 19:59   zltigo QUOTE (_pv @ Aug 26 2015, 22:59) и роутит... Aug 26 2015, 20:10    _pv Цитата(zltigo @ Aug 27 2015, 03:10) Тольк... Aug 27 2015, 07:14     zltigo QUOTE (_pv @ Aug 27 2015, 10:14) есть жел... Aug 27 2015, 08:46      Сергей Борщ Цитата(zltigo @ Aug 27 2015, 11:46) А вот... Aug 27 2015, 09:43       zltigo QUOTE (Сергей Борщ @ Aug 27 2015, 12:43) ... Aug 27 2015, 09:57       _Pasha Цитата(Сергей Борщ @ Aug 27 2015, 12:43) ... Oct 21 2015, 12:18        Сергей Борщ Цитата(_Pasha @ Oct 21 2015, 15:18) Белый... Oct 21 2015, 12:23 Quasar Что-то вы тут все усложняете со своими IP адресами... Aug 26 2015, 18:07 zltigo QUOTE (Quasar @ Aug 26 2015, 21:07) Что-т... Aug 26 2015, 18:42  Quasar Цитата(zltigo @ Aug 26 2015, 21:42) Что-т... Aug 26 2015, 20:26   zltigo QUOTE (Quasar @ Aug 26 2015, 23:26) Поэто... Aug 26 2015, 20:40 AlexandrY Цитата(Quasar @ Aug 26 2015, 21:07) Поско... Aug 27 2015, 04:37  Quasar Цитата(AlexandrY @ Aug 27 2015, 07:37) Да... Aug 27 2015, 05:37   AlexandrY Цитата(Quasar @ Aug 27 2015, 08:37) Но эт... Aug 27 2015, 05:59    zltigo QUOTE (AlexandrY @ Aug 27 2015, 08:59) Ко... Aug 27 2015, 06:14    Quasar Цитата(AlexandrY @ Aug 27 2015, 08:59) А,... Aug 27 2015, 06:33   Aner QUOTE (Quasar @ Aug 27 2015, 08:37) ... н... Aug 27 2015, 07:17 HardEgor Цитата(Сергей Борщ @ Aug 26 2015, 15:25) ... Aug 27 2015, 03:24 Сергей Борщ Цитата(HardEgor @ Aug 27 2015, 06:24) У в... Aug 27 2015, 07:11  AlexandrY Цитата(Сергей Борщ @ Aug 27 2015, 10:11) ... Aug 27 2015, 07:43   Quasar Цитата(AlexandrY @ Aug 27 2015, 10:43) О,... Aug 27 2015, 08:47    AlexandrY Цитата(Quasar @ Aug 27 2015, 11:47) То ес... Aug 27 2015, 10:31     Quasar Цитата(AlexandrY @ Aug 27 2015, 13:31) По... Aug 27 2015, 11:11      AlexandrY Цитата(Quasar @ Aug 27 2015, 14:11) Ну да... Aug 27 2015, 11:21       Quasar Цитата(AlexandrY @ Aug 27 2015, 14:21) Эт... Aug 27 2015, 11:51       zltigo QUOTE (AlexandrY @ Aug 27 2015, 14:21) Эт... Aug 27 2015, 12:12  HardEgor Цитата(Сергей Борщ @ Aug 27 2015, 13:11) ... Aug 27 2015, 10:42  A. Fig Lee Цитата(Сергей Борщ @ Aug 27 2015, 03:11) ... Aug 27 2015, 12:38 Mahagam делал подобное. только у меня лимит был в 64к кажи... Aug 27 2015, 11:19 Quasar Цитата(Сергей Борщ @ Aug 26 2015, 12:25) ... Aug 27 2015, 13:01 AlexandrY Кста, только что сделал Telnet по WiFi вот для это... Aug 27 2015, 14:05  zltigo QUOTE (AlexandrY @ Aug 27 2015, 17:05) Во... Aug 27 2015, 14:22 _Pasha Сервер обновлений с белым ip
На нем присутствует д... Oct 21 2015, 13:22 AlexandrY Цитата(_Pasha @ Oct 21 2015, 16:22) Серве... Oct 21 2015, 13:59  _Pasha Цитата(AlexandrY @ Oct 21 2015, 16:59) У.... Oct 21 2015, 14:03 Quasar Цитата(_Pasha @ Oct 21 2015, 16:22) Поско... Oct 25 2015, 21:23
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|