Самодельная и доступная альтернатива продаваемому программатору от STMicroelectronics. Является выдержкой и компиляцией нескольких статей и схем найденных в интернете. Реализация в минимально возможном форм-факторе.
У любого разработчика встраиваемого софта должен быть программатор для устройств которые он использует. В моём случае микроконтроллеры фирмы STMicroelectronics, а так же Milandr (российские процессоры на ядре ARM).
Покупка данного девайса весьма затратна, особенно если сравнивать с себестоимостью компонентов — печатной платы и радиодеталей.
Решено было сделать программатор самостоятельно. За основу легли схемы отладочных плат для различных МК, в итоге получился полнофункциональный отладочный модуль и не только для stm32, но и для stm8 и даже миландровских чипов (проверено пока только на К1986ВЕ92, но думаю и другие тоже будут шиться и отлаживаться).
Основные функции:
Интерфейсы программирования:
Сам программатор можно рассмотреть на фото выше. Провода растянутые по плате это лишь последующие доработки связанные с отсутствием необходимого светодиода (слева) и с необходимостью программировать платы без подачи на них питания (справа).
Схема устройства максимально проста и понятна:
Ядром является контроллер 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
По-хорошему, данную тему надо было затронуть еще во 2-й или 3-й части данного цикла статей. Но лучше поздно, чем ни когда, поэтому поехали! В этой части мы познакомимся с программатором 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 в форм-факторе флешки:
Интерфейс SWD, по которому программатор подключается к микроконтроллеру имеет 2 линии:
Это является необходимым минимумом для успешной загрузки прошивки в новенький микроконтроллер или отладки и среды разработки (из IAR-а, например). Во всех микроконтроллерах STM32 выводы программирования совмещены со следующими портами ввода-вывода:
Выводы PA13 и PA14 можно использовать и как самые обычные порты ввода-вывода, однако, в этом случае теряется возможность производить отладку прошивки из среды разработки. Кроме того, если из прошивки, загруженной в МК, изменить настройки по-умолчанию пинов PA13 и PA14, процесс загрузки новой прошивки становится затруднителен, придется задействовать еще один провод, соединяющий программатор и МК: линию RESET. В этом случае, перед загрузкой прошивки, ST-Link выполнит сброс микроконтроллера, тем самым переведет пины PA13 и PA14 в состояние по-умолчанию, а уже после этого загрузит в МК новую прошивку. Чтобы задействовать функцию сброса микроконтроллера перед загрузкой прошивки в IAR-е в разделе настройки ST-Link-а необходимо выбрать опцию «Reset Pin»:
На этом пока все, спасибо за внимание!!! Продолжение
dimoon.ru
Одна из предыдущих статей (вот она) была посвящена тому, как прошивать контроллер на отладочной плате 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 правильно!
Самая главная ошибка, сделанная автором — это неправильно выбранный инструментарий. Начинать дружить с контроллерами 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
Микроконтроллеры STM32 приобретают все большую популярность благодаря своей мощности, достаточно разнородной периферии, и своей гибкости. Мы начнем изучать STM32F103C8T6, используя бюджетную тестовую плату, стоимость которой не превышает 2 $ (у китайцев). Еще нам понадобится ST-Link программатор, стоимость которого около 2.5 $ (у китайцев). Такие суммы расходов доступны и студентам и школьникам, поэтому именно с такого бюджетного варианта я и предлагаю начать.
Этот микроконтроллер не является самым мощным среди STM32, но и не самый слабый. Существуют различные платы с STM32, в томе числе Discovery которые по цене стоят около 20 $. На таких платах почти все то же, что и на нашей плате, плюс программатор. В нашем случае мы будем использовать программатор отдельно.
Итак, начнем с того, что попробуем прошить микроконтроллер. Это можно сделать с помощью USB-Uart переходника на базе микросхемы FT232 через USART, или с помощью программатора ST-Link.
Скачать тестовый файл для прошивки можно здесь. Программа мигает светодиодом на плате.
В системной памяти 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. Программа в микроконтроллере должен заработать.
Скачать 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
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.
При использовании программатора 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…
После завершения прошивки и проверки, загруженная программа автоматически запустится.
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
sudo ./st-flash read dump.bin 0x8000000
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 (Книжка на русском языке)
Device family | Product type | Device subfamily | Pin count | Flash memory size | Package | Temperature 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. |
STM32 | F | 103 | C | 8 | T | 6 |
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
Ну, вот мы и дошли до одного из самых интересных этапов, — как же залить в контроллер готовую прошивку и оживить наконец нашу железяку.
Вообще-то прошивать контроллеры 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 — любой уровень) и перезагрузить его.
radiohlam.ru
git clone https://github.com/dword1511/stm32-vserprog.git
make BOARD=maple-mini
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МБ
scaldov@scyld:~/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