8-900-374-94-44
[email protected]
Slide Image
Меню

Stm32 программатор – Программатор stm32 своими руками. | CDEblog

Содержание

Программатор stm32 своими руками. | CDEblog

Самодельная и доступная альтернатива продаваемому программатору от STMicroelectronics. Является выдержкой и компиляцией нескольких статей и схем найденных в интернете. Реализация в минимально возможном форм-факторе.

У любого разработчика встраиваемого софта должен быть программатор для устройств которые он использует. В моём случае микроконтроллеры фирмы STMicroelectronics, а так же Milandr (российские процессоры на ядре ARM).

Покупка данного девайса весьма затратна, особенно если сравнивать с себестоимостью компонентов — печатной платы и радиодеталей.

Решено было сделать программатор самостоятельно. За основу легли схемы отладочных плат для различных МК, в итоге получился полнофункциональный отладочный модуль и не только для stm32, но и для stm8 и даже миландровских чипов (проверено пока только на К1986ВЕ92, но думаю и другие тоже будут шиться и отлаживаться).

Основные функции:

  • программирование и отладка STM32;
  • программирование и отладка STM8;
  • программирование и отладка ARM Миландр.

Интерфейсы программирования:

  • SWD — до 4 МГц;
  • JTAG;
  • SWIM.

Сам программатор можно рассмотреть на фото выше. Провода растянутые по плате это лишь последующие доработки связанные с отсутствием необходимого светодиода (слева) и с необходимостью программировать платы без подачи на них питания (справа).

Схема устройства максимально проста и понятна:

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

В качестве разъема для подключения к компьютеру используется microUSB, выбор пал только лишь из-за его современности по сравнению с его мини братом. У меня же самого на плате стоит именно мини, когда собирал заложенного микро не было в наличии.
Плата выглядит следующим образом:

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

Для обеспечения работы необходимо зашить по в микроконтроллер, для этого нам понадобиться usb-uart переходник, бутлоадер и утилита для прошивки.

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

Решение было найдено на одном из многочисленных форумов — бинарник прошивки. Правда была проблема, после прошивки контроллера программатор определялся, но работать не хотел, зато спокойно прошивался через st-link utility, было решено подчистить файл прошивки, удалив все лишнее, оставив только сам загрузчик.

Как можно догадаться все удалось и теперь загрузчик можно взять здесь.

Для заливки используем разъем P1, выводы 3 и 4 которого замыкаем вместе, переводя микроконтроллер в режим загрузки по usart1. Подключаем uart переходники подаем питание на плату программатора, можно через usb разъем.

В утилите выбираем используемый последовательный порт и следуем остальным инструкциям. Этот процесс в картинках описывать нет смысла — все довольно тривиально.

После окончания прошивки отключаем все вспомогательные устройства и подключаем программатор к компьютеру, он должен нормально определиться. Теперь осталось обновить прошивку программатора с помощью st-link utility.

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

Данный программатор хорошо себя зарекомендовал, на протяжении года пользования. Отлично работал при -40о С в климатической камере, помогая отлаживать одно из разрабатываемых устройств, а так же дважды посетил вместе со мной Камчатку, где отлично себя чувствовал в суровых климатических условиях.

Для желающих собрать аналогичный программатор:

GERBER — st-link.zip

Описание — st-link-document.zip

Please enable JavaScript to view the comments powered by Disqus.

cdeblog.ru

Программатор ST-Link — DiMoon Electronics

По-хорошему, данную тему надо было затронуть еще во 2-й или 3-й части данного цикла статей. Но лучше поздно, чем ни когда, поэтому поехали! В этой части мы познакомимся с программатором ST-Link, с помощью которого можно загружать прошивку в микроконтроллер

STM32 и производить отладку программного обеспечения. Предыдущая статья здесь, все статьи цикла можно посмотреть тут: http://dimoon.ru/category/obuchalka/stm32f1.

Разновидности программаторов ST-Link

Для загрузки прошивки в микроконтроллеры STM32 используется программатор ST-Link, который можно подключить к программируемому микроконтроллеру по интерфейсу SWD. Кроме того, с помощью того же ST-Link-а и SWD можно выполнять пошаговую отладку прошивки из среды разработки с поддержкой точек останова (breakpoint). Количество одновременно установленных breakpoint-ов ограничено несколькими штуками (точно не помню сколько, вроде 5 штук), но этого более чем достаточно для отладки прошивки.

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

STM32. Для этих целей есть специальная гребенка на плате и перемычки, с помощью которых можно отключить интерфейс SWD от микроконтроллера, распаянного на плате. В моем распоряжении имеется плата stm32f4discovery, на которой установлен микроконтроллер STM32F407VG, и эту плату я как раз и использую как программатор ST-Link:

Естественно можно приобрести отдельный программатор ST-Link. Тут есть несколько вариантов. Первый — это фирменный ST-Link, который бывает с гальваничаской развязкой и без нее. Выглядят эти программаторы вот так:

Другой вариант — китайский ST-Link в форм-факторе флешки:

Вариант в принципе тоже неплохой, только надо иметь ввиду, что внутри у него нет ни каких защит интерфейса USB и целевой платы, так что при невыровненных землях схемы и ПК, КЗ в отлаживаемой схеме, и так далее, есть большой шанс спалить программатор вместе с USB портом в компе. Так что при работе с этим программатором надо быть предельно внимательным!

Подключение программатора ST-Link к микроконтроллеру STM32

Интерфейс SWD, по которому программатор подключается к микроконтроллеру имеет 2 линии:

Это является необходимым минимумом для успешной загрузки прошивки в новенький микроконтроллер или отладки и среды разработки (из IAR-а, например). Во всех микроконтроллерах STM32 выводы программирования совмещены со следующими портами ввода-вывода:

  • SWDIO — PA13
  • SWCLK — PA14

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

PA13 и PA14, процесс загрузки новой прошивки становится затруднителен, придется задействовать еще один провод, соединяющий программатор и МК: линию RESET. В этом случае, перед загрузкой прошивки, ST-Link выполнит сброс микроконтроллера, тем самым переведет пины PA13 и PA14 в состояние по-умолчанию, а уже после этого загрузит в МК новую прошивку. Чтобы задействовать функцию сброса микроконтроллера перед загрузкой прошивки в IAR-е в разделе настройки ST-Link-а необходимо выбрать опцию «Reset Pin»:

На этом пока все, спасибо за внимание!!! Продолжение

dimoon.ru

Программатор микроконтроллеров из STM32 Discovery.

Одна из предыдущих статей (вот она) была посвящена тому, как прошивать контроллер на отладочной плате STM32 Discovery, но этого же нам мало 😉 Давайте попробуем прошить сторонний микроконтроллер, используя STM32 Discovery в качестве ST-Link программатора. То есть из Discovery мы сделаем программатор микроконтроллеров для других плат. У меня вот, например, лежит отличная отладочная плата Mini STM32 с контроллером STM32F103VET6, его то как раз я и буду прошивать через Discovery.

Что ж, переходим от слов к делу….

Для начала подготовим Discovery для прошивки внешнего микроконтроллера. Для этого надо убрать два джампера:

Теперь находим SWD разъем на плате, вот он:

Если расположить плату как на рисунке, то верхний пин является первым, то есть в соответствии с таблицей – пином для питания:

Он нам, кстати, не понадобится. Подключать внешний контроллер мы будем тремя проводами – это общий провод (земля), тактовый сигнал SWD (SWD clock) и SWD Data. Осталось понять, где какие пины у микроконтроллера, который мы собираемся прошить. Для этого берем даташит и лезем в распиновку. Там нас интересуют пины SWDIO и SWCLK. Для моего контроллера STM32F103VET6:

Вот оно то, что надо – пины PA13, PA14. Осталось только соединить. Подключаем три проводка к разъему SWD на Discovery – второй пин разъема заводим на PA14, четвертый на PA13, ну и землю перекидываем на внешний контроллер. Запитываем наш программируемый контроллер как обычно, STM32Discovery пусть тащит питание от USB. Вот, собственно, и все. Прошиваем точно так же, как мы прошивали контроллер на плате Discovery, об этой статье я уже говорил чуть выше, в самом начале =)

Вот в принципе и все, что мы хотели сделать, получилось как задумывалось ) Это оказалось довольно-таки просто, но, согласитесь, штука полезная. У многих есть STM32 Discovery, так почему же не использовать ее в качестве программатора микроконтроллеров STM32 на других платах, если под рукой нету ничего более подходящего 😉 До скорых встреч, оставайтесь на связи!

microtechnics.ru

Как надо дружиться с STM32 / Habr

Не, не, не, все не так!

Давайте дружиться с STM32 правильно!

Самая главная ошибка, сделанная автором — это неправильно выбранный инструментарий. Начинать дружить с контроллерами STM32 надо, безусловно, с плат STM32Fx-Discovery. На них уже есть программатор-отладчик, весь необходимый обвес, ноги для подключения периферии и плюшки в виде светодиодов, экранов, датчиков и ЦАП-ов в зависимости от платы. Цена дискаверей начинается от 10 долларов. Это копейки за мгновенный и безпроблемный старт. Т.е. вам вообще ничего больше из железа покупать не надо (mini-USB шнур, полагаю, дома найдется), чтобы помигать светодиодом, изучить системы пространственной ориентации, поработать с выводом звука и графики и сделать USB-устройство.

Дополнительный бонус — программатором с дискавери можно программировать внешние МК, разъем для этого есть на плате.

Но, допустим, не лежит у вас душа к дискавери. Ладно, я понимаю. Смотрим тогда, на чем же построены отладчики ST-Link V1/V2. А построены они на микроконтроллере STM32F103C8T6 (@eta4ever, да, да, он самый). Соответственно, если у тебя есть плата на этом МК, то ее можно превратить в программатор ST-Link V2. Для заливки прошивки можно воспользоваться либо инструкцией от STM (AN2557 STM32F10x in-application programming using the USART) или той же дискавери, если есть под рукой и утилитой STM32 ST-LINK utility. Или купите отладчик. Стоит он 25 долларов, но вещь полезная, если собираетесь хоть сколько серьезно этим заниматься.

Кстати, еще насчет платы. Китайцы продают много готовых плат, вроде вот таких. Платка такая за 6 долларов — совсем неплохо. Лучше только такая платка за 4 доллара. Итак, заказываем такие платки, после получения превращаем одну в программатор, а с остальными развлекаемся. Ну не сказка ли?

Итак, как же сделать программатор? Пара резисторов, немножко провода и пятнадцать минут почитать вот эту тему. Что с чем соединять:

— соединить РА5 и РВ13 это линия SWCLK
— между РВ14 и РВ12 резистор 220 Ом
— РВ14 линия SWDIO
— РА0 подключить к делителю из двух резюков 4,7кОм между GND и +3,3V

Прошиваем вот этой прошивкой.

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

Пару слов про IDE. CooCox неплох, удобный и все такое, но у них очень туго с ресурсами и они не успевают поддерживать новые микроконтроллеры, да еще к тому же у них приоритет, похоже, LPC. Я так нарвался с поддержкой МК на плате STM32F0-Discovery. Ждал обещанной поддержки несколько месяцев, но плюнул и ушел на IAR. Иаровская среда называется EWARM (Embedded Workbench for ARM), бесплатной версии хватает за глаза (ограничение кода 8 кб, я ни разу не утыкался в него), скачивается отсюда. Еще КуКокс грешит тем, что они ломают что-то периодически в новых релизах и стабильность среды невысокая — может просто закрыть все окна без сохранения изменений. Кто в общаге не жил, где свет вырубался раз в час и не имеет привычки нажимать Ctrl+S каждые 30 секунд, может попасть очень сильно. IAR тоже не без грехов, в первую очередь бесит уродская разметка кода и отсутствие выделения активного/неактивного кода в зависимости от директив препроцессора, но жить с этим можно. Важно, что просто так взять и построить проект под STM32 не выйдет (извините, не буду вставлять картинку с Боромиром). Если захотите, напишу подробную степ-бай-степ инструкцию (с картинками!) про то, как создать свой собственный проект с нуля.

P.S. А все-таки, дикавери! Потому что на чем-то еще взять и вот так с нуля сделать фиг получится:

habr.com

1. STM32. Программирование STM32F103. Тестовая плата. Прошивка через последовательный порт и через ST-Link программатор

Микроконтроллеры STM32 приобретают все большую популярность благодаря своей мощности, достаточно разнородной периферии, и своей гибкости. Мы начнем изучать STM32F103C8T6, используя бюджетную тестовую плату, стоимость которой не превышает 2 $ (у китайцев). Еще нам понадобится ST-Link программатор, стоимость которого около 2.5 $ (у китайцев). Такие суммы расходов доступны и студентам и школьникам, поэтому именно с такого бюджетного варианта я и предлагаю начать.


Этот микроконтроллер не является самым мощным среди STM32, но и не самый слабый. Существуют различные платы с STM32, в томе числе Discovery которые по цене стоят около 20 $. На таких платах почти все то же, что и на нашей плате, плюс программатор. В нашем случае мы будем использовать программатор отдельно.

Микроконтроллер STM32F103C8. Характеристики

  • Ядро ARM 32-bit Cortex-M3
  • Максимальная частота 72МГц
  • 64Кб Флеш память для программ
  • 20Кб SRAM памяти
  • Питание 2.0 … 3.3В
  • 2 x 12-біт АЦП (0 … 3.6В)
  • DMA контролер
  • 37 входов / выходов толерантных к 5В
  • 4 16-розрядних таймера
  • 2 watchdog таймера
  • I2C – 2 шины
  • USART – 3 шины
  • SPI – 2 шины
  • CAN
  • USB 2.0 full-speed interface
  • RTC – встроенные часы

На плате STM32F103C8 доступны

  • Выводи портов A0-A12, B0-B1, B3-B15, C13-C15
  • Micro-USB через который можно питать плату. На плате присутствует стабилизатор напряжения на 3.3В. Питание 3.3В или 5В можно подавать на соответствующие выводы на плате.
  • Кнопка Reset
  • Две перемычки BOOT0 и BOOT1. Будем использовать во время прошивки через UART.
  • Два кварца 8Мгц и 32768 Гц. У микроконтроллера есть множитель частоты, поэтому на кварце 8 МГц мы сможем достичь максимальной частоты контроллера 72Мгц.
  • Два светодиода. PWR – сигнализирует о подачи питания. PC13 – подключен к выходу C13.
  • Коннектор для программатора ST-Link.

Итак, начнем с того, что попробуем прошить микроконтроллер. Это можно сделать с помощью USB-Uart переходника на базе микросхемы FT232 через USART, или с помощью программатора ST-Link.

Скачать тестовый файл для прошивки можно здесь. Программа мигает светодиодом на плате.

Прошивка STM32 с помощью USB-Uart переходника под Windows

В системной памяти STM32 есть Bootloader. Bootloader записан на этапе производстве и любой микроконтроллер STM32 можно запрограммировать через интерфейс USART с помощью USART-USB переходника. Такие переходники чаще всего изготавливают на базе популярной микросхем FT232RL. Прежде всего подключим переходник к компьютеру и установим драйвера (если требуется). Скачать драйвера можно с сайта производителя FT232RL – ftdichip.com. Надо качать драйвера VCP (virtual com port). После установки драйверов в компьютере должен появиться виртуальный последовательный порт.

Подключаем RX и TX выходы к соответствующим выводам USART1 микроконтроллера. RX переходника подключаем к TX микроконтроллера (A9). TX переходника подключаем к RX микроконтроллера (A10). Поскольку USART-USB имеет выходы питания 3.3В подадим питания на плату от него.

Чтобы перевести микроконтроллер в режим программирования, надо установить выводы BOOT0 и BOOT1 в нужное состояние и перезагрузить его кнопкой Reset или выключить и включить питание микроконтроллера. Для этого у нас есть перемычки. Различные комбинации загоняют микроконтроллер в различные режимы. Нас интересует только один режим. Для этого у микроконтроллера на выводе BOOT0 должно быть логическая единица, а на выводе BOOT1 – логический ноль. На плате это следующее положение перемычек:

После нажатия кнопки Reset или отключения и подключения питания, микроконтроллер должен перейти в режим программирования.

Программное обеспечение для прошивки

Качаем с сайта st.com программу Flash Loader Demonstrator для STM32. Flash Loader Demonstrator – программа для прошивки STM32 через последовательный интерфейс.

После включения схемы с правильно выставленными перемычками контроллер готов к работе с Flash Loader Demonstrator.

Запускаем Flash Loader Demonstrator и выбираем порт с которым будем работать, и устанавливаем параметры порта.

После выбора параметров порта нажимаем Next после чего должны увидеть «светофор» и информацию по микроконтроллеру. Если этого не происходит, тогда проверяем корректность установленных параметров связи и проверяем действительно ли микроконтроллер введен в режим программирования.

Нажимаем Next,

На этой странице выбираем файл для загрузки в микроконтроллер. Файл может быть в формате bin или hex.

Нажимаем Next и ждем.

Чтобы вывести контроллер из режима программирования, возвращаем перемычки в исходное состояние и нажимаем кнопку Reset. Программа в микроконтроллере должен заработать.

Прошивка STM32 с помощью USB-Uart переходника под Linux (Ubuntu)

Устанавливаем stm32flash

Скачать DEB файл можно тут: http://launchpadlibrarian.net/188294676/stm32flash_0.4-2_i386.deb
Детально про stm32flash читайте тут: https://launchpad.net/ubuntu/wily/i386/stm32flash/0.4-2

Если используем USB-UART переходник, имя порта буде примерно такое /dev/ttyUSB0

Получить информацию о чипе

sudo stm32flash /dev/ttyUSB0

Результат:

stm32flash 0.4

http://stm32flash.googlecode.com/

Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (Medium-density)
- RAM        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (sector size: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB

Читаем с чипа в файл dump.bin

sudo stm32flash -r dump.bin /dev/ttyUSB0

Пишем в чип

sudo stm32flash -w dump.bin -v -g 0x0 /dev/ttyUSB0

Результат:

stm32flash 0.4

http://stm32flash.googlecode.com/

Using Parser : Raw BINARY
Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (Medium-density)
- RAM        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (sector size: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory
Wrote and verified address 0x08012900 (100.00%) Done.

Starting execution at address 0x08000000... done.

Прошивка STM32 с помощью ST-Link программатора под Windows

При использовании программатора ST-Link выводы BOOT0 и BOOT1 не используются и должны стоять в стандартном положении для нормальной работы контроллера.

Качаем с сайта st.com Утилиту STM32 ST-LINK Utility. Устанавливаем ее.  С ней должен быть установлен и драйвер для ST-Link. Если нет, качаем и устанавливаем драйвера ST-Link: http://www.st.com/content/st_com/en/products/embedded-software/development-tool-software/stsw-link009.html Подключаем ST-Link в USB- разъем компьютера, а соответствующие выводы программатора подключаем к выводам тестовой платы согласно маркировки.

Запускаем программу STM32 ST-LINK Utility

Выполняем пункт меню Target -> Connect

Выполняем пункт меню Target -> Erase Chip

Выполняем пункт меню File -> Open file…
Выбираем файл для загрузки в микроконтроллер.

Выполняем пункт меню Target -> Programm & Verify…

После завершения прошивки и проверки, загруженная программа автоматически запустится.

Прошивка STM32 с помощью ST-Link программатора под Linux (Ubuntu)

Устанавливаем софт для работы с ST-Link

mkdir ~/stlink
cd ~/stlink
sudo apt-get install git libusb-dev

Пришлось устанавливать autoconf и libusb-1.0:

sudo apt-get install autoconf
sudo apt-get install libusb-1.0
git clone git://github.com/texane/stlink.git
cd stlink
./autogen.sh
./configure
make
sudo mkdir /opt/texane
sudo cp gdbserver/st-util /opt/texane
sudo cp ./etc/udev/rules.d/49-stlinkv1.rules /etc/udev/rules.d
sudo cp ./etc/udev/rules.d/49-stlinkv2.rules /etc/udev/rules.d
sudo udevadm control --reload-rules

Проверяем видно ли программатор и чип

sudo ./st-info --probe

Результат:

Found 1 stlink programmers
 serial: 
openocd: ""
  flash: 65536 (pagesize: 1024)
   sram: 20480
 chipid: 0x0410
  descr: F1 Medium-density device

Читаем с чипа в файл dump.bin

sudo ./st-flash read dump.bin 0x8000000

Программируем STM32

sudo ./st-flash --reset write dump.bin 0x8000000

Памятка

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

Документация

Всю необходимую документацию к микроконтроллера STM32F103C8T6 можно скачать с сайта производителя:
http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103c8.html

Что можно почитать

The Iinsider’s Guide To The STM32 (Книжка на русском языке)

Маркировка STM32

Device familyProduct typeDevice subfamilyPin countFlash memory sizePackageTemperature range
STM32 =
ARM-based 32-bit microcontroller
F = General-purpose
L = Ultra-low-power
TS = TouchScreen
W = wireless system-on-chip
60 = multitouch resistive
103 = performance line
F = 20 pins
G = 28 pins
K = 32 pins
T = 36 pins
H = 40 pins
C = 48/49 pins
R = 64 pins
O = 90 pins
V = 100 pins
Z = 144 pins
I = 176 pins
B = 208 pins
N = 216 pins
4 = 16 Kbytes of Flash memory
6 = 32 Kbytes of Flash memory
8 = 64 Kbytes of Flash memory
B = 128 Kbytes of Flash memory
Z = 192 Kbytes of Flash memory
C = 256 Kbytes of Flash memory
D = 384 Kbytes of Flash memory
E = 512 Kbytes of Flash memory
F = 768 Kbytes of Flash memory
G = 1024 Kbytes of Flash memory
I = 2048 Kbytes of Flash memory
H = UFBGA
N = TFBGA
P = TSSOP
T = LQFP
U = V/UFQFPN
Y = WLCSP
6 = Industrial temperature range, –40…+85 °C.
7 = Industrial temperature range, -40…+ 105 °C.
STM32F103C8T6

UPD:

Как снять защиту от записи / чтения?

Если вы получили плату с STM32F103, а программатор ее не видит, это означает, что китайцы защитили Флеш память микроконтроллера. Вопрос “зачем?” оставим без внимания. Чтобы снять блокировку, подключим UART переходник, будем программировать через него. Выставляем перемычки для программирования и поехали:

Я это буду делать из под Ubuntu с помощью утилиты stm32flash.

1. Проверяем видно ли микроконтроллер:

sudo stm32flash /dev/ttyUSB0

Должны получить что-то такое:

stm32flash 0.4

http://stm32flash.googlecode.com/

Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (Medium-density)
- RAM        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (sector size: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB

2. Снимаем защиту от чтения а затем от записи:

sudo stm32flash -k /dev/ttyUSB0
stm32flash 0.4

http://stm32flash.googlecode.com/

Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (Medium-density)
- RAM        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (sector size: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Read-UnProtecting flash
Done.
sudo stm32flash -u /dev/ttyUSB0
stm32flash 0.4

http://stm32flash.googlecode.com/

Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (Medium-density)
- RAM        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (sector size: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write-unprotecting flash
Done.

Теперь можно нормально работать с микроконтроллером.

Желаю успехов!

Смотри также:

www.avislab.com

Программирование ARM-контроллеров STM32 на ядре Cortex-M3. Часть 5. Как залить прошивку в контроллер

Ну, вот мы и дошли до одного из самых интересных этапов, — как же залить в контроллер готовую прошивку и оживить наконец нашу железяку.

Вообще-то прошивать контроллеры STM32 можно по-разному, но мы рассмотрим самый простой вариант прошивки — через последовательный интерфейс с помощью фирменной утилиты Flash Loader Demonstrator. Эта утилита совершенно бесплатна и её можно скачать как с официального, так и с нашего сайта.

Как мы ранее уже говорили, — в системной области памяти контроллера зашит bootloader. Именно он и позволяет записать прошивку во flash-память через последовательный интерфейс.

Детально bootloader описан в документе AN2606 (CD00167594.pdf), а используемый им протокол — в документе AN3155 (CD00264342.pdf). Это для тех, кто хочет исчерпывающей информации, а мы рассмотрим процесс прошивки через bootloader вкратце.

Для начала вам нужно скачать и установить себе на компьютер утилиту Flash Loader Demonstrator.

Далее, нужно соединить контроллер с компьютером через UART1. Мой подопытный STM32F103C8T6 имеет 48-выводный корпус, в котором UART1 выведен на ноги 30 (Tx) и 31 (Rx).

Обратите внимание, что в контроллере используется именно UART (причём с уровнями 0/+3,3В), а не RS-232, то есть соединять напрямую выводы контроллера и com-порт компьютера нельзя. Я нашёл выход из этой ситуации в использовании USB-to-COM преобразователя RH-0002 на микросхеме cp2102. Помимо того, что этот преобразователь может использоваться как USB-to-UART с уровнями 0/+3,3 В (его можно разделить на две отдельных части: USB-to-UART и UART-to-RS232), он также позволяет запитать контроллер напряжением 3,3 Вольта (то есть отпадает необходимость во внешнем источнике питания). Вот здесь описано, как собрать преобразователь самостоятельно

Итак, ногу Tx контроллера нужно соединить с ногой Rx преобразователя, а ногу Rx контроллера — с ногой Tx преобразователя. Кроме этого, контроллер нужно запитать и обеспечить нужные уровни на ногах BOOT0 (pin 44), BOOT1 (pin 20). Для запуска bootloadera, который расположен в system memory, ногу BOOT1 нужно подтянуть к «земле», а BOOT0 — к «питанию» (табличка справа).

Подтяжку для BOOT0, BOOT1 лучше делать не жёсткую, а джамперами, чтобы можно было легко выбирать режимы загрузки (например, переключившись после заливки проги в режим загрузки из flash, можно будет эту прогу сразу и потестить).

Схема подключения показана ниже.

Дальше всё просто. Запускаем Flash Loader Demonstrator. Откроется страничка, на которой нужно выбрать com-порт и скорость обмена.

Чётность и количество бит данных уже настроены как надо, скорость можно менять — контроллер в процессе инициализации обмена настраивается на выбранную скорость автоматически, com-порт нужно выбрать тот, который создался при подключении USB-to-COM преобразователя к компьютеру (наш преобразователь создаёт при подключении виртуальный com-порт, полностью имитирующий настоящий аппаратный). После того, как всё настроили — жмём «Next».

О том, что всё нормально и соединиться с контроллером удалось, нам сообщит зелёный сигнал светофора на следующей страничке. Если связь не установится — на эту страничку нас вообще не пустят, сообщив, что контроллер не отвечает.

При установлении связи программа автоматически определит сколько у контроллера flash-памяти и защищена ли эта память от чтения. Нажав кнопку «Remove protection» защиту можно снять, но при этом содержимое флеша будет стёрто (предыдущая записанная туда прошивка уничтожится). Жмём «Next».

В следующем окне нам предлагают выбрать тип программируемого камня (хотя непонятно зачем, — он и так автоматически определяется), а также показывают для нашего камня PID, карту flash-памяти, и версию bootloader-а. Просто жмём «Next».

В следующем окне нужно выбрать, что мы собственно хотим с нашим контроллером делать. Тут возможны следующие варианты: Erase (стереть), Download to device (загрузить в контроллер прошивку), Upload from device (считать прошивку с контроллера), Enable/Disable Flash protection (включить/выключить защиту flash-памяти), Edit option bytes (изменить байты опций). Соответственно, если мы хотим залить прошивку — выбираем Download to device, потом жмём на квадрат с тремя точками и выбираем в проводнике файл с прошивкой, которую надо залить, после чего опять жмём «Next».

На следующей странице внизу появится прогресс-бар, в котором будет показан ход выполнения процедуры загрузки. После того, как вся прошивка будет загружена в контроллер, этот прогресс-бар станет зелёным и в нём белыми буквами будет написано: «Download operation finished successfully» (операция загрузки успешно завершена). После этого, можно нажать кнопку «Close» и закрыть Flash Loader Demonstrator

Всё, теперь чтобы залитая программа начала выполняться нам останется только настроить контроллер на загрузку из flash (BOOT0 = 0, BOOT1 — любой уровень) и перезагрузить его.

  1. Часть 1. Установка MDK, создание проекта, основы Keil uVision
  2. Часть 2. Команды и директивы ассемблера, структура и синтаксис программы. Первая программа для STM32
  3. Часть 3. Карта памяти контроллеров STM32, методы работы с памятью
  4. Часть 4. Регистры, старт и режимы работы контроллеров STM32
  5. Часть 5. Как залить прошивку в контроллер
  6. Часть 6. Настройка системы тактирования
  7. Часть 7. Работа с портами ввода-вывода
  8. Часть 8. Процедуры на ассемблере для STM32
  9. Часть 9. Система прерываний
  10. Часть 10. CMSIS, использование стандартных библиотек и функций
  11. Часть 11. Подключение и использование драйверов из пакета StdPeriph
  12. Часть 12. Работа с модулями USART и UART.
  13. Часть 13. Работа с модулями ADC
  14. Часть 14. Использование DMA
  15. Часть 15. Таймеры. Глава 1 — Введение. Простейшие таймеры
  16. Часть 15. Таймеры. Глава 2 — Таймеры общего назначения TIM9 — TIM14
  17. Приложение 1. Набор инструкций THUMB-2 и особенности их использования
  18. Приложение 2. Таблица векторов прерываний для семейств STM32F101, STM32F102, STM32F103
  19. Приложение 3. Драйвера и функции библиотеки StdPeriph

radiohlam.ru

Приличный (без bit-banging) и дешёвый SPI-flash программатор, c DMA SPI и USB на основе flashrom и maple-mini (stm32).

В общем, понадобилось слить прошивку и прошить роутер TP-link (пересадить его с S25FL032A/P на M25P128). В итоге в сусеках интернета был найден на гитхабе проект github.com/dword1511/stm32-vserprog, который реализует то, что и указано в заголовке. Учитывя, что стоит она $4.2, и она у меня уже есть, я был очень рад.

В общем, клонируем git’ом, запускаем
git clone https://github.com/dword1511/stm32-vserprog.git

потом
make BOARD=maple-mini

потом прошиваем. Лично я прошиваю через openocd и J-Link.
Потом берём из гита последний flashrom
git clone https://github.com/jhcloos/flashrom.git

и берём
apt-get build-dep flashrom

Потом как обычно,
./configure && make && sudo make install

Схема подключения spi flash к stm32 есть в схеме в каталоге с stm32-vserprog.
Вот так происходит чтение флешки:

/usr/local/sbin/flashrom -p serprog:dev=/dev/ttyACM0:4000000 -r file-to-save.bin 
flashrom v0.9.8-r1919 on Linux 3.16.0-4-amd64 (x86_64)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
serprog: Programmer name is "stm32-vserprog"
serprog: requested mapping AT45CS1282 is incompatible: 0x1080000 bytes at 0x00000000fef80000.
Found Spansion flash chip "S25FL032A/P" (4096 kB, SPI) on serprog.
Reading flash... done.

4МБ за 8 сек. Впечатляет.
Всем советую.

P.S. Залил прошивку в 16МБ


[email protected]:~/src/rom$ sudo /usr/local/sbin/flashrom -p serprog:dev=/dev/ttyACM0:4000000 -w tplink.bin --force
flashrom v0.9.8-r1919 on Linux 3.16.0-4-amd64 (x86_64)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
serprog: Programmer name is "stm32-vserprog"
serprog: requested mapping AT45CS1282 is incompatible: 0x1080000 bytes at 0x00000000fef80000.
Found Micron/Numonyx/ST flash chip "M25P128" (16384 kB, SPI) on serprog.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.

Это всё заняло минуты 4.

we.easyelectronics.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *