DFU Bootloader в F4

victor_pv
Пн 21 августа 2017 г., 17:18
Поскольку у MCU STM32F4XX есть загрузчик DFU, включенный в ROM, я думаю о добавлении кода, поэтому, когда плата перезагружается, чтобы загрузить эскиз, он переходит в системный ПЗУ, чтобы показать в виде устройства DFU, а не просто сделать жесткий сброс.
Идея состоит в том, чтобы иметь возможность перезагружаться в DFU без использования PIN -кода Boot1 (если перезагрузка запускается через эскиз с использованием Magic Packet).
В настоящее время Libmaple F4 не реализует этого, просто делает трудный сброс:
https: // github.com/rogerclarkmelbourne/ ... ВКП.C#L290

Не уверен, что общее ядро ​​делает это, не посмотрел на это, но если это не так, мы должны быть в состоянии сделать это так же.
Я думаю о измененной версии этого кода:
https: // Сообщество.ул.com/thread/36971-H ... -STM32F417

Rogerclark
Пн 21 августа 2017 г., 21:26
Стив уже исследует это.

Я думаю, что я тоже опубликовал об этом.

Возможно, мы сможем переместить посты, разбросанные по всему форуму, на один центральный пост

Rogerclark
Вторник 22 августа 2017 г. 6:14
Я не могу перенести свой пост об этом.. (На самом деле я думаю, что случайно удалил его при попытке переместить)

Итак, вот ссылка на форум сообщества STM

https: // Сообщество.ул.com/thread/40238-s ... M-Software

Окончательный код, размещенный на этом сайте
// Enable wakeup pin bit. PWR_BASE->CR |= PWR_CSR_EWUP;

Стивестронг
Вторник 22 августа 2017 г. 6:41
Вот код, который я тестировал: Oct 19 12:11:15 ahull-T430 mtp-probe: checking bus 1, device 103: "/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2" Oct 19 12:11:15 ahull-T430 mtp-probe: bus: 1, device: 103 was not an MTP device Oct 19 12:11:17 ahull-T430 kernel: [165300.600993] usb 1-1.2: USB disconnect, device number 103 Oct 19 12:11:17 ahull-T430 kernel: [165300.798817] usb 1-1.2: new full-speed USB device number 104 using ehci-pci Oct 19 12:11:17 ahull-T430 kernel: [165300.892955] usb 1-1.2: New USB device found, idVendor=1eaf, idProduct=0004 Oct 19 12:11:17 ahull-T430 kernel: [165300.892959] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 Oct 19 12:11:17 ahull-T430 kernel: [165300.892960] usb 1-1.2: Product: Maple Oct 19 12:11:17 ahull-T430 kernel: [165300.892962] usb 1-1.2: Manufacturer: LeafLabs Oct 19 12:11:17 ahull-T430 kernel: [165300.893311] cdc_acm 1-1.2:1.0: ttyACM3: USB ACM device Oct 19 12:11:17 ahull-T430 mtp-probe: checking bus 1, device 104: "/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2" Oct 19 12:11:17 ahull-T430 mtp-probe: bus: 1, device: 104 was not an MTP device Oct 19 12:11:23 ahull-T430 kernel: [165306.488231] usb 1-1.2: USB disconnect, device number 104 Oct 19 12:11:23 ahull-T430 kernel: [165306.685953] usb 1-1.2: new full-speed USB device number 105 using ehci-pci Oct 19 12:11:23 ahull-T430 kernel: [165306.779441] usb 1-1.2: New USB device found, idVendor=1eaf, idProduct=0003 Oct 19 12:11:23 ahull-T430 kernel: [165306.779445] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 Oct 19 12:11:23 ahull-T430 kernel: [165306.779447] usb 1-1.2: Product: Maple 003 Oct 19 12:11:23 ahull-T430 kernel: [165306.779448] usb 1-1.2: Manufacturer: LeafLabs Oct 19 12:11:23 ahull-T430 kernel: [165306.779449] usb 1-1.2: SerialNumber: LLM 003 Oct 19 12:11:23 ahull-T430 mtp-probe: checking bus 1, device 105: "/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2" Oct 19 12:11:23 ahull-T430 mtp-probe: bus: 1, device: 105 was not an MTP device Oct 19 12:11:25 ahull-T430 kernel: [165308.279998] usb 1-1.2: USB disconnect, device number 105 Oct 19 12:11:25 ahull-T430 kernel: [165308.477682] usb 1-1.2: new full-speed USB device number 106 using ehci-pci Oct 19 12:11:25 ahull-T430 kernel: [165308.571839] usb 1-1.2: New USB device found, idVendor=1eaf, idProduct=0004 Oct 19 12:11:25 ahull-T430 kernel: [165308.571844] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 Oct 19 12:11:25 ahull-T430 kernel: [165308.571846] usb 1-1.2: Product: Maple Oct 19 12:11:25 ahull-T430 kernel: [165308.571848] usb 1-1.2: Manufacturer: LeafLabs Oct 19 12:11:25 ahull-T430 kernel: [165308.572195] cdc_acm 1-1.2:1.0: ttyACM3: USB ACM device

Rogerclark
Вторник 22 августа 2017 г. 7:31
Спасибо

КСТАТИ. Я знаю, что ты отлаживал код... Это работает ?

Стивестронг
Вторник 22 августа 2017 г. 9:30
Нет, я все еще борюсь с отладкой Eclipse для F4 (как представлено в другой теме).

Rogerclark
Вторник 22 августа 2017 г. 10:02
ХОРОШО
Возможно, кто -то, использующий ядро ​​HAL на F4, может попробовать его, чтобы доказать, что он работает

Rogerclark
Ср 23 августа 2017 г. 22:19
Виктор

Думая об использовании внутреннего загрузчика DFU F4, я вижу, что это может быть проблематичным, потому что на DFU нет тайм -аута, а также эскиз должен был работать отлично, чтобы он мог прыгнуть на загрузчик

В мае у всех нас возникнут проблемы, когда код сбои и т. Д., И в этом случае единственным вариантом было бы перемещать ссылки на прыжки и сброс нажатия

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

Я думаю, что нам нужно написать F4 версию загрузчика, вероятно, используя libopencm3.

Я видел какой -то код на китайском веб -сайте, где кто -то перенес загрузчик Maple Bootloader на F4, но это был один из тех сайтов, где вам приходилось заплатить небольшую плату за загрузку кода, и я ни за что я не давал неизвестного веб -сайта Сведения о моей кредитной карте !

victor_pv
Чт 24 августа 2017 г. 1:45
Я полагаю, что STM может иметь примечание загрузчика загрузчика с примером кода загрузчика для DFU. Мы, вероятно, могли бы принять это и изменить наше вкусный.
Я тоже думал о проблеме сбоя эскиза или что -то в этом роде, и мне нужно перезагрузить доску с помощью набора перемычки Boot1.

Rogerclark
Че 24 августа 2017 г. 2:55
Я не могу найти код STM для загрузчика, но я нашел загрузчик, написанный с использованием LiboPencm3 для F1
Репо говорит, что сборка F1 совместима с моим репо F1, что интересно

https: // github.com/devanlai/dapboot

Вероятно, стоит попробовать, и если это хорошо, посмотрите, можно ли его перенести на F4

Деван
Че 24 августа 2017 г., 7:27
Привет, Роджер,

Dapboot совместим только в том смысле, что он использует тот же смещение приложения, что и загрузчик STM32Duino, и использует те же значения регистра резервного копирования RTC, чтобы заставить загрузчик перечислять (если вам интересно, откуда эти магические значения...). Это не совсем совместим с обычным процессом загрузки STM32Duino.

Он имеет то же поведение, что и загрузчик DFU STM32F4, где он перечисляет только при запросе приложения или если правые выводы утверждаются при загрузке. Лично я предпочитаю это поведение, так как нет никакой задержки запуска, специфичной для ПК, чтобы бороться с.

Восстановление до загрузчика через перемычку после мигания плохого кода не является идеальным рабочим процессом, но это не так уж и плохо - не то, чтобы вам приходилось разбить аппаратный отладчик или серийный ключ или припаять какие -либо новые булавки/провода на свою доску. Я думаю, что использование USB DFU ROM Bootloader упростит поддержку, поскольку плата, готовые к принятию эскизов (при условии, что поставщики не отправляют платы F4 со случайной демонстрационной прошивкой).

Rogerclark
Чт 24 августа 2017 г. 7:41
Привет, Деван

Спасибо. Я думал, что узнал имя автора ;-)

Я думал, что смогу изменить ваш код, чтобы вести себя аналогично загрузчику Maple Bootloader

КСТАТИ. Ядро Libmaple в настоящее время не устанавливает регистры резервного копирования, поэтому компьютер должен быть готов быстро, так как загрузчик остается в DFU только на 1 секунду.
Когда на днях я отлаживал какой -то другой код, я расследовал установление магических чисел в резервном копировании, но я не заставил его работать в то время, и у меня не было времени отладить его.

Единственное изменение в вашем коде - всегда ввести DFU, но затем выйдет через 1 секунду и перейти к эскизу приложения, если налит эскиз (используя тот же код проверки от загрузчика Maple Bootloader)

Деван
Чт 24 августа 2017 г. 8:24
Это возможно, хотя потребуется разорвать некоторые функции, чтобы освободить место (в настоящее время у меня есть около 80 байтов). Я кратко изучил его совместимый некоторое время назад, но это начало выглядеть так, как будто это потребовало бы больше времени, чем я хотел бы потратить, так как я очень доволен своим нынешним рабочим потоком DFU-UTIL.

Для установки резервных регистров в последующей последовательности из Libmaple, код, который я использовал, был:
// Experimental current draw results typical values from my STM2F103R8T6 board, with the power and blink LEDs lit. // rcc_clk_init(RCC_CLKSRC_HSI, RCC_PLLSRC_HSE , RCC_PLLMUL_2); // 16MHz => 21 mA // rcc_clk_init(RCC_CLKSRC_HSI, RCC_PLLSRC_HSE , RCC_PLLMUL_9); // 72MHz => 48 mA // rcc_clk_init(RCC_CLKSRC_HSI, RCC_PLLSRC_HSE , RCC_PLLMUL_16); // 128MHz => 69 mA

Rogerclark
Че 24 августа 2017 г. 10:34
Спасибо, Деван

Интересно, что LiboPencm3 создает больший бинарник, чем загрузчик Maple.

Код резервного копирования регистров не является необходимым, так что это заставило бы немного места.

Спасибо

Роджер

Rogerclark
Пт 25 августа 2017 г. 9:50 вечера
Возможно, переносить загрузчик F1 в F4 также может быть вариантом, но я не знаю, насколько отличаются подсистемы USB F4 и F1.

victor_pv
Сб 26 августа 2017 2:27
Cubemx включает в себя пример DFU, и я вспомнил, что Крис Барр упомянул, что он использовал его, поэтому я пошел на его GitHub, и там он. Он внес несколько небольших модификаций, поэтому он работает больше похожим на тот, который мы используем на F1S (он ждет несколько секунд и перезагружается, он проверяет, если нагружен эскиз...)
Это уже сделано, и он использовал его с 446 и общим ядром (который следует тому же методу, что и Libmaple для перезагрузки).
Я уверен, что ему не нужно много, чтобы он запустил в других mcus. Нам также необходимо изменить метод перечисления USB на нашу (вытягивая USB -штифт), но эти изменения должны быть небольшими.
Я думаю, что, возможно, основные изменения в том, чтобы заставить его работать с несколькими F4 с различными размерами вспышки, но это, возможно, было принято уже в STM.

Вы видите какую -либо проблему при использовании кода STM? является частью Cubemx.
Я надеюсь, что Крис не возражает против использования своих кусочков, так как они маленькие изменения, но мы можем проверить с ним.
Это занимает около 16 КБ, что, я думаю, в порядке на F4, и может быть возможно оптимизировать его дальше.

Rogerclark
Сб 26 августа 2017 г., 3:07
Привет, Виктор

Я не вижу проблем с использованием куба. Afik его лицензия не слишком ограничивающая.

У вас есть ссылка на загрузчик Криса ?

К вашему сведению
Сегодня утром я построил загрузчик @Devan's Bootloader, но должен был сделать это на моей виртуальной машине Linux, так как в Windows он нуждается в MSYS, которого я в настоящее время не установил

Пса.
Как ни странно, я могу построить LiboPencm3 в BMP -репо в Windows без необходимости MSYS, и он использует LiboPEMCM3, но Blacksphere, должно быть, изменило процесс сборки на LiboPencm3, чтобы заставить его работать в Windows.. Но, к сожалению, версия BMP не работает с кодом @Davan's, так как в версиях API есть различия в версиях API

victor_pv
Сб 26 августа 2017 г. 3:26
Его кодированный здесь:
https: // github.com/chrissbarr/picoprint-bootloader

Он основан на 446, но я думаю, что код куба почти одинаковы для всех F4, так как использование и Flash работают одинаково.
Вы можете увидеть код, который он добавил в Main, чтобы управлять PIN -код USB Discovery, 3 секунды и т. Д.

fpistm
Сб 26 августа 2017 г., 6:41
К вашему сведению, DFU для F4 был реализован для Otto:
https: // github.com/arduino-org/arduino-cor-stm32f4

Чтобы войти в DFU, не нужно действие пользователя, установите config на 1200:
https: // github.com/arduino-org/arduino- ... _если.C#L261
Затем установите выделенный магический код на выделенном @:
https: // github.com/arduino-org/arduino- ... _если.C#L436
Наконец, во время init:
https: // github.com/arduino-org/arduino- ... дюймовый.CPP#170
Call EntersySrom:
https: // github.com/arduino-org/arduino- ... Srom.S#L11

Rogerclark
Сб 26 августа 2017 г., 7:00 утра
@fpstm

Спасибо

Я посмотрю на эти репо

victor_pv
Сб 26 августа 2017 г. 12:53
Но это загрузчик ROM, тот, который вы упомянули, который не будет тайм -аутом, и что в случае, если эскиз не работает (для установки волшебного слова), тогда пользователю придется использовать загрузочный вывод, чтобы получить доску Загрузите эскиз снова.
Это тот же метод, который я упомянул в первом посте.

logd32
Пт 22 декабря 2017 12:29
[fpistm - Сб 26 августа 2017 г. 6:41] - К вашему сведению, DFU для F4 был реализован для Otto:
https: // github.com/arduino-org/arduino-cor-stm32f4

Чтобы войти в DFU, не нужно действие пользователя, установите config на 1200:
https: // github.com/arduino-org/arduino- ... _если.C#L261
Затем установите выделенный магический код на выделенном @:
https: // github.com/arduino-org/arduino- ... _если.C#L436
Наконец, во время init:
https: // github.com/arduino-org/arduino- ... дюймовый.CPP#170
Call EntersySrom:
https: // github.com/arduino-org/arduino- ... Srom.S#L11
@fpistm
Был опробован какой -нибудь загрузчик или POC? Это использует загрузчик только для чтения ROM из ядра F3/F4?

fpistm
Сб 23 декабря 2017 г. 6:01
Для Отто это было функционально.
Да, нет выделенного загрузчика

Эдогальдо
Сб 23 декабря 2017 г. 7:51 утра
Привет всем, мне было интересно, достаточно ли этого, чтобы установить адрес системы загрузчика системы в обработчике сброса, чтобы сделать трюк.

Лучший & Счастливого Рождества, E.

logd32
Sun 24 декабря 2017 г. 15:34
@fpistm
Хорошо, спасибо, я проверил тот же меканизм на STM32F303, только заменив флаг SRAM от RTC Backup Register, поскольку F303CC не имеет резервного SRAM (так что он не работал, как есть), STM32F303 теперь сбрасывается на CDC 1200BPS Touch и может обнаружить DFU. режим после сброса.Тем не менее, у меня все еще есть проблема с прыжком в Bootlader (Sysrom.S), он попадает в использованиеффолт при достижении строки 19
https: // github.com/arduino-org/arduino- ... Srom.S#L19

IS SYSCFG_CFGR1 (+0x00), специфичный для STM32F4? Я не нашел никакой информации о том, как перейти во внутренний DFU Bootlaoder на STM32F303 в DataSheeT и DM00046982. Если у кого -то есть подсказка.

victor_pv
Sun 24 декабря 2017 г., 19:08
[Эдогальдо - Сб 23 декабря 2017 г. 7:51] - Привет всем, мне было интересно, достаточно ли этого, чтобы установить адрес системы загрузчика системы в обработчике сброса, чтобы сделать трюк.

Лучший & Счастливого Рождества, E.
Извините, я отредактировал пост Edogaldo по ошибке раньше, эта часть была моей:

Есть немного больше, чем это, вам нужно установить регистр NVIC VTOR, чтобы NVIC мог найти векторную таблицу.
Это видео показывает это и показывает пример кода, очень минимальный. Вы только что установите пару регистров и прыгаете на это:
https: // www.YouTube.com/watch?V = CVKC-4TCRGW

victor_pv
Sun 24 декабря 2017 г., 19:10
[logd32 - Sun 24 декабря 2017 г. 15:34] -
IS SYSCFG_CFGR1 (+0x00), специфичный для STM32F4? Я не нашел никакой информации о том, как перейти во внутренний DFU Bootlaoder на STM32F303 в DataSheeT и DM00046982. Если у кого -то есть подсказка.
Как правило, периферийные устройства F3 больше похожи на F1, чем F4. Он имеет ядро ​​Cortexm4, но с периферийными устройствами F1 (в основном), против F2, который имеет периферийные устройства F4 с корой M3, как F1.

Таким образом, регистр SYSCFG_CFGR1 может быть очень различным между F3 и F4, проверьте таблицу данных.