Известно, что ПО можно добавлять бесконечно, а всевозможные дефекты на плате полностью исправляются третьей ревизией.
И если с железом ничего не поделаешь, то для обновления прошивки придумали хороший способ обойти ограничения пространства и времени - загрузчик .
Загрузчик — это удобно и полезно, не так ли? А если загрузчик — это своя реализация, то он еще удобнее, полезнее и гибче и не стабильнее.
И конечно, очень круто!
Также это прекрасная возможность углубиться и изучить особенности используемого компьютера — в нашем случае микроконтроллера STM32 с ядром ARM Cortex-M3.
На самом деле загрузчик проще, чем кажется на первый взгляд. В доказательство под катом мы соберем собственный USB Mass Storage Bootloader!
Работать будем с самодельной платой микроконтроллера (далее МК) СТМ32F103RET .
Чтобы не перегружать публикацию лишними картинками, приведу усеченную схему этой железяки:
При написании загрузчика я руководствовался следующими принципами:
- Вам действительно нужен собственный загрузчик и хватит откладывать его в список TODO, пора сесть и заняться этим;
- Загрузчик должен иметь удобный интерфейс для загрузки программы.
Никаких драйверов, сторонних программ, плат-переходников или жгутов проводов МГТФ к целевому устройству.
Что может быть проще, чем автоматически обнаруженный USB-накопитель?
- Для работы в режиме загрузчика микроконтроллеру требуется минимальное оборудование (фактически только USB, кварц и кнопка);
- Размер ботинка не главное.
Это, конечно, важно, но мы не будем преследовать цель сжать его в пару килобайт. Без угрызений совести поднимем USB стек, поработаем с файловой системой, втыкаем печатьф() через линию и вообще ни в чем особенном себе не откажем (привет, Стандартные периферийные библиотеки !);
Немного о ФЛЕШЕ
Поскольку с собственной FLASH-памятью STM32 мы будем работать постоянно и часто, стоит сразу пояснить некоторые ключевые моменты, связанные с этим фактом.
Используемый МК содержит FLASH-память объемом 512 Кбайт. Он разделен на страницы по 2048 байт:
Для нас это означает, что записать несколько байт по произвольному адресу просто не получится.
При записи во FLASH возможен только сброс необходимых ячеек, а установка единиц осуществляется с помощью операции стирания, минимально возможный размер для которой составляет одну страницу.
Для этого используется регистр FLASH_AR , в котором достаточно написать любой адрес внутри нужной нам страницы — и он будет заполнен байтами 0xFF. Вам также необходимо не забыть разблокировать FLASH перед операциями стирания/записи.
Давайте виртуально разделим FLASH на несколько областей, каждая из которых будет иметь свое особое назначение:
- BOOT_MEM — область памяти, выделенная для загрузчика;
- ПОЛЬЗОВАТЕЛЬ_MEM — здесь мы будем хранить (и отсюда выполнять) кастомную прошивку.
Очевидно, что теперь у него есть ограничение в 200 Кбайт;
- MSD_MEM — и здесь будет диск MASS STORAGE, куда вы сможете залить прошивку, используя свой компьютер и свою любимую ОС;
- OTHER_MEM - ну давайте на всякий случай оставим еще немного места;
Это логично, ведь два противоположных случая приведут либо к нехватке памяти в ПОЛЬЗОВАТЕЛЬ_MEM , или превышение.
А теперь все то же самое, только для автомата (и удобства программатора):
Теги: #stm32 #stm32f103 #usb msd #bootloader #Программирование микроконтроллера#define FLASH_PAGE_SIZE
-
Ноутбуки И Серии Sony
19 Oct, 24 -
Zabbix — Расширение Границ Макросов
19 Oct, 24 -
Смс-Сервисы Выкидывают...
19 Oct, 24 -
10 Полезных Горячих Клавиш Для Netbeans 6
19 Oct, 24 -
Календарь Google Покажет Погоду
19 Oct, 24