LPC1765FET100.551 за 0.00 ₽ в наличии производства NXP

LPC1765FET100.551 за 0.00 ₽ в наличии производства NXP Электронная цифровая подпись

Прошивка 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. Проще всего вписать это сразу в постобработку:

Формат там такой:

Ну или, если выходные файлы создаются в какой-либо подпапке, то путь будет включать и эту подпапку

Первичный Bootloader
Если нет JTAG/SWD адаптера, то не беда. Достаточно иметь переходник USB-UART или COM-UART так как почти все ARM контроллеры содержат в памяти аппаратно встроенный бутлоадер, позволяющий накатить прошивку. Главное следить за тем, чтобы напряжение на выходе с адаптера совпадало с напряжением питания контроллера, а то можно пожечь входы (FTDI можно запитать от 3.3 вольт. А для работы с RS232 использвоать не MAX232, а MAX3232 — то же самое, но на 3.3 вольта). Я в качестве USB-UART использую свою демоплату Pinboard с джампером питания выставленным на 3.3 вольта. Питание беру с той же платы.

Читайте также:  Сбербанк-АСТ - Электронная торговая площадка [#WEB2]

Вход 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 которая может скопировать на эту «флешку» файл в точности как надо, с нулевого адреса.

Читайте также:  RSA-шифрование: как работает "старый" алгоритм

Вторичный бутлоадер
Поскольку я решил зарыться в 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 и никакой программатор или адаптер больше не нужны совсем. Красота же!

Файло

Оцените статью
ЭЦП Эксперт
Добавить комментарий