Главная » Микроконтроллеры » Программирование флэш-памяти в STM32F107 через USB

Программирование флэш-памяти в STM32F107 через USB

Микроконтроллеры STM32 из группы Connectivity Line, в которую входят схемы STM32F105 и STM32F107, могут быть запрограммированы двумя основными способами: с помощью интерфейса JTAG и с помощью загрузчика, расположенного в памяти микроконтроллера.

Использование интерфейса JTAG связано с необходимостью иметь соответствующий аппаратный интерфейс. Использование загрузчика, встроенного в микроконтроллеры Connectivity Line — хотя и дешевле при программировании памяти — позволяет программировать флэш-память через один из нескольких интерфейсов связи.

В статье мы покажем, как запрограммировать память с помощью класса USB-интерфейса DFU (Device Firmware Upgrade).

Загрузчик находится в системной памяти микроконтроллеров STM32F105 и STM32F107. Он предоставляет три основных канала связи, по которым вы можете загрузить программу во флэш-память: UART, CAN и USB — класс DFU. Загрузчик, используемый в микроконтроллерах STM32F105 и STM32F107, стандартно оснащен поддержкой DFU.

Некоторые микроконтроллеры из группы Connectivity Line имеют недостаток, который в крайних случаях препятствует использованию загрузчика. Этот дефект возникает в случае микроконтроллеров, помеченных кодом даты производства менее 937, и влияет на работу всех каналов связи с загрузчиком.

Необходимо подключить к дополнительному источнику питания линии GPIO: PA10, PB5 и PD6 (рис. 1). Вы также должны помнить, чтобы ввести логическую «1» в BOOT0 и «0» в BOOT1. После выполнения этих действий и подключения источника питания микроконтроллер должен запускаться из системной памяти.

Рис. 1. Фрагмент электрической схемы устройства с микроконтроллером STM32F107, запрограммированным в режиме DFU

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

Для этого соедините плату с микроконтроллером с помощью кабеля USB A-B с ПК. Windows должна обнаружить новое устройство DFU и начать установку драйверов. После того, как мастер попросит автоматически найти подходящий драйвер, он должен найти соответствующий драйвер и установить его.

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

Рис. 2. Окно демонстрационной программы DfuSe

После установки драйвера запустите демонстрационную программу DfuSe (рис. 2). Программа должна обнаружить микроконтроллер, расположенный на плате, как устройство STM в режиме DFU. В поле DFU Mode отображаются данные, идентифицирующие устройство USB: VID, PID и номера версий.

Микроконтроллер STM32F107VBT6 имеет две программируемые области памяти:

  • Internal Flash, представляющая Flash-память и
  • Option Bytes, представляющие байты конфигурации.

Чтобы запрограммировать память, необходимо подготовить файл * .dfu, который, помимо данных, подлежащих программированию, также содержит данные, идентифицирующие версию приложения устройства, для которого этот файл предназначен.

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

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

Рис. 3. Окно файлового менеджера DFU

Программа DFU File Manager используется для подготовки файлов * .dfu (рис. 3). Первое действие, которое необходимо выполнить после запуска программы, — это выбрать операцию, которую вы хотите выполнить.

Мы можем выбрать: создание файла * .dfu из двоичных файлов или восстановление двоичных файлов из файла * .dfu. Нас интересует опция «I want to GENERATE a DFU file…». После его выбора появится окно для ввода параметров созданного файла DFU (рис. 4). Идентификатор поставщика, идентификатор продукта и номера версий не имеют значения, поэтому оставьте их без изменений. Единственным важным параметром является параметр Target ID, который в случае внутренней флэш-памяти микроконтроллера равен 0.

Рис. 4. Окно для ввода параметров созданного файла DFU

Преимущество механизма DFU заключается в возможности помещать в один файл DFU данные для нескольких разных запоминающих устройств, включая внешние запоминающие устройства, подключенные, например, через последовательные шины. Нажав кнопку «S19 или шестнадцатеричный», укажите файл, содержащий код, подлежащий программированию для памяти микроконтроллера. После выбора файла кода нажмите кнопку «Generate» и укажите расположение и имя выходного файла * .dfu. Успешная генерация файла будет указана в соответствующем сообщении (рис. 5).

Рис. 5. Информация о правильно завершенной генерации файла DFU

Рис. 6. Окно демонстрационной программы DfuSe после успешной загрузки файла * .dfu

После создания файла * .dfu перезапустите демонстрационную программу DfuSe, а затем загрузите ранее созданный файл * .dfu (рис. 6). После успешной загрузки файла * .dfu будет отображена информация о его содержимом. Чтобы запрограммировать флэш-память, нажмите кнопку «Upgrade».

Появится сообщение, показанное на рис. 7, информирующее вас о том, что невозможно проверить, загружается ли файл * .dfu на правильное устройство. Подтвердите свою готовность продолжить процесс загрузки, нажав кнопку «Yes». Успешная загрузка программы во флэш-память будет указана в соответствующем сообщении (рис. 8).

Рис. 7. Сообщение о том, что невозможно проверить, загружается ли файл * .dfu на правильное устройство

Рис. 8. Сообщение о правильном сохранении флэш-памяти микроконтроллера

Подготовка файла * .dfu из файла * .hex довольно громоздка и делает метод программирования памяти с использованием механизма DFU не очень полезным на этапе создания программы. Как упоминалось ранее, механизм DFU был разработан для простого обновления программного обеспечения в операционных устройствах, и его полезность на этапе производства вызывает много споров.

Программирование с использованием DFU следует рассматривать как «экстренное» решение при отсутствии памяти для программирования с другим, более удобным способом программирования памяти.

Оставить комментарий

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

*