реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> STM32. Свой загрузчик и прошивка через Mass storage
drozel
сообщение Oct 2 2015, 11:42
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650



Третий день в голове крутится идея. Прошелся поиском по форуму, понял, что эту мысль несколько раз тут осторожно высказывали, но никаких выводов за/против я не увидел. Итак:

Сделать свой загрузчик, который при загрузке проверяет условие, например состояние ноги. Если выбрана простая загрузка - передает управление по адресу с основной прошивкой. А если нет, инициализирует USB Mass Storage. В системе появляется накопитель с текущей прошивкой (данные по конкретному адресу флеш). Запись нового файла ведет к перезаписи содержимого флеш. Можно организовать настройку - только запись, это уже нюансы.

Теперь про сложности, которые я увидел:
1) Нужна ФС. Или ее эмуляция. FATFS, которую STM поставляет с Cube занимает около 20кб флеша, что для загрузчика многовато. Хотя, можно и пережить
2) Непонятно, как заставить ФС напрямую превратить последовательный блок данных в файл, чтоб он был виден на ПК. Тут есть решение в виде эмулятора ФС, но он read only.
3) ОС может жонглировать секторами и писать прошивку не сплошным потоком. Хотя, это решаемо, если использовать FATFS и писать в промежуточную область памяти, а после записи копировать файл функциями ФС. Минус - Надо в 2 раза больше флеша, размер прошивки уменьшается.

Предлагаю обсудить, насколько проблема решаема? Может быть, кто-то реализовал?

Просьба не тыкать в DFU, программатор и т.д. На мой взгляд, решение красивое, кроме прошивки можно отображать в виде файлов другие данные, например инженерный конфиг. Тут скорее спортивный интерес: другие варианты загрузчика решаются куда проще.

Сообщение отредактировал drozel - Oct 2 2015, 11:44
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 2 2015, 11:53
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(drozel @ Oct 2 2015, 14:42) *
2) Непонятно, как заставить ФС напрямую превратить последовательный блок данных в файл, чтоб он был виден на ПК. Тут есть решение в виде эмулятора ФС, но он read only.

Это как раз понятно. Зная устройство FATFS, несложно слепить таблицу FAT так, чтобы она указывала на прошивку как на сплошной файл.

Цитата(drozel @ Oct 2 2015, 14:42) *
3) ОС может жонглировать секторами и писать прошивку не сплошным потоком. Хотя, это решаемо, если использовать FATFS и писать в промежуточную область памяти, а после записи копировать файл функциями ФС. Минус - Надо в 2 раза больше флеша, размер прошивки уменьшается.

Достаточно перетасовать секторы, чтобы они шли по порядку (как бы дефрагментация). Для этого не нужно в 2 раза больше флеша. Достаточно буфера в ОЗУ размером с сектор.
Go to the top of the page
 
+Quote Post
drozel
сообщение Oct 2 2015, 12:00
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650



Цитата(scifi @ Oct 2 2015, 17:53) *
Зная устройство FATFS, несложно слепить таблицу FAT так

Не совсем корректно выразился: я не увидел, как заставить сделать это FatFS с помощью ее внешнего интерфейса.
Хотя вы правы, можно самому задефайнить таблицу и примонтировать ее в FatFS.
Цитата(scifi @ Oct 2 2015, 17:53) *
Достаточно перетасовать секторы, чтобы они шли по порядку (как бы дефрагментация)

А вот об этом я не подумал, спасибо
Go to the top of the page
 
+Quote Post
mantech
сообщение Oct 2 2015, 12:16
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(drozel @ Oct 2 2015, 14:42) *
Предлагаю обсудить, насколько проблема решаема? Может быть, кто-то реализовал?


Сначала подумал, что обновление прошивки с флехи, воткнутой в хост контроллера, но потом понял, что девайс нужно подключать к компу, он увидится флешкой и надо переписывать туда новую прошивку..

Вопрос - нафига это нужно вообще, в принципе не понимаю, народ так упорно использует для перепрошивки компы, когда можно обойтись обычной флешкой... Вот зачем? rolleyes.gif
ЗЫ. Еще могу понять это, когда в МК нет хоста, но как правило, он есть уже почти везде. Сорри за оффтоп, если чего laughing.gif

Сообщение отредактировал mantech - Oct 2 2015, 12:20
Go to the top of the page
 
+Quote Post
drozel
сообщение Oct 2 2015, 12:21
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650



Цитата(mantech @ Oct 2 2015, 18:16) *
народ так упорно использует для перепрошивки компы, когда можно обойтись обычной флешкой...

Ну так зависит от типа устройства. Если оно - хост и имеет USB AF, то логично прошивать его с флешки.
А если оно в обычной жизни - девайс, то какой смысл воротить из него хост и вешать порт для флешки? Кстати, как вообще сделать 2 USB порта на 1 МК?
Go to the top of the page
 
+Quote Post
mantech
сообщение Oct 2 2015, 12:24
Сообщение #6


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(drozel @ Oct 2 2015, 15:21) *
Кстати, как вообще сделать 2 USB порта на 1 МК?


Никак, если есть только один, или мудрить работу с хабами.

Цитата(drozel @ Oct 2 2015, 15:21) *
А если оно в обычной жизни - девайс, то какой смысл воротить из него хост


Подавляющее число раз, это были железки либо с хостом или была СД-карта, с которой так-же прекрасно перешивается мк laughing.gif
Go to the top of the page
 
+Quote Post
drozel
сообщение Oct 2 2015, 12:32
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650



Цитата(mantech @ Oct 2 2015, 18:24) *
Подавляющее число раз, это были железки либо с хостом или была СД-карта,

Само собой, если бы был хост или карты, такая идея бы не возникла)
Кстати, раз уж про карту заговорили: для считывания файла с карты ведь также нужна ФС на МК?
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Oct 2 2015, 12:47
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата
как бы хорошо было, если бы вдруг от дома провести подземный ход или чрез пруд выстроить каменный мост, на котором бы были по обеим сторонам лавки, и чтобы в них сидели купцы и продавали разные мелкие товары, нужные для крестьян.


Вот, на русском и с картинками (но без кода):
http://easyelectronics.ru/proshivka-arm-co...-i-lpc1300.html

Вот готовая read-only библиотека:
http://geektimes.ru/post/254788/ (качество, правда, не смотрел).

Слова "Cube" и "FatFs" предлагаю забыть, взять большой напильник для этого emfat'а и сделать свой велосипед.


PS помнится мне, что ST уже сделала это в последней версии ST-Link'а. Где я это прочитал и где исходники - забыл...

Цитата(mantech @ Oct 2 2015, 15:16) *
можно обойтись обычной флешкой... Вот зачем? rolleyes.gif
ЗЫ. Еще могу понять это, когда в МК нет хоста, но как правило, он есть уже почти везде.


У нас в одном изделии так и есть.
Понимание "почему так мало кто делает" наступает при попытках написать работоспособный хост. Желательно ещё и компактный (загрузчик же!).
У ST'шников в их StdLib получилось плохо. Правда, при обвешивании костылями как-то работает...

Цитата(drozel @ Oct 2 2015, 15:00) *
Не совсем корректно выразился: я не увидел, как заставить сделать это FatFS с помощью ее внешнего интерфейса.

Абсолютно никак. FatFs - библиотека для обращения к файлам на внешнем носителе (флешка, карточка, NAND - да что угодно!). А тут надо решать обратную задачу: эмулировать носитель для "внешнего" устройства - ПК.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
drozel
сообщение Oct 2 2015, 13:04
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650



Цитата(esaulenka @ Oct 2 2015, 18:47) *
А тут надо решать обратную задачу: эмулировать носитель для "внешнего" устройства - ПК.

Неужели нет готовых библиотек?
Не в том плане, что мне лень сделать, просто у меня сложилось впечатление, что на STM32 уже написали все, что можно

Сообщение отредактировал drozel - Oct 2 2015, 13:05
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Oct 2 2015, 13:39
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Есть готовый эмулятор флешки - от ST (плохого, на мой взгляд, качества. но работает) и от libopencm3 (качество получше, код можно читать без мата).
Есть эмулятор файловой системы (см. ссылку выше); без него операционка на ПК предложит этот диск отформатировать.

Напильник для доработки файловой системы и рулон изоленты, чтобы всё это собрать - с Вас, я готовых решений в открытом доступе не знаю.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
mantech
сообщение Oct 2 2015, 17:32
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(drozel @ Oct 2 2015, 15:32) *
Само собой, если бы был хост или карты, такая идея бы не возникла)
Кстати, раз уж про карту заговорили: для считывания файла с карты ведь также нужна ФС на МК?


Само собой, или как вы предлагаете файлы читать rolleyes.gif
Go to the top of the page
 
+Quote Post
YAM
сообщение Oct 4 2015, 17:09
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 7-07-04
Из: Ukraine
Пользователь №: 291



Все уже реализовано, например тут в YAM-TOUCH-CAP-V1A
Берем любой пример Mass Storage, пишем свои функции чтения и записи сектора.
При заходе в boot проверяем CRC приложения или нажатие кнопки.
Если в CRC ошибка или нажата кнопка запускаем инициализцию USB mass устройства.
При этом выделяем в ОЗУ память для 3-х секторов: MBR FAT и DIR.
MBR составляем так, что у нас 512 байт на сектор, 2 сектора на кластер (это для STM32F103C8T6)
1 резервный сектор который и есть MBR, 1 сектор FAT и элементов в корневом каталоге 512/32=16,
скрытых секторов 0. В качестве серийного номера тома я беру серийный номер изделия.
Далее заполняем таблицу FAT исходя из размеров прошивки или не заполняем если CRC ошибочна.
Заполняем DIR (или не заполняем если CRC ошибочна) нужным Вам именем файла с указанием начального FAT и размера прошивки.
В имя я всегда добавляю версию приложения, чтобы по имени файла можно было понять с чем имеем дело.
Т.е., например "YAM-TOUCH-CAP-V1 Version 3_06.ldr" такое имя будет у версии 3.06.
Так-же в DIR я заполняю VOLUME, где указываю версию загрузчика.
В чтении сектора если номер сектора меньше 3 отдаем то, что у нас в ОЗУ, иначе отдаем все 0 wink.gif
Давать читать прошивку не будем.
В записи сектора если запись в FAT или DIR - пишем себе в ОЗУ, иначе пишем в сектора приложения.
Операционка всегда (что windows, andoid...) пишет файл последовательно...
Весь boot у меня занимает 12288 байт...
Я конечно тут умолчал о том, что прошивка-то пишется зашифрованная и сначала сектора расшифровываются, а потом уже пишутся в область приложения.


--------------------
Go to the top of the page
 
+Quote Post
drozel
сообщение Oct 5 2015, 04:33
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650



Цитата(YAM @ Oct 4 2015, 23:09) *
Все уже реализовано, например тут в YAM-TOUCH-CAP-V1A

Спасибо за наводку, сейчас буду разбирать.
Скажите, что будет в случае удаления файла с "носителя"?
Go to the top of the page
 
+Quote Post
YAM
сообщение Oct 5 2015, 05:52
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 7-07-04
Из: Ukraine
Пользователь №: 291



Цитата(drozel @ Oct 5 2015, 07:33) *
Спасибо за наводку, сейчас буду разбирать.
Скажите, что будет в случае удаления файла с "носителя"?

А ничего не будет wink.gif
Так как удаление происходит чисто для фенечки wink.gif, т.е. для ОС, то при перезагрузке стартанет приложение (если с его CRC все в порядке).

p.s. А вот если начали писать файл и выдернули - то, соответственно CRC у приложения будет битой и девайс все время будет флэшкой пока не запишут корректно прошивку.


--------------------
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Oct 5 2015, 08:58
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(drozel @ Oct 2 2015, 12:42) *
Третий день в голове крутится идея. Прошелся поиском по форуму, понял, что эту мысль несколько раз тут осторожно высказывали, но никаких выводов за/против я не увидел.

Именно так, собственно говоря, работает перепрошивка ST/Link'ов, которые там на всяких Discovery платах сидят.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th July 2025 - 22:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01502 секунд с 7
ELECTRONIX ©2004-2016