Загрузчик, импортируемый в компиляции SW4STM32, но застрял после USB_INIT

logd32
Вторник 05 декабря 2017 г., 17:00
Привет,
Я установил проект SW4STM32 из каталога BootLoader, так что он удобнее работать над ним, он собирает отличные, но, к сожалению, STM32 застрял на USB_INIT, как только USB NVIC настроен, если я прокомментирую USB NVIC Setup или или USB Весь usb_init, тогда DOE STM32 не застрял и не мигал светодиоды, как следует.
Я почти уверен, что это связано с конкретными флагами или настройками в Makefile, которые не воспроизведены в проекте SW4STM32, я попытался добавить несколько пропроцессорных флагов, но это не имело никакого эффекта, поэтому я их удалил. Тот же код, составленный с помощью MakeFile Works, и не застрял после настройки USB NVIC.
У кого -нибудь есть идея о том, что я должен попытаться сделать проект SW4STM32?
Проект SW4STM32
загрузчик.молния
(99.07 киб) скачано 23 раза

Рик Кимбалл
Вторник 05 декабря 2017 г., 17:08
SW4STM32 использует более новую версию ARM-None-Eabi-GCC, чем Arduino. Вы можете попытаться изменить оптимизацию на -O1 или даже -og или даже -O0 .. Предполагая, что это все еще подходит в первые 8K

logd32
Вторник 05 декабря 2017 г. 8:18 вечера
Спасибо за подсказку, я попробовал с GCC 4.8 предположительно поставляется с Xcode, но это не помогло. Я постараюсь найти, как использовать Arduino GCC вместо этого. Что касается оптимизаций, я уже установил -O0, я попробую 01. Да, это все еще вписывается в 8K

Изменить: afer a eck, текущая версия Arduino GCC - 4.8.3-2014Q1, я изменил свойства проекта, чтобы использовать этот GCC, он компилируется хорошо, но проблема сохраняется. Видимо, он по -прежнему используется из xcode, не уверен, что это имеет значение
Building target: bootloader.elf Invoking: MCU GCC Linker arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -mfloat-abi=soft -T"/Users/hoel/Documents/workspace/bootloader/LinkerScript.ld" -Wl,-Map=output.map -Wl,--gc-sections -o "bootloader.elf" @"objects.list" -lm Finished building target: bootloader.elf /Applications/Xcode.app/Contents/Developer/usr/bin/make --no-print-directory post-build Generating binary and Printing size information: arm-none-eabi-objcopy -O binary "bootloader.elf" "bootloader.bin" arm-none-eabi-size "bootloader.elf" text data bss dec hex filename 6564 1740 3184 11488 2ce0 bootloader.elf

Стивестронг
Вторник 05 декабря 2017 г. 9:12 вечера
Мы говорим о F103, верно?
Какую доску вы используете?

Рик Кимбалл
Вторник 05 декабря 2017 г. 22:02
Я проверил источник загрузчика и попробовал несколько вещей на Ubuntu 16.04.

Мой по умолчанию ARM-None-Eabi-GCC загружается в /usr /bin ... Это версия:
$ arm-none-eabi-gcc-версия
ARM-None-Eabi-GCC (GNU Tools для встроенных рук процессоров 6-2017-Q2-UPDATE) 6.3.1 20170620 (релиз) [ARM/Embedded-6-ranch Revision 249437]

Я использовал MakeFile для построения из командной строки и сделал Make Generic-PC13. Я загрузил сборку/maple_boot.Эльф, он создал на синей таблетке, используя черный зонд. Затем я не выбил и повторно выпил устройство, и оно перечислено как устройство DFU кленового листа. Затем я использовал Arduino IDE для компиляции и загрузки (w/stm32duino загрузчик). Все работало нормально. Так что я думаю, это не имеет значения, используете ли вы более новую версию Arm-None-Eabi-GCC.

Затем я создал новый проект SW4STM32, выбрав проект «Сделать проект из существующего MakeFile». Я выбрал каталог источника GitHub . Я смог создать новую цель сборки «generic-pc13», я сделал чистую и построить. Это также работало нормально. Это не «истинный» проект Eclipse, но он позволяет использовать среду Eclipse для редактирования.

Опять это было на Linux, поэтому я понятия не имею, как это будет работать на OS/X

Rogerclark
Вторник 05 декабря 2017 г. 11:32
FWIW

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

Я строю только из Makefile (в Windows) и обычно использую ту же версию GCC, которая установлена ​​Arduino IDE.

Я попробовал немного более новой версии GCC за один раз, и она также, казалось, работала нормально.

Однако код загрузчика не гарантированно будет работать со всеми версиями GCC, следовательно, в ReadMe, в нем говорится, какая версия использовать.

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

эн.глин. Параметры компилятора, вероятно, окажут большое влияние на то, как работает код (или не работает)

logd32
Ср. 06 декабря 2017 г. 1:30
вау, приятно, спасибо за все тестирование, да, мы говорим о F103CBT6 здесь. Мой источник загрузчика устарел, так что, возможно, проблема, я скачаю последний оборотный и попробую сделать новый проект Makefile.

Я пытаюсь сделать версию загрузчика для STM32L151C8 и STM32F303CC. Я определил целевые правила и изменил Makefiles, я также добавил некоторые .LD -файлы и файлы запуска для L1 и F3, я обнаружил, где ссылаться на .LD -файлы, но ничего для других, также не знаете, где найти .песок .H макро файлы для L1 и F3.
Кроме ссылки на эти файлы, нужно ли мне адаптировать все ссылки на регистры в оборудовании.H, и, возможно, каждая функция Bootlaoder для L1 и F3?

После того, как Bootladers в порядке, я добавлю ядра Arduino для L151 и F303, текущее ядро ​​STM32Duino F303 слишком устарело, чтобы быть полезным, я обнаружил, что некоторые ядро ​​кажутся полными и работающими (https: // github.com/avikde/koduino для F3 и http: // библиотека.Радино.cc/arduino_1_8/ra ... .1.смол.BZ2 для L1)

Rogerclark
Ср. 06 декабря 2017 г. 2:21
Исправление для версий компилятора было сделано довольно давно, но я бы порекомендовал загрузить последнюю версию

Re: версии для F3 и т. Д

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

Я видел порт для F4 на китайском веб -сайте, но это был один из тех сайтов, где вам приходится заплатить, чтобы просмотреть код, поэтому я не беспокоился (особенно как неизвестный китайский сайт, так что я никак не мог 'M

logd32
Ср. 06 декабря 2017 г. 9:41
Да, F3 и F4 должны быть очень близки, как только эти L1 и F3 будут сделаны, я постараюсь сделать L4. Пожалуйста, покажите URL -адрес китайского веб -сайта, я могу найти способ получить его. Что касается загрузчика, то после нескольких тестов я вижу, что регистры отличаются на F3, чем те, которые используются в Bootlader, поэтому ничего не работает, я нахожусь в медленном процессе, чтобы переписать загрузчик, используя функцию Stdfperiph вместо прямого доступа, после завершения, если размер тоже Большой (что не уверен), я переписаю функции с прямым доступом, чтобы избежать Stdperiph, но в конце концов я найду Bootlader, основанный на Stdperiph, будет гораздо удобнее для порта в различные цели.
Не.B Этот порт уже включает в себя F4 https: // github.com/avikde/koduino Но я все еще взаимосвязан, чтобы узнать, что вы нашли на случай, если это более позднее

Rogerclark
Ср. 06 декабря 2017 г. 10:12
Re: код для F4 Booloader

Я разместил об этом ветку

ViewTopic.PHP?f = 3&t = 2104


Я подозреваю, что код полностью устарел и не будет работать, если только он со старой версией компилятора и без оптимизации, и он также будет больше, так как оригинальный загрузчик Libmaple был 12K, а не 8K.
Но я объединился в некоторые исправления, чтобы позволить оптимальности размера работать, и это сводило его чуть ниже 8K

Re: Koduino

Я знаю о репо Авике. (Koduino), но его основное внимание было изначально было только F3, а F4 был добавлен позже, но он не имеет никакой поддержки для F1 (что использует большинство людей, потому что они очень дешевые)

А также репо Авика, есть официальное ядро ​​STM на GitHub.com/stm32duino, но он использует HAL, и есть ядро ​​@Danielef, которое также основано на HAL.


Re: Использование SPL для загрузчика.

Возможно, вы сможете привести его в 8K, версия Bare Metal, которую мы в настоящее время используем, только сжимается в 8K, так что любое раздувание вообще протолкнет по этой границе.

Rogerclark
Ср. 06 декабря 2017 г. 10:15 утра
Пса.

Есть какой -то код для F4 BooloAder, используя HAL, который написал @victor_pv.

Но проблема в том, что это не DFU, его DFUSE и нуждаются в другой версии DFU-UTIL, чтобы поддержать его, и совершенно разные драйверы DFU в Windows для тех, которые мы сейчас используем.
Эти драйверы должны быть установлены вручную с помощью Zadig, который является болью

Следовательно, то, что просто работает с обычным DFU, было бы намного лучше, так как это означало бы, что люди могут загружать в F1 и F4, не нуждаясь в отдельных копиях DFU-UTIL и т. Д

logd32
Ср. 06 декабря 2017 г. 11:27
о, я не знал об этом https: // github.com/stm32duino/arduino_c ... r/варианты Это, наверное, самое современное для F3/F4 и L4.
Хорошо, китайское ядро ​​очень очень старое, бесполезно проверять.
я Но это использует HAL, и есть ядро ​​@Danielef, которое также основано на HAL. Это проблема использовать HAL? Мне не очень нравится HAL для себя, но для Arduino STM32 Core он мог бы помочь объединить цели. Но проблема в том, что это не DFU, его DFUSE и нуждаются в другой версии DFU-UTIL, чтобы поддержать его, и совершенно разные драйверы DFU в Windows для тех, которые мы сейчас используем.
Эти драйверы должны быть установлены вручную с помощью Zadig, который является болью
Да, я не хочу идти так, как ни тоже, я думаю, что текущий загрузчик DFU хорош, я изменил его только для того, чтобы добиться 100% успеха на OSX и добавил функцию, чтобы оставаться в режиме вечного загрузчика с двойным нажатием на сбросе, так что не используется для io Ключ пользователя

@Danilef's Core https: // github.com/danieleff/stm32gener ... 2/варианты
Действительно, все есть для F1 F3 L1 и L4, мне интересно, сделал ли он Bootlader и Bootlader

Rogerclark
Ср. 06 декабря 2017 г., 19:29
Maple Bootloader в моем репо (тот, который мы все используем), у Altready есть функция, которую нужно удерживать, если вы поместите волшебный номер в резервную копию DR10.

Я писал об этом много раз раньше.


Re: Другой загрузчик

Я не ДОН’Не думаю, что @Danielef написал загрузчик

@JCW написал один возраст назад, но он не реализует DFU, я думаю, что он использует формат последовательных данных.


У Blackmagic Desre есть загрузчик DFU и использует LiboPencm3, но он только поддерживает F1.
Раньше они также поддерживали F4, но отказались от поддержки для него лет назад, прежде чем они сделали крупную реорганизацию кода

Вы должны быть в состоянии изменить их загрузчик F1 для запуска в F4 и т. Д., Но это не’t совсем так же, как и загрузчик Maple, поскольку он ожидает, что кнопка будет нажат на время загрузки, чтобы переключить его в режим DFU, а не всегда перейти в DFU в течение фиксированного периода времени, прежде чем прыгнуть в код приложения.

Хорошая вещь о загрузчике Blackmagic Destuge, он подойдет 8K

logd32
Пт 22 декабря 2017 г. 11:27
[Рик Кимбалл - Вторник 05 декабря 2017 г. 22:02] -
Затем я создал новый проект SW4STM32, выбрав проект «Сделать проект из существующего MakeFile». Я выбрал каталог источника GitHub . Я смог создать новую цель сборки «generic-pc13», я сделал чистую и построить. Это также работало нормально. Это не «истинный» проект Eclipse, но он позволяет использовать среду Eclipse для редактирования.

Опять это было на Linux, поэтому я понятия не имею, как это будет работать на OS/X
@Rick kimball
Привет,
Не могли бы вы поделиться проектом SW4STM32? Когда я использую «Makefile из выхода кода», а затем выбираю AC6 STM32 MCU GCC, полученный проект может построить, но он только создает шестнадцатеричный файл, и когда я поднимаю этот шестнадцатеричный файл (с бинаром Stlink), он пишет 60 страниц или 1K, я Не знаю, почему, это также не работает: цель не мигает.
Мне было бы любопытно проверить с созданным вами проектом, вы пытались прошить полученное бинарное?

logd32
Пт 22 декабря 2017 г. 11:46
[Rogerclark - Ср. 06 декабря 2017 г., 19:29] - У Blackmagic Desre есть загрузчик DFU и использует LiboPencm3, но он только поддерживает F1.
Раньше они также поддерживали F4, но отказались от поддержки для него лет назад, прежде чем они сделали крупную реорганизацию кода
Вы должны быть в состоянии изменить их загрузчик F1 для запуска в F4 и т. Д., Но это не’t совсем так же, как и загрузчик Maple, поскольку он ожидает, что кнопка будет нажат на время загрузки, чтобы переключить его в режим DFU, а не всегда перейти в DFU в течение фиксированного периода времени, прежде чем прыгнуть в код приложения.
Хорошая вещь о загрузчике Blackmagic Destuge, он подойдет 8K
@Rogerclark
Спасибо, я проверю это, мне не нравится перспектива использовать libopencm3. Лучший вариант, вероятно, - изменить текущий Bootlader, но Makefil делает задачу усложняться, импортируя ее в SW4STM32, поскольку проект Makefile приводит к неработающему бинарному файлу.
Я наконец переключился на Arduino Hal Core, и варианты 3 плат теперь полностью работают (F1, L1, F3), поэтому Bootlaoder для L1 и F3 - последний бит.
[Rogerclark - Ср. 06 декабря 2017 г., 19:29] - Maple Bootloader в моем репо (тот, который мы все используем), у Altready есть функция, которую нужно удерживать, если вы поместите волшебный номер в резервную копию DR10.
Я писал об этом много раз раньше.
Да, BKP10, на самом деле точка здесь была позволить пользователю установить загрузчик в вечном режиме с двойным нажиманием на кнопке RST. Это решение избегает необходимости кнопки пользователя, оно также обязательно для Arduino, поскольку пользователи, как правило, загружают неработающий код, который разбивает виртуальный последовательный порт и, таким образом, предотвращает загрузку новой прошивки из -за «сброса через виртуальный последовательный порт». Я использовал BKP9, и он не может быть установлен пользователем напрямую (часть меканизма обнаружения двойного пресса).

Решено: [Sloeber] Программные сбои

Arduino Ide