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

 
 
> 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
 
Start new topic
Ответов
YAM
сообщение Oct 4 2015, 17:09
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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   STM32. Свой загрузчик и прошивка через Mass storage   Oct 2 2015, 11:42
- - scifi   Цитата(drozel @ Oct 2 2015, 14:42) 2) Неп...   Oct 2 2015, 11:53
- - drozel   Цитата(scifi @ Oct 2 2015, 17:53) Зная ус...   Oct 2 2015, 12:00
- - mantech   Цитата(drozel @ Oct 2 2015, 14:42) Предла...   Oct 2 2015, 12:16
- - drozel   Цитата(mantech @ Oct 2 2015, 18:16) народ...   Oct 2 2015, 12:21
|- - mantech   Цитата(drozel @ Oct 2 2015, 15:21) Кстати...   Oct 2 2015, 12:24
- - drozel   Цитата(mantech @ Oct 2 2015, 18:24) Подав...   Oct 2 2015, 12:32
|- - mantech   Цитата(drozel @ Oct 2 2015, 15:32) Само с...   Oct 2 2015, 17:32
- - esaulenka   Цитатакак бы хорошо было, если бы вдруг от дома пр...   Oct 2 2015, 12:47
- - drozel   Цитата(esaulenka @ Oct 2 2015, 18:47) А т...   Oct 2 2015, 13:04
- - esaulenka   Есть готовый эмулятор флешки - от ST (плохого, на ...   Oct 2 2015, 13:39
|- - drozel   Цитата(YAM @ Oct 4 2015, 23:09) Все уже р...   Oct 5 2015, 04:33
|- - YAM   Цитата(drozel @ Oct 5 2015, 07:33) Спасиб...   Oct 5 2015, 05:52
- - KnightIgor   Цитата(drozel @ Oct 2 2015, 12:42) Третий...   Oct 5 2015, 08:58
- - drozel   А еще такой вот тупой вопрос: правильно я понимаю,...   Oct 5 2015, 10:42
|- - KnightIgor   Цитата(drozel @ Oct 5 2015, 11:42) Не пол...   Oct 5 2015, 13:12
||- - _Pasha   Цитата(KnightIgor @ Oct 5 2015, 16:12) Бе...   Oct 6 2015, 00:11
|- - YAM   Цитата(drozel @ Oct 5 2015, 13:42) А еще ...   Oct 5 2015, 14:49
|- - KnightIgor   Цитата(drozel @ Oct 5 2015, 11:42) А еще ...   Oct 5 2015, 18:36
||- - drozel   Цитата(KnightIgor @ Oct 6 2015, 00:36) по...   Oct 6 2015, 03:43
|- - kolobok0   Цитата(drozel @ Oct 5 2015, 13:42) .. что...   Oct 5 2015, 21:34
- - YAM   Что-то Вы плохо ужимаетесь, как я писал, под boot ...   Oct 6 2015, 09:44
- - drozel   Цитата(YAM @ Oct 6 2015, 15:44) как я пис...   Oct 6 2015, 09:49
- - YAM   Цитата(drozel @ Oct 6 2015, 12:49) Как я ...   Oct 6 2015, 09:56


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

 


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


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