- Русские Блоги
- Как среда разработки Keil генерирует файлы BIN
- Зачем вам нужен файл BIN?
- Конфигурация Keil генерирует файл BIN
- Как другие среды разработки преобразуют файлы AXF в файлы BIN?
- Формат команды:
- Интеллектуальная рекомендация
- IView CDN Загрузка значка шрифта нормальная, а значок шрифта не может быть загружен при локальной загрузке JS и CSS
- Критическое: ошибка настройки прослушивателя приложения класса org.springframework.web.context.ContextLoaderLis
- 1086 Не скажу (15 баллов)
- Pandas применяют параллельный процесс приложения, многоядерная скорость очистки данных
- PureMVC Learning (Tucao) Примечания
- Электроника для всех
- Блог о электронике
- Прошивка ARM Cortex M3 на примере STM32 и LPC1300
- 129 thoughts on “Прошивка ARM Cortex M3 на примере STM32 и LPC1300”
Русские Блоги
Как среда разработки Keil генерирует файлы BIN
Зачем вам нужен файл BIN?
- Некоторые авторы поддерживают только файлы BIN.
- При удаленном обновлении OTA могут использоваться только файлы BIN.
- При использовании файлов сценариев JLink для записи в один клик поддерживаются только файлы BIN.
- Файлы BIN намного меньше, чем файлы HEX и AXF.
Но по умолчанию Keil генерирует форматы файлов AXF и HEX. Как генерировать BIN?
Конфигурация Keil генерирует файл BIN
Keil поставляется с небольшим инструментом, который может выполнять инструкции для преобразования файлов AXF в файлы BIN, для этого требуется вызов внешней программы fromelf.exe для преобразования файлов AXF в файлы формата BIN.
fromelf.exe Расположение файла находится в каталоге установки Keil_v5\ARM\ARMCC\bin или Keil_v5\ARM\ARMCC_505u2\bin Справочник.
**** В меню конфигурации проекта на вкладке «Пользователь» команда, выполняемая после компиляции, установлена на fromelf —bin -o «[email protected]» «#L» Конечно, вы также можете использовать метод абсолютного пути, описанный выше, вам нужно посмотреть путь к указанному файлу fromelf, путь к выходному файлу BIN и путь к сгенерированному файлу AXF.
Перекомпилируйте, вы можете увидеть, что файл BIN был сгенерирован в выходной каталог.
Как другие среды разработки преобразуют файлы AXF в файлы BIN?
Конечно, если вы хотите конвертировать файлы AXF, сгенерированные другими средами разработки, в файлы BIN, вы также можете напрямую вызвать этот небольшой инструмент для достижения цели.
Формат команды:
Приветствую внимание всехМой личный блог
или код сканирования WeChat, чтобы подписаться на мою публичную учетную запись
Время от времени обновляйте свои личные учебные заметки и техническое резюме. Приглашаем всех учиться друг у друга!
Интеллектуальная рекомендация
IView CDN Загрузка значка шрифта нормальная, а значок шрифта не может быть загружен при локальной загрузке JS и CSS
Используйте iview, чтобы сделать небольшой инструмент. Чтобы не затронуть другие платформы, загрузите JS и CSS CDN на локальные ссылки. В результате значок шрифта не может быть загружен. Просмо.
Критическое: ошибка настройки прослушивателя приложения класса org.springframework.web.context.ContextLoaderLis
1 Обзор Серверная программа, которая обычно запускалась раньше, открылась сегодня, и неожиданно появилась эта ошибка. Интуитивно понятно, что не хватает связанных с Spring пакетов, но после удаления п.
1086 Не скажу (15 баллов)
При выполнении домашнего задания друг, сидящий рядом с ним, спросил вас: «Сколько будет пять умножить на семь?» Вы должны вежливо улыбнуться и сказать ему: «Пятьдесят три». Это.
Pandas применяют параллельный процесс приложения, многоядерная скорость очистки данных
В конкурсе Algorith Algorith Algorith Algorith Algorith 2019 года используется многофункциональная уборка номера ускорения. Будет использовать панды. Но сама панда, кажется, не имеет механизма для мно.
PureMVC Learning (Tucao) Примечания
Справочная статья:Введение подробного PrueMVC Использованная литература:Дело UnityPureMvc Основная цель этой статьи состоит в том, чтобы организовать соответствующие ресурсы о PureMVC. Что касается Pu.
Электроника для всех
Блог о электронике
Прошивка ARM Cortex M3 на примере STM32 и LPC1300
Готовую программу надо каким-либо образом запихать в контроллер. Для этого существует множество способов.
JTAG/SWD адаптер
Так как часто для отладки под ARM используется JTAG, то этот метод получается наверное самым популярным. Для этой цели используется какой-либо адаптер. Например я использую CoLinkEX так что показывать буду на его примере. Там все просто — подключаешь адаптер к контроллеру стандартным SWD или JTAG шлейфом. Через линии NRST/TDI/TDO/TCK/TMS для JTAG или через SWO/SWOCLK/SWDIO/NRST для SWD режима. На адаптере моей верси CoLinkEX оба эти разьема выведены на одну колодку, так что получается как бы сразу и JTAG и SWD соединение. А там какое надо такое и выбираешь. Особой разницы в отладке/прошивке между ними нет.
И прошиваешь либо из среды Keil.
Либо используя утилитку CoFlash oт CooCox.com
Выбираем тип контроллера, размер памяти.
А дальше надо только указать бинарный или Hex файл и нажать прошивку.
Чтобы Keil сгенерировал hex файл нужно выставить галочку в опциях проекта.
А чтобы получить bin файл прогнать выходной axf файл через специальную утилитку fromelf входящую в состав Keil. Проще всего вписать это сразу в постобработку:
Формат там такой:
fromelf —bin —output .\имя_будущего_файла.bin .\имя_создаваемого_файла.axf
Ну или, если выходные файлы создаются в какой-либо подпапке, то путь будет включать и эту подпапку
Первичный Bootloader
Если нет JTAG/SWD адаптера, то не беда. Достаточно иметь переходник USB-UART или COM-UART так как почти все ARM контроллеры содержат в памяти аппаратно встроенный бутлоадер, позволяющий накатить прошивку. Главное следить за тем, чтобы напряжение на выходе с адаптера совпадало с напряжением питания контроллера, а то можно пожечь входы (FTDI можно запитать от 3.3 вольт. А для работы с RS232 использвоать не MAX232, а MAX3232 — то же самое, но на 3.3 вольта). Я в качестве USB-UART использую свою демоплату Pinboard с джампером питания выставленным на 3.3 вольта. Питание беру с той же платы.
Вход Boot_0 выставыляю в 1, вход Boot_1 выставляю в 0. Набрасываю на RX1 и TX1 контроллера STM32F103C8 проводочки от RX-TX микрохсемы FTDI
Готово — можно шить. Для прошивки в STM32 используется программка Flash Loader Demonstrator v2.2.0 от STM запускаем ее:
Настраиваем порт, жмем Next
Она сразу показывает, что есть контроллер.
Тут можно посмотреть какие страницы флеша нам доступны на запись. Жмем Next
Выбираем какую операцию будем делать. Для прошивки надо выбрать Download и не забыть галочку Стереть чип.
Жмем Next и пошел процесс прошивки-проверки
Для LPC от NXP используется другая утилитка, зовется она Flash Magic — те же яйца, вид сбоку. Разве что может быть для входа в загрузчик надо другие выводы коротить. Это надо в User Manual на LPC уточнять уже.
Mass Storage USB Bootloader
Кроме того, у LPC1343 (у других LPC не встречал) есть одна прикольня фича. Там встроенный загрузчик может работать и по USB. Для этого надо собрать следующую схему:
Еще нужно вывод PIO001 подтянуть резистором на 10кОм к 3.3 вольтам питания и вывести на джампер, который бы его коротил в землю. Это будет условия входа в бутлоадер. После чего замыкается джампер входа в бут и девайс втыкается в USB. Винда его быстро определяет как сьемный диск объемом в 32Кб, на котором лежит файл firmware.bin если его скопировать — то мы получим юзерскую прошивку, что была там ранее. Это если не включена защита.
В противном случае мы, наверное, считаем мусор. А если удалить файл firmware.bin и на ее место записать файл с бинариком новой прошивки, то он вольется во флеш. Усе, не надо больше ничего! Красота! Правда в линухе оно работает не так как надо, дело в том, что линух пишет туда начиная со второго чтоль сектора и в результате Epic Fail. Впрочем, там же есть замечательная утилитка dd которая может скопировать на эту «флешку» файл в точности как надо, с нулевого адреса.
Вторичный бутлоадер
Поскольку я решил зарыться в STM32, то мне тоже захотелось такую вкусняшку как USB boot в режиме mass storage. Забросил идею Владимиру aka RtxOnAir и в результате он, за пару дней, выдал аналогичное решение для STM32F103.
Для загрузки с USB нужна следующая схема:
Транзистор подтягивает линию D+ к питанию и это означает, что на шине кто то появился, заставляя OС компа произвести определение устройства. Можно сделать и по колхозному. Подтянуть D+ через резистор напрямую. Но в этом случае для входа в бут придется передергивать шнур USB, иначе винда не захочет находить устройство. А так контроллер сам дернет вожжу.
Штука у Владимира получилась классная — автоматом определяет все типы кристаллов серии F103, позволяет выбрать любую ногу для передергивания USB шиной. Для входа во вторичный бутлоадер надо выводы Boot_0 и Boot_1 посадить на землю и нажать RESET ну или воткнуть девайс в USB если шина у нас не коммутируемая. Также можно выбирать работу от внутреннего генератора или от внешнего.
Вообще, инструкция явно говорит, что USB может работать только от внешнего кварцевого резонатора, т.к. частота внутреннего нестабильная и вообще кака. Не будем спорить с создателями камня, но у нас наш бутлоадер отлично завелся на HSI и при комнатной температуре отлично работал. Впрочем, стабильность тут явно не на высоте и надо быть осторожным.
Конфигурация бутлоадера
Для конфигурации нашего бута RtxOnAir написал небольшую утилитку:
Запустив которую можно выбрать нужные опции и нажав «Ок» получить сконфигурированный бутлоадер, который надо залить в МК любым вышеуказанным способом. Переключив джамперы Boot0 и Boot1 в режим нормальной работы Boot0=0 Boot1=1 и нажав сброс мы должны увидеть как в системе появится новый USB Mass Storage диск с емкостью равным размеру флеш памяти нашего кристалла за вычетом размеров бутлоадера.
Конфигурация проект под вторичный Bootloader
Поскольку этот бутлоадер распологается в области откуда обычно идет пользовательская прошивка, то в создаваемых под него проектах надо немного сконфигурировать опции линковки и компиляции, чтобы они начинались с области не занятой бутом. Для этого в Keil надо в опции проекта подправить начальный адрес:
Ну и прописать строку для формирования бинарика из axf файла.
После чего файлы прошивки можно банальным копированием загонять в STM32 и никакой программатор или адаптер больше не нужны совсем. Красота же!
Спасибо. Вы потрясающие! Всего за месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics. Были даже переводы на 25000+ и просто поток платежей на 251 рубль. Это невероятно круто. Сейчас идет заключение договора и подготовка к строительству!
А я встрял на три года, как минимум, ежемесячной пахоты над статьями :)))))))))))) Спасибо вам за такой мощный пинок.
129 thoughts on “Прошивка ARM Cortex M3 на примере STM32 и LPC1300”
А зачем из hex делать bin? В чем разница?
Смотря для чего. Если грубо, то bin — это сама откомпилированная программа в том виде, как она будет записана во флеш-память МК байт в байт, т.е. это непосредственные коды команд, данные в сыром виде и т.д. А hex формат — это тоже самое но в виде обычного текста + доп. информация. Т.е. если прошивку в hex формате залить в МК 1 в 1, то естественно работать ничего не будет.