High-MEM USB-загрузочный загрузчик

JCW
Ср 28 октября 2015 г. 12:43
Я хотел бы заняться созданием загрузчика USB с использованием DFU, который находится в высокой памяти. Несколько примечаний:

* Тот же код будет работать с установленным загрузчиком и без загрузки
* Нет необходимости перемещать загрузочный вектор, может работать даже на Cortex M0 (если у них есть поддержка USB, очевидно)
* Он будет использовать вспышку 8 КБ, как и прежде, но с высокой конец флэш -памяти
* Повторное разбивание должно позаботиться о том, чтобы не стереть эту высокую память, и сохранить вектор сброса в неповреждении

Основной трюк состоит в том, чтобы изменить загруженный код в полете, перед прошивкой, чтобы вектор сброса сброса продолжал указывать на загрузочный загрузчик и спрятать исходное значение где-то еще (возможно, неиспользованный вектор прерывания), для загрузчик загрузки, чтобы прыгнуть, когда загрузка заканчивается, или когда новый код не загружается.

Я писал загрузчики раньше, в том числе один, используя этот трюк. Я никогда не работал с USB, хотя.

Основным преимуществом будет то, что это избегает создания разных изображений прошивки для различных механизмов загрузки. Мы можем продолжать использовать последовательный, ST-Link или BMP (отключение этого загрузчика), с тем же изображением прошивки приложений. Опять же, если этот USB-погрузчик наделен и используется на всех платформах O/S, я ожидаю, что он будет удобным для повседневного использования.

* Кто -нибудь попробовал этот подход?
* Это "STM32Duino-Bootloader" солидная отправная точка, чтобы заняться этим?
* Любые советы?

У меня много проблем с USB на Mac OSX, я хотел бы сделать это, но я также немного беспокоюсь о всех проблемах и возиться с загрузчиком Maple USB за последние несколько лет. Все еще пытаюсь выяснить, имеет ли это даже самый тонкий шанс на успех...

JCW
Ср 28 октября 2015 г. 12:50
Чтобы обойти текущий взрыв выбора PIN -контактов для USB, я предлагаю поместить эти значения в изображение прошивки таким образом, чтобы их можно было исправить и изменить в двоичном файле (например, рядом с уникальной идентификационной строкой)). Затем может быть создана двусторонняя видальная программа для каждого поддерживаемого варианта плотности памяти (и размер памяти, поскольку базовый адрес загрузчика отличается).

Для моих непосредственных потребностей я хочу сосредоточиться только на F103 средней плотности.

JCW
Ср 28 октября 2015 г. 13:17
HM, этот поток, вероятно, лучше в разделе «Bootloaders и ядер» (чувак, есть так много разделов!).

Rogerclark
Ср 28 октября 2015 г., 20:16
Мне нужно будет войти на свой компьютер в качестве администратора и переместить его в этом потоке, если хотите.

Я не совсем уверен, что вы имеете в виду в отношении загрузчика, работающего в оперативной памяти

Вам все равно понадобится что -то в нижней части Flash, чтобы получить код, чтобы прыгнуть по адресу оперативной памяти.

Как вы в первую очередь попадаете в оперативную память (копия из Flash ?)

Примечание о векторном таблице материал. Afik вам нужно будет обновить много вещей в векторной таблице, хотя, вероятно, просто добавить фиксированное число, но это не только добавление стека, в таблице есть множество векторов.

JCW
Ср 28 октября 2015 г., 20:29
Извините, я не имел в виду USB -загрузчик в оперативной памяти, но расположенный в верхней части флэш -памяти.
А низкий Сброс векторный вход всегда указывает на это высокое местоположение (я.эн. @56K или @120K, в части 64/128K соответственно).

Загрузчик может затем загрузить код приложения по адресу 0, изменяя вектор сброса на себя, прежде чем фактически прошивая его, чтобы он все еще сохранял управление на каждом сбросе.

Учитывая и без того высокое количество комбинаций сборки, это позволяет избежать необходимости в сборщике-vs-without-boot-загрузчике. Это также означает, что я могу сохранить изображения прошивки, которые будут работать в любом случае.

Я только изменяю запись сброса вектора. Остальное все еще указывает на приложение. Загрузчик загрузчика имеет свою собственную копию вектора прерываний, который используется во время работы, затем векторная база сбрасывается до 0 перед передачей управления в код приложения.

Рик Кимбалл
Ср 28 октября 2015 г. 20:41
JCW написал:Я не имел в виду USB -загрузчик в оперативной памяти, но расположенный в верхней части флэш -памяти.
Вход вектора с низким сбросом всегда указывает на это высокое местоположение (я.эн. @56K или @120K, в части 64/128K соответственно).

JCW
Ср 28 октября 2015 г. 20:53
Согласился с «настоящим отладчиком» - на самом деле, я очень доволен использованием командной строки и GDB сам.

Но это для ардуиноиш. Затем загрузочный загрузчик означает, что вы подключите USB-кабель, и вы не выходите: питание, загрузка, printf-debug и другие серийные связи на уровне приложения. Одно приложение (IDE), один кабель, одна плата.

Rogerclark
Ср 28 октября 2015 г., 8:54 вечера
Извини.

Так...

Вы планируете поместить загрузчик в верхнюю часть Flash, а также записать 2 вектора в основе Flash с вектором прыжков ПК и вектором SP.

Так что вам нужно что -то нужно в нижней части вспышки ?


КСТАТИ.Re: лучшим местом для начала текущего загрузчика...

Текущий загрузчик - это кто -то из эволюции из исходного загрузчика Maple, и был изменен несколько раз.

Из того, что я прочитал, обработка DFU не идеальна (хотя, кажется, работает для нас).

Таким образом, вам может быть лучше взглянуть на другие загрузчики DFU STM32 DFU.

Если вы планируете поддержать несколько семей процессоров, то есть, кроме F103, вам следует начать с STM32Cube MX, который является генератором кода ST.

Первоначально куб не поддерживал F103, но ST улучшил его около 6 месяцев назад.

Единственное предостережение заключается в том, что файлы линкера, сгенерированные Cube, имеют проблемную лицензию исходного кода. Мы считаем, что это контроль ST, так как все остальные коды имеют лицензию с открытым исходным кодом, но не файлы линкеров.
(Обратите внимание, они могли бы исправить это сейчас, так как я не обновляю свой куб в течение месяца или двух)

КСТАТИ. Куб использует новую стандартную периферическую либерацию HAL, а не исходный SPL. Поскольку HAL SPL довольно новый, вам нужно будет перенести вызовы SPL в версии HAL, если вы использовали более старый существующий код загрузчика с HAL SPL.


Я помню, как искал «STM DFU Bootloader» и нашел некоторые другие примеры. Но я не могу вспомнить, где они были, если бы они были хорошими :-( (Извини....)

JCW
Ср 28 октября 2015 г. 9:19 вечера
Так что вам нужно что -то нужно в нижней части вспышки ? Правильно, это нуждается в минимальном векторе загрузки в низкой MEM и загрузчике в высоком уровне MEM, чтобы запустить шарик. В другом проекте я просто загрузил изображение загрузчика загрузчика дважды - в низком, а также высоком мем. После этого Low Mem будет повторно сключен из загрузчика загрузки.

Я, вероятно, посмотрю на текущий загрузочный погрузчик - не хочу погрузиться слишком много энергии и времени в это. Спасибо за подсказку STM32Cube MX, хотя - выглядит интересно (еще больше для чтения и переваривания). Также есть Chibios, который имеет довольно широкое освещение STM µCS, в том числе серийный драйвер USB, который у меня был из коробки. Код драйвера находится в отдельном разделе HAL и, по -видимому, теперь может использоваться без необходимости использовать сам Chibios RTOS.

ОК, спасибо. Прежде всего, я посмотрю, смогу ли я получить текущий загрузочный погрузчик на любой из моих досок здесь (на Mac).
Пока что это ускользнуло от меня...

Rogerclark
Ср 28 октября 2015 г., 22:04
ОК, спасибо. Прежде всего, я посмотрю, смогу ли я получить текущий загрузочный погрузчик на любой из моих досок здесь (на Mac).
Пока что это ускользнуло от меня...
Текущий загрузчик легко восстановить

Просто поместите компилятор Arduino's Arm в свой путь, CD в папку STM32F1 и запустить <Тип доски>

эн.глин. Сделать клено-мини

Однако в вашем случае лучше всего задуматься, чтобы изменить конфигурацию для Maple_mini (посмотрите в конфигурации.h) и изменить штифт сброса (и, возможно, в каком направлении он переключается - так как я не могу вспомнить, как он находится на Maple Mini)

затем

сделать чистоту
Сделать клено-мини

Затем прошивайте файл Maple Mini Bin из папки Binary

JCW
Ср 28 октября 2015 г., 22:27
Woohoo - Спасибо!

Выбор Maple Mini (и используя GCC IDE I.с.о. мой по умолчанию 4.9.3 настройка) имела все значение.
Он загружается! После этого все еще немного (застрял, расследуя сейчас), но, эй, большой шаг вперед!

JCW
Чт 29 октября 2015 г. 9:57 утра
Вот мысль относительно всех кленоподобных плат с активной схемой управления D+ подтягиванием: как насчет того, чтобы все они ведут себя как общие, я.эн. Используя трюк PA12, а затем в каком-то центральном коде запуска или даже в пользовательской настройке () мы навсегда устанавливаем управляющий вывод, чтобы все время включить этот подтягивание?

Rogerclark
Чт 29 октября 2015 г. 10:47
Я думаю, это должно быть возможно

Я должен попробовать один из моих Maple Mini

Adafruit SSD1331 Spied Display

Пинота с функциями