Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32 - смена прошивки пользователем через USB
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
ArtDenis
Приветствую. Сейчас думаю над тем как пользователь будет обновлять прошивку у прибора. Пока что планируется просто воспользоваться встроенным загрузчиком, который умеет заливать прошивку через протокол USB DFU. Насколько это удачный подход? Что кроме этого используется для обновления прошивок у STM32?
kovigor
Цитата(ArtDenis @ Apr 26 2015, 19:17) *
Насколько это удачный подход? Что кроме этого используется для обновления прошивок у STM32?

Можно, например, реализовать Mass-Storage устройство и копировать в него новую прошивку в виде файла. Защита прошивки - посредством CRC32. Я так делал на ARM7.
Еще вариант - реализовать CDC и терминалкой по X-Modem'у передавать в МК новую прошивку. Этот вариант, ИМХО, наилучший. Если же у прибора есть COM - порт, то и USB CDC не нужен, просто используйте имеющийся порт ...
smalcom
Цитата
воспользоваться встроенным загрузчиком

инструкция с картинками и у пользователей не возникает сложностей по использованию как USB DFU так и обычного способа через FlashDemo
ArtDenis
kovigor, как-то это всё сложно для обычного пользователя. И com-порта у устройства нету. Как и у большинства современных компьютеров. Поэтому тема называется "смена прошивки пользователем через USB"

smalcom, инструкция с картинками? Я планирую высылать пользователю exe-шник, который будет устанавливать USB-драйвер для DFU-устройства, подключаться к устройству, переводить его в загрузчик и автоматически прошивать. Думаю, в противном случае пользователи просто взбунтуются ))
aaarrr
По-моему, если устраивает встроенный загрузчик, то стоит его и использовать - он во всяком случае никуда не денется.
A. Fig Lee
Цитата(ArtDenis @ Apr 27 2015, 04:32) *
kovigor, как-то это всё сложно для обычного пользователя. И com-порта у устройства нету. Как и у большинства современных компьютеров. Поэтому тема называется "смена прошивки пользователем через USB"

smalcom, инструкция с картинками? Я планирую высылать пользователю exe-шник, который будет устанавливать USB-драйвер для DFU-устройства, подключаться к устройству, переводить его в загрузчик и автоматически прошивать. Думаю, в противном случае пользователи просто взбунтуются ))


Что сложно? Скопировать присланный файл на диск?
2. Com-порта нет? Вы ничего про преобразователи/переходники FT232 например, не слышали?
Как по вашему, сейчас компьютеры подсоединяются к com портам?

Мне кажется, у вас ничего не получится.
ArtDenis
A. Fig Lee, если пользователю, чтобы перепрошить устройство, нужно покупать переходник USB-COM, то что же в этом хорошего? И зачем это вообще нужно, есть уже есть USB. Да и тема называется "смена прошивки пользователем через USB". Мне интересно, что применяют именно для прошивки через USB максимально простым для пользователя способом.
A. Fig Lee
Цитата(ArtDenis @ Apr 27 2015, 07:44) *
A. Fig Lee, если пользователю, чтобы перепрошить устройство, нужно покупать переходник USB-COM, то что же в этом хорошего? И зачем это вообще нужно, есть уже есть USB. Да и тема называется "смена прошивки пользователем через USB". Мне интересно, что применяют именно для прошивки через USB максимально простым для пользователя способом.


Да никто о покупать вообще речи не ведет. Как можно рассуждать о смене прошивки имея настолько мало знаний?
Причем в элементарнейшей области?
Даже тыкая вас в решение проблемы, вы его в упор не видите.
ArtDenis
A. Fig Lee, т.е. прошивка пользователем приборе на STM32 через FT232 - это самый надёжный и проверенный метод, я так понимаю, с твоих слов? Или имеется ввиду другое решение проблемы?
Если я что-то не понимаю, ткни ещё раз носом biggrin.gif

Да, на всякий случай уточню. Имеется ввиду прошивка через встроенный в STM32 USB
HardEgor
Цитата(ArtDenis @ Apr 27 2015, 20:17) *
Да, на всякий случай уточню. Имеется ввиду прошивка через встроенный в STM32 USB

Да, это самый удобный способ, но не самый надежный за счет большей сложности загрузчика, и следовательно повышенной вероятности ошибки в нём.
В порядке убывания надежности и увеличения удобности:
- самый надежный через JTAG/SWD, но требует программатор/отладчик
- менее надежный через RS232-порт, но требует наличия на компьютере RS323-порта(или преобразователь USB-RS232 )
- еще менее надежный через USB, требует на компьютере USB-порт
A. Fig Lee
Цитата(ArtDenis @ Apr 27 2015, 10:17) *
A. Fig Lee, т.е. прошивка пользователем приборе на STM32 через FT232 - это самый надёжный и проверенный метод, я так понимаю, с твоих слов? Или имеется ввиду другое решение проблемы?
Если я что-то не понимаю, ткни ещё раз носом biggrin.gif

Да, на всякий случай уточню. Имеется ввиду прошивка через встроенный в STM32 USB


1. Да. просто потому, что загрузчик РОМ уже там и никуда не денется. Но так ты хочешь УСБ, то это к тебе не относится.
2. Ладно, вот тебе азы по УСБ. УСБ бывает разных классов и твой микроконтроллер, хотя и соединен по УСБ, может прикинутся портом
RS232. Для этого тебе не надо ничего покупать кроме шнурка УСБ для подключения. Но он видать и так есть.
В общем имплементируй CDC класс USB на своем микроконтроллере. И делай бутлоадер.

Или имплементируй другой класс, масс сторадж, тогда при втыкании твоего дивайса появится харддрайв в виндоус, скопируешь туда файл и все.
ArtDenis
Цитата(A. Fig Lee @ Apr 28 2015, 15:14) *
1. Да. просто потому, что загрузчик РОМ уже там и никуда не денется. Но так ты хочешь УСБ, то это к тебе не относится.

А можно поподробнее про выделенное? Может я чего-то не понимаю?
A. Fig Lee
Цитата(ArtDenis @ Apr 28 2015, 06:34) *
А можно поподробнее про выделенное? Может я чего-то не понимаю?

Да, ошибся. Забыл за эти дни подробности о чем речь.
USB и собственный бутлоадер для пользователя удобней чем встроенный РОМ. Но встроенный надежней
ArtDenis
A. Fig Lee, вообще-то встроенный в ROM загрузчик умеет прекрасно прошивать как через UART, так и через "родной" USB по протоколу DFU
A. Fig Lee
Цитата(ArtDenis @ Apr 28 2015, 06:52) *
A. Fig Lee, вообще-то встроенный в ROM загрузчик умеет прекрасно прошивать как через UART, так и через "родной" USB по протоколу DFU


У всех STM32? И которые не connectivity line, STM32F103, например?

http://www.st.com/web/en/resource/technica.../CD00264379.pdf
esaulenka
Цитата(A. Fig Lee @ Apr 28 2015, 16:07) *
У всех STM32? И которые не connectivity line, STM32F103, например?

У топикстартера - может, о чём написано в первом же сообщении темы. Учитесь читать.
ArtDenis
Цитата(A. Fig Lee @ Apr 28 2015, 18:07) *
У всех STM32? И которые не connectivity line, STM32F103, например?

Ну ёлки-палки. В первом же сообщении я написал, что собираюсь прошивать его через USB-DFU. Значит я выбрал такой МК, который его поддерживает.

Вопрос в другом. Какие ещё способы, существуют для прошивки через родной USB?

Тут мне посоветовали писать самому загрузчик. Этот вариант хорош тем, что можно передавать пользователю зашифрованную прошивку, а при передаче уже в самом устройстве расшифровывать и прошивать. Так можно защитится от того, чтобы китайцы не скопировали прошивку с такой же лёгкость как два пальца wink.gif Но меня этот аспект не особо волнует. Я не думаю, что мой девайс заинтересует китайцев. Да и писать самому загрузчик не охота.

С другой стороны, если загрузчик выглядит как съёмный диск, на который можно заливать прошивку, то это большой плюс, т.к. избавляет меня, как разработчика, от того, чтобы поставлять с прошивкой дрова для подключения к устройству для прошивки. И для пользователя процесс заливки прошивки очень наглядный. Это плюс данного подхода. Но если прошивка пошла неудачно, то скорее всего у пользователя будет кирпич, который можно будет восстановить только при помощи заливки прошивки другими способами.

Вот я и спрашиваю совета, как участники форума решают эту проблему. Может есть уже проверенный загрузчик, который можно задействовать в своём проекте?
A. Fig Lee
USB mass storage это слишком сложно для пользователя, а COM порта нет. Так что других вариантов нет.


Цитата(esaulenka @ Apr 28 2015, 09:22) *
У топикстартера - может, о чём написано в первом же сообщении темы. Учитесь читать.


Ну вы тоже учитесь читать. У топик стартера семь пятниц на неделе, много чего сказано и все ему не подходит.
AHTOXA
Цитата(ArtDenis @ Apr 28 2015, 18:43) *
С другой стороны, если загрузчик выглядит как съёмный диск, на который можно заливать прошивку, то это большой плюс, т.к. избавляет меня, как разработчика, от того, чтобы поставлять с прошивкой дрова для подключения к устройству для прошивки. И для пользователя процесс заливки прошивки очень наглядный.

У новых отладочных плат STM-NUCLEO такой способ прошивки. При его подключении в системе появляется съёмный диск, при записи на этот диск прошивки она заливается в целевой контроллер. Действительно, очень удобно.
Цитата(ArtDenis @ Apr 28 2015, 18:43) *
Но если прошивка пошла неудачно, то скорее всего у пользователя будет кирпич, который можно будет восстановить только при помощи заливки прошивки другими способами.

Вовсе нет. Загрузчик-то никуда не денется. Так что пользователь просто повторит попытку, и всё.
aaarrr
Цитата(ArtDenis @ Apr 28 2015, 16:43) *
С другой стороны, если загрузчик выглядит как съёмный диск, на который можно заливать прошивку, то это большой плюс, т.к. избавляет меня, как разработчика, от того, чтобы поставлять с прошивкой дрова для подключения к устройству для прошивки. И для пользователя процесс заливки прошивки очень наглядный. Это плюс данного подхода. Но если прошивка пошла неудачно, то скорее всего у пользователя будет кирпич, который можно будет восстановить только при помощи заливки прошивки другими способами.

Тут есть еще может возникнуть проблема в совместимости эмулируемого диска. Скажем, у NXP есть такой загрузчик на LPC1343. Так вот, под Win он работает нормально, а под Linux'ом требуются некоторые телодвижения со стороны пользователя.

P.S. По мне, способ весьма неудобный. На LPC повсеместно отказался от него в пользу UART.
ArtDenis
Цитата(A. Fig Lee @ Apr 28 2015, 19:32) *
USB mass storage это слишком сложно для пользователя

Почему?


Цитата(AHTOXA @ Apr 28 2015, 19:36) *
У новых отладочных плат STM-NUCLEO такой способ прошивки. При его подключении в системе появляется съёмный диск, при записи на этот диск прошивки она заливается в целевой контроллер. Действительно, очень удобно.

А в NUCLEO съёмный диск разве эмулируется самим МК?

Цитата(AHTOXA @ Apr 28 2015, 19:36) *
Вовсе нет. Загрузчик-то никуда не денется. Так что пользователь просто повторит попытку, и всё.

Да. Но только если загрузчик сам себя не перезаписывает при прошивке. Хотя можно сделать так, чтобы не перезаписывал )
AHTOXA
Цитата(ArtDenis @ Apr 28 2015, 19:40) *
А в NUCLEO съёмный диск разве эмулируется самим МК?

У NUCLEO загрузчик отдельный, да. Но сам принцип смены прошивки, имхо, удобный - никаких драйверов, никакого софта на ПК.
Недостатки, естественно, тоже имеются. В частности, такой загрузчик может отъесть приличный кусок FLASH-памяти контроллера.
Цитата(ArtDenis @ Apr 28 2015, 19:40) *
Да. Но только если загрузчик сам себя не перезаписывает при прошивке. Хотя можно сделать так, чтобы не перезаписывал )

Не можно, а нужно! sm.gif
A. Fig Lee
Цитата(ArtDenis @ Apr 28 2015, 10:40) *
Почему?


see post #4 от ArtDenis.
ArtDenis
Цитата(A. Fig Lee @ Apr 28 2015, 20:18) *
see post #4 от ArtDenis.

Я там писал про прошивку через COM-порт
kovigor
Цитата(aaarrr @ Apr 28 2015, 17:36) *
Скажем, у NXP есть такой загрузчик на LPC1343. Так вот, под Win он работает нормально, а под Linux'ом требуются некоторые телодвижения со стороны пользователя.

Я все писал сам и лично проверял под Windows и под Linux. Все работало, как полагается. Кстати, как раз на LPC2148 ...
aaarrr
Цитата(kovigor @ Apr 28 2015, 19:45) *
Я все писал сам и лично проверял под Windows и под Linux. Все работало, как полагается. Кстати, как раз на LPC2148 ...

Ну, а у товарищей из NXP вот не вышло. Там есть еще один крайне неприятный баг, из-за которого устройство часто определяется с дикой задержкой. В общем, содержимое ROM LPC1343 разочаровывает в плане USB.
toweroff
Цитата(aaarrr @ Apr 28 2015, 20:28) *
Ну, а у товарищей из NXP вот не вышло. Там есть еще один крайне неприятный баг, из-за которого устройство часто определяется с дикой задержкой. В общем, содержимое ROM LPC1343 разочаровывает в плане USB.

OFF
не могли бы обрисовать проблему? решил как раз заложиться на этот камень
aaarrr
Цитата(toweroff @ Apr 29 2015, 11:02) *
OFF
не могли бы обрисовать проблему? решил как раз заложиться на этот камень

Проблема изложена в еррате: какая-то из переменных у них не обнуляется. Но это касается только встроенного загрузчика.

Если работать с USB напрямую, то все почти в порядке. Неприятных моментов два:
- Громоздкая "ручная" синхронизация при работе с регистрами USB
- Частоту ядра нельзя опускать ниже 24MHz
toweroff
Цитата(aaarrr @ Apr 29 2015, 11:12) *
Проблема изложена в еррате: какая-то из переменных у них не обнуляется. Но это касается только встроенного загрузчика.

Если работать с USB напрямую, то все почти в порядке. Неприятных моментов два:
- Громоздкая "ручная" синхронизация при работе с регистрами USB
- Частоту ядра нельзя опускать ниже 24MHz

спасибо, посмотрю еще раз на документы
минимальная частота в моем случае роли не играет - питание внешнее и некритичное к току
NikF
Цитата(ArtDenis @ Apr 28 2015, 18:40) *
Да. Но только если загрузчик сам себя не перезаписывает при прошивке. Хотя можно сделать так, чтобы не перезаписывал )

А он (встроенный загрузчик) разве не защищен от записи/стирания?
A. Fig Lee
Цитата(NikF @ Apr 29 2015, 14:20) *
А он (встроенный загрузчик) разве не защищен от записи/стирания?

Встроенный да. Он в ROM, его стереть нельзя.
Самодельный можно
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.