drozel 0 2 октября, 2015 Опубликовано 2 октября, 2015 (изменено) · Жалоба Третий день в голове крутится идея. Прошелся поиском по форуму, понял, что эту мысль несколько раз тут осторожно высказывали, но никаких выводов за/против я не увидел. Итак: Сделать свой загрузчик, который при загрузке проверяет условие, например состояние ноги. Если выбрана простая загрузка - передает управление по адресу с основной прошивкой. А если нет, инициализирует USB Mass Storage. В системе появляется накопитель с текущей прошивкой (данные по конкретному адресу флеш). Запись нового файла ведет к перезаписи содержимого флеш. Можно организовать настройку - только запись, это уже нюансы. Теперь про сложности, которые я увидел: 1) Нужна ФС. Или ее эмуляция. FATFS, которую STM поставляет с Cube занимает около 20кб флеша, что для загрузчика многовато. Хотя, можно и пережить 2) Непонятно, как заставить ФС напрямую превратить последовательный блок данных в файл, чтоб он был виден на ПК. Тут есть решение в виде эмулятора ФС, но он read only. 3) ОС может жонглировать секторами и писать прошивку не сплошным потоком. Хотя, это решаемо, если использовать FATFS и писать в промежуточную область памяти, а после записи копировать файл функциями ФС. Минус - Надо в 2 раза больше флеша, размер прошивки уменьшается. Предлагаю обсудить, насколько проблема решаема? Может быть, кто-то реализовал? Просьба не тыкать в DFU, программатор и т.д. На мой взгляд, решение красивое, кроме прошивки можно отображать в виде файлов другие данные, например инженерный конфиг. Тут скорее спортивный интерес: другие варианты загрузчика решаются куда проще. Изменено 2 октября, 2015 пользователем drozel Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 2 октября, 2015 Опубликовано 2 октября, 2015 · Жалоба 2) Непонятно, как заставить ФС напрямую превратить последовательный блок данных в файл, чтоб он был виден на ПК. Тут есть решение в виде эмулятора ФС, но он read only. Это как раз понятно. Зная устройство FATFS, несложно слепить таблицу FAT так, чтобы она указывала на прошивку как на сплошной файл. 3) ОС может жонглировать секторами и писать прошивку не сплошным потоком. Хотя, это решаемо, если использовать FATFS и писать в промежуточную область памяти, а после записи копировать файл функциями ФС. Минус - Надо в 2 раза больше флеша, размер прошивки уменьшается. Достаточно перетасовать секторы, чтобы они шли по порядку (как бы дефрагментация). Для этого не нужно в 2 раза больше флеша. Достаточно буфера в ОЗУ размером с сектор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
drozel 0 2 октября, 2015 Опубликовано 2 октября, 2015 · Жалоба Зная устройство FATFS, несложно слепить таблицу FAT так Не совсем корректно выразился: я не увидел, как заставить сделать это FatFS с помощью ее внешнего интерфейса. Хотя вы правы, можно самому задефайнить таблицу и примонтировать ее в FatFS. Достаточно перетасовать секторы, чтобы они шли по порядку (как бы дефрагментация) А вот об этом я не подумал, спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 2 октября, 2015 Опубликовано 2 октября, 2015 (изменено) · Жалоба Предлагаю обсудить, насколько проблема решаема? Может быть, кто-то реализовал? Сначала подумал, что обновление прошивки с флехи, воткнутой в хост контроллера, но потом понял, что девайс нужно подключать к компу, он увидится флешкой и надо переписывать туда новую прошивку.. Вопрос - нафига это нужно вообще, в принципе не понимаю, народ так упорно использует для перепрошивки компы, когда можно обойтись обычной флешкой... Вот зачем? :rolleyes: ЗЫ. Еще могу понять это, когда в МК нет хоста, но как правило, он есть уже почти везде. Сорри за оффтоп, если чего :laughing: Изменено 2 октября, 2015 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
drozel 0 2 октября, 2015 Опубликовано 2 октября, 2015 · Жалоба народ так упорно использует для перепрошивки компы, когда можно обойтись обычной флешкой... Ну так зависит от типа устройства. Если оно - хост и имеет USB AF, то логично прошивать его с флешки. А если оно в обычной жизни - девайс, то какой смысл воротить из него хост и вешать порт для флешки? Кстати, как вообще сделать 2 USB порта на 1 МК? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 2 октября, 2015 Опубликовано 2 октября, 2015 · Жалоба Кстати, как вообще сделать 2 USB порта на 1 МК? Никак, если есть только один, или мудрить работу с хабами. А если оно в обычной жизни - девайс, то какой смысл воротить из него хост Подавляющее число раз, это были железки либо с хостом или была СД-карта, с которой так-же прекрасно перешивается мк :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
drozel 0 2 октября, 2015 Опубликовано 2 октября, 2015 · Жалоба Подавляющее число раз, это были железки либо с хостом или была СД-карта, Само собой, если бы был хост или карты, такая идея бы не возникла) Кстати, раз уж про карту заговорили: для считывания файла с карты ведь также нужна ФС на МК? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 2 октября, 2015 Опубликовано 2 октября, 2015 · Жалоба как бы хорошо было, если бы вдруг от дома провести подземный ход или чрез пруд выстроить каменный мост, на котором бы были по обеим сторонам лавки, и чтобы в них сидели купцы и продавали разные мелкие товары, нужные для крестьян. Вот, на русском и с картинками (но без кода): http://easyelectronics.ru/proshivka-arm-co...-i-lpc1300.html Вот готовая read-only библиотека: http://geektimes.ru/post/254788/ (качество, правда, не смотрел). Слова "Cube" и "FatFs" предлагаю забыть, взять большой напильник для этого emfat'а и сделать свой велосипед. PS помнится мне, что ST уже сделала это в последней версии ST-Link'а. Где я это прочитал и где исходники - забыл... можно обойтись обычной флешкой... Вот зачем? :rolleyes: ЗЫ. Еще могу понять это, когда в МК нет хоста, но как правило, он есть уже почти везде. У нас в одном изделии так и есть. Понимание "почему так мало кто делает" наступает при попытках написать работоспособный хост. Желательно ещё и компактный (загрузчик же!). У ST'шников в их StdLib получилось плохо. Правда, при обвешивании костылями как-то работает... Не совсем корректно выразился: я не увидел, как заставить сделать это FatFS с помощью ее внешнего интерфейса. Абсолютно никак. FatFs - библиотека для обращения к файлам на внешнем носителе (флешка, карточка, NAND - да что угодно!). А тут надо решать обратную задачу: эмулировать носитель для "внешнего" устройства - ПК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
drozel 0 2 октября, 2015 Опубликовано 2 октября, 2015 (изменено) · Жалоба А тут надо решать обратную задачу: эмулировать носитель для "внешнего" устройства - ПК. Неужели нет готовых библиотек? Не в том плане, что мне лень сделать, просто у меня сложилось впечатление, что на STM32 уже написали все, что можно Изменено 2 октября, 2015 пользователем drozel Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 2 октября, 2015 Опубликовано 2 октября, 2015 · Жалоба Есть готовый эмулятор флешки - от ST (плохого, на мой взгляд, качества. но работает) и от libopencm3 (качество получше, код можно читать без мата). Есть эмулятор файловой системы (см. ссылку выше); без него операционка на ПК предложит этот диск отформатировать. Напильник для доработки файловой системы и рулон изоленты, чтобы всё это собрать - с Вас, я готовых решений в открытом доступе не знаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 2 октября, 2015 Опубликовано 2 октября, 2015 · Жалоба Само собой, если бы был хост или карты, такая идея бы не возникла) Кстати, раз уж про карту заговорили: для считывания файла с карты ведь также нужна ФС на МК? Само собой, или как вы предлагаете файлы читать :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
YAM 0 4 октября, 2015 Опубликовано 4 октября, 2015 · Жалоба Все уже реализовано, например тут в 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 ;) Давать читать прошивку не будем. В записи сектора если запись в FAT или DIR - пишем себе в ОЗУ, иначе пишем в сектора приложения. Операционка всегда (что windows, andoid...) пишет файл последовательно... Весь boot у меня занимает 12288 байт... Я конечно тут умолчал о том, что прошивка-то пишется зашифрованная и сначала сектора расшифровываются, а потом уже пишутся в область приложения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
drozel 0 5 октября, 2015 Опубликовано 5 октября, 2015 · Жалоба Все уже реализовано, например тут в YAM-TOUCH-CAP-V1A Спасибо за наводку, сейчас буду разбирать. Скажите, что будет в случае удаления файла с "носителя"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
YAM 0 5 октября, 2015 Опубликовано 5 октября, 2015 · Жалоба Спасибо за наводку, сейчас буду разбирать. Скажите, что будет в случае удаления файла с "носителя"? А ничего не будет ;) Так как удаление происходит чисто для фенечки ;), т.е. для ОС, то при перезагрузке стартанет приложение (если с его CRC все в порядке). p.s. А вот если начали писать файл и выдернули - то, соответственно CRC у приложения будет битой и девайс все время будет флэшкой пока не запишут корректно прошивку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 5 октября, 2015 Опубликовано 5 октября, 2015 · Жалоба Третий день в голове крутится идея. Прошелся поиском по форуму, понял, что эту мысль несколько раз тут осторожно высказывали, но никаких выводов за/против я не увидел. Именно так, собственно говоря, работает перепрошивка ST/Link'ов, которые там на всяких Discovery платах сидят. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться