STM32F407: внустрисхемное программирование через Ethernet |
![]() |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Внутрисхемное программирование (In-Application Programming, IAP) - метод программирования памяти программ FLASH, когда это делает программа, работающая в той же самой памяти FLASH (самопрограммирование). Это дает возможность загрузить код приложения в память кристалла с использованием высокоскоростных протоколов обмена данными. Далее приведен перевод даташита UM1709 "STM32Cube Ethernet IAP example" компании ST [1]. Это руководство пользователя предназначено для разработчиков, использующих драйвера firmware STM32CubeHAL на базе микроконтроллеров STM32F2x7xx и STM32F4x7/9xx. Предоставляется реализация IAP с использованием канала связи Ethernet. Поверх стека LwIP TCP/IP предоставлено 2 возможных решения: • IAP с использованием TFTP (Trivial File Transfer Protocol). Примечание: в этом документе STM32Cube™ [2] относится к STM32CubeF2 и STM32CubeF4, микроконтроллерам от STM32F4xx до STM32F4x7xx и STM32F4x9xx, которые работают на оценочных платах STM324xx-EVAL, STM324xG-EVAL, STM324x9I-EVAL и подобных. Скриншоты и имена файлов, встречающиеся в этом документе, соответствуют примерам приложения, запущенным на микроконтроллерах STM32F4. Однако они также могут относится и к STM32F2x7xx. [Обзор IAP] IAP в своей сути означает обновление кода firmware (прошивка микроконтроллера) "в поле" (т. е. у конечного пользователя) с использованием интерфейсов обмена данными микроконтроллера, таких как UART, USB, CAN и Ethernet. Другой широко распространенный термин для той же самой функции - бутлоадер (bootloader, загрузчик кода). Когда Вы запускаете (boot) микроконтроллер, то Вы можете ввести его в один из 2 режимов: • Режим IAP, когда выполняется код загрузчика. И код IAP, и код основного приложения оба находятся во встроенной памяти программ микроконтроллера (MCU FLASH). Код IAP обычно сохраняется в первых страницах MCU FLASH, а код приложения пользователя занимает остальные страницы FLASH. На рис. 2 показан основной алгоритм работы IAP. Рис. 2. Как работает IAP. Когда доступен интерфейс Ethernet, то ему часто делают предпочтение в выборе для IAP, потому что он обладает следующими достоинствами: • Высокоскоростной обмен данными (10/100 мегабит/сек). [TFTP IAP] Протокол TFTP широко используется во всем мире для обновления прошивок сетевого оборудования (например, такое обновление поддерживается всеми коммутаторами и роутерами Cisco, и в загрузчиках встроенных систем, основанных на Linux). Протокол TFTP прост, и он работает поверх транспортного протокола UDP. Основная область применения протокола - локальная сеть (LAN). TFTP базируется на принципах архитектуры клиент/сервер, где клиент запрашивает сервер на предмет передачи файла (запрашивает операцию чтения или записи). В нашем случае сервер реализован на стороне микроконтроллера, и он обрабатывает запрос на запись со стороны клиента TFTP, запущенного на компьютере PC. Простейший сервер TFTP реализован поверх стека протоколов LwIP, который имеется в пакете STM32Cube™ [2]. Передача файла инициируется со стороны клиента TFTP, который посылает запрос Read или Write серверу TFTP. Когда сервер подтверждает запрос, начинается передача файла. Данные пересылаются блоками фиксированного размера (например, блоками по 512 байт). Каждый переданный блок данных должен быть подтвержден получателем до того, как может быть отправлен следующий блок. Механизм подтверждения основывается на номере блока, который отправляется с каждым блоком данных. Блок данных размером меньше, чем блок фиксированного размера, сигнализирует об окончании передачи файла. Рис. 3. Описание формата различных пакетов TFTP. Таблица 1. Коды операций TFTP (opcodes).
Эта реализация загрузчика IAP состоит из сервера TFTP, работающего поверх стека LwIP TCP/IP. Этот сервер отвечает на запросы записи файла, принятые от сетевого клиента TFTP (запущенного на компьютере PC). Запросы TFTP на чтение файла игнорируются. Вместо записи принятых файлов в файловую систему, как это бывает на обычном сервере TFTP, наш сервер TFTP записывает принятые блоки данных в MCU Flash (область памяти программ пользователя, которая находится за программой загрузчика IAP). Примечание: в этой реализации фиксированный размер блока данных равен 512 байтам. Рис. 4. Алгоритм работы IAP с реализацией на основе TFTP. Чтобы протестировать IAP через TFTP, выполните следующие шаги: 1. Убедитесь в правильной установке перемычек на оценочной плате (см. секцию "Настройка рабочего окружения"). Рис. 5. Диалоговое окно TFTPD32. [HTTP IAP] Обновление firmware с использованием протокола HTTP меньше распространено, чем с TFTP, однако может быть полезным решением, когда обновление происходит не через локальную, а глобальную сеть (WAN) наподобие Internet. В этом случае для гарантии оптимальной и надежной работы используется транспортный протокол TCP (для TFTP используется UDP). HTTP как раз работает поверх TCP, и предоставляет способ отправки двоичного файла из HTML-формы WEB-страницы, которая отображается в окне HTTP-клиента (браузер Mozilla Firefox, или Microsoft Internet Explorer, или Google Chrome). Это называется HTTP Fileupload (см. RFC1867). Выгрузка файла с использованием HTTP определена в стандарте RFC1867. Этот метод выгрузки файлов основывается на формах HTML. Чтобы отправить двоичный файл данных, используется метод HTML POST (вместо метода GET). Вот пример кода HTML для реализации выгрузки файла на основе формы: < form action ="/upload.cgi" enctype="multipart/form-data" method="post"> < p>Specify a binary file to upload into STM32F4xx Flash: < br> < input type="file" name="datafile" size="40"> < /p> < div> < input type="submit" value="Upload"> < /div> < /form> Рис. 6. Вид на форму выгрузки файла, открытую в окне браузера. Нажмите кнопку Browse, чтобы выбрать двоичный файл для выгрузки, и затем нажмите кнопку Upload, чтобы отправить его серверу HTTP (WEB-сервер). В зависимости от размера файла, данные отправляются серверу в последовательных сегментах TCP. Примечание: перед тем, как отправить данные файла, web-клиент отправляет данные заголовка HTTP, которые содержат информацию об имени файла и длине содержимого и другие данные, некоторые из них будут проанализированы WEB-сервером. Клиенты WEB не всегда задействуют один и тот же формат заголовка HTTP. WEB-сервер должен разбираться с этими различиями. Эта реализация IAP основана на HTTP WEB-сервере, работающем поверх стека LwIP. Когда в адресной строке браузера будет введен IP-адрес STM32, то отобразится страница приглашения ввода логина и пароля (см. рис. 7). Это ограничивает доступ к выгрузке файла IAP - этим могут пользоваться только авторизованные пользователи. Рис. 7. Отображение web-страницы логина. Введите корректные идентификатор пользователя (User ID, логин) и пароль (Password). Логин и пароль предварительно задаются на этапе компиляции в файле main.h. Затем кликните на кнопку Login. Будет загружена страница для выбора выгружаемого файла (см. рис. 6). Примечания: 1. По умолчанию User ID установлен в user, и Password установлен в stm32. Рис. 8. Выгрузка файла завершена. На рис. 9 показан принцип IAP при работе поверх HTTP. Рис. 9. Алгоритм работы IAP при использовании HTTP. Чтобы протестировать IAP через HTTP, выполните следующие шаги: 1. Убедитесь в правильной установке перемычек на оценочной плате (см. секцию "Настройка рабочего окружения"). Примечания: 1. Если была проблема соединения, когда LCD разрешен, то соответствующее сообщение об ошибке будет отображено на экране LCD. [Настройка рабочего окружения] Конфигурация интерфейса PHY STM32. Периферийное устройство Ethernet соединено с внешним чипом PHY, чтобы предоставить физический уровень обмена данными. Определения регистров PHY и констант заданы в файле конфигурации HAL “stm32f4xx_hal_conf.h”. PHY работает в одном из двух режимов: MII и RMII; чтобы выбрать требуемый режим, пользователь заполняет параметр “MediaInterface” структуры “Init”, когда происходит инициализация периферийного устройства Ethernet. Примечание: см. документацию на Вашу плату, чтобы узнать, какой режим поддерживается и как он включается. Режим RMII не поддерживается на плате STM324x9I-EVAL. Чтобы режим RMII работал с платой STM324xG-EVAL, Вы должны предоставить тактовую частоту 50 МГц путем напайки генератора 50 МГц (SM7745HEV-50.0M или аналогичный) в посадочное место U3 (размещено возле CN3) и также снятия перемычки JP5. Генератор с платой не поставляется, его нужно приобретать отдельно. Установка адресов MAC и IP. MAC-адрес по умолчанию задан 00:00:00:00:00:02. Чтобы поменять его, измените 6 байт в файле stm32f4xx_hal_conf.h. IP-адрес установлен в значение 192.168.0.10. Чтобы поменять его, измените 4 байта в файле main.h. Настройка STM324x9I-EVAL. Чтобы запустить загрузчик IAP на плате STM324x9I-EVAL, сконфигурируйте её, как показано в таблице 2. Таблица 2. Установка перемычек STM324x9I-EVAL.
Настройка STM324xG-EVAL. Чтобы запустить загрузчик IAP на плате STM324xG-EVAL, сконфигурируйте её, как показано в таблице 3. Таблица 3. Установка перемычек STM324xG-EVAL.
Настройка STM322xG-EVAL. Чтобы запустить загрузчик IAP на плате STM322xG-EVAL, сконфигурируйте её, как показано в таблице 4. Таблица 4. Установка перемычек STM322xG-EVAL.
[Внутренняя организация firmware IAP] Таблица 5. Назначение исходных файлов проекта.
Примечание: в таблице не показаны файлы, задействованные из библиотек STM32Cube HAL, BSP и стека LwIP. Чтобы получить исполняемый код для загрузки через IAP, убедитесь в следующем: 1. Код пользовательского firmware компилируется и линкуется для запуска со стартового адреса области программы пользователя (user Flash area, этот адрес должен быть тот же самый, что и адрес, заданный макросом USER_FLASH_FIRST_PAGE_ADDRESS в файле main.h IAP). #define VECT_TAB_OFFSET 0x20000
3. Скомпилированный размер firmware не должен превышать размера области программы пользователя (user Flash area). [Заключение] В этом руководстве пользователя рассказано о технологии обновления программного обеспечения (самопрограммирование Flash) Ethernet In-Application Programming (IAP). Описанное IAP использует драйвера STM32Cube HAL для микроконтроллеров STM32F4xx и стек сетевых протоколов TCP/IP LwIP. IAP может работать в 2 вариантах - либо с поддержкой протокола TFTP, либо HTTP. [FAQ, часто задаваемые вопросы] 1. Как выбрать между статическим или динамическим (через DHCP) выбором IP-адреса? Ответ: когда закомментирован макрос #define USE_DHCP, размещенный в файле “main.h” IAP, то адрес IP назначается статически кодом микроконтроллера STM32 (по умолчанию это адрес 192.168.0.10, это значение можно поменять в файле “main.h”). Если макрос #define USE_DHCP не закомментирован, то разрешена работа протокола DHCP, и STM32 работает как клиент DHCP, так что он может получить аренду адреса от сервера DHCP. 2. Как ведет себя приложение, когда кабель Ethernet не подключен? Ответ: когда кабель Ethernet не подключен, то периферийное устройство Ethernet прекращает передачу и прием трафика, и сетевой интерфейс оказывается выключенным. Если контроллер LCD используется для отображения сообщений IAP, то на нем будет высвечено сообщение о том, что кабель не подключен, иначе на оценочной плате загорится красный светодиод (Red LED). Когда пользователи снова подключит кабель, трафик Ethernet возобновится, и сетевой интерфейс поднимется. Если используется LCD контроллер, то на нем отобразится сообщения о новом адресе IP, присвоенном интерфейсу (статически или динамически), иначе на оценочной плате загорится желтый светодиод (Yellow LED). 3. Как портировать код IAP на другую аппаратуру (оценочную плату)? Ответ: когда используется другая аппаратная платформа, то проверьте конфигурацию GPIO в функции HAL_ETH_MspInit() для периферийного устройства Ethernet, а также HAL_PPP_MspInit() или HAL_MspInit(), если приложение нуждается в дополнительной периферии PPP. [Ссылки] 1. UM1709 - STM32Cube Ethernet IAP example site:st.com. |