Загрузчик (bootloader)
Загрузчик — небольшая программа, которая запускается после сброса и умеет записать в микроконтроллер новую прошивку через обычный интерфейс: UART, USB или CAN. Благодаря ему Arduino прошивается по USB-кабелю, а STM32 — через переходник USB–UART.
Обновлено Редакция GAW
Загрузчик (bootloader) — программа, которая выполняется первой после сброса микроконтроллера и умеет принять новую прошивку по одному из обычных интерфейсов — UART, USB, CAN — и записать её во флеш-память. Если обновлять прошивку не нужно, загрузчик передаёт управление основной программе. Так микроконтроллер можно прошивать без отдельного программатора — кабелем, через который плата и так подключена к компьютеру.
Два вида загрузчиков
- Встроенный (системный). Записан производителем в отдельную область памяти и не стирается. У STM32 он запускается, если при сбросе на выводе BOOT0 единица, а BOOT1 — ноль; у STM32F103 и STM32F407 работает через USART1 по протоколу AN3155: хост посылает 0x7F, загрузчик отвечает 0x79. Режимы загрузки, организация флеш-памяти и защита — в статье Flash и загрузчик STM32.
- Пользовательский. Записывается в специальную область флеш-памяти, как обычная программа. У ATmega328P загрузочная секция находится в конце флеш-памяти, её размер задают фьюзы BOOTSZ, а фьюз BOOTRST переводит вектор сброса в её начало. Код в этой секции может перезаписывать остальную память командой SPM. Пример — Optiboot в Arduino Uno.
Как прошивают через загрузчик
Для Arduino прошивку отправляет avrdude с программатором типа arduino на скорости 115 200 бод; сброс перед загрузкой делает сигнал DTR преобразователя USB–UART. Для STM32 используют STM32CubeProgrammer или другие утилиты с протоколом AN3155. Способы прошивки AVR, в том числе без загрузчика — через ISP и UPDI, — разобраны в статье «Как прошить AVR».
Частые вопросы
Как прошивается Arduino Uno без программатора?
Загрузчиком Optiboot, который занимает конец флеш-памяти и после сброса некоторое время слушает UART. Он понимает подмножество протокола STK500 версии 1, поэтому в avrdude выбирают программатор типа arduino на скорости 115 200 бод. Сброс перед загрузкой делает сигнал DTR преобразователя USB–UART.
Как запустить встроенный загрузчик STM32?
Подать на вывод BOOT0 единицу и сбросить микроконтроллер: при BOOT0 = 1 и BOOT1 = 0 он стартует из системной памяти, где ST записала загрузчик. У STM32F103 и STM32F407 загрузчик работает через USART1 на выводах PA9 и PA10; хост начинает обмен байтом 0x7F, загрузчик отвечает 0x79.
Можно ли стереть загрузчик Arduino?
Да — если записать программу через ISP-программатор, а не через загрузчик, флеш-память, включая загрузочную секцию, стирается. После этого плата перестанет прошиваться по USB, пока загрузчик не запишут заново тем же программатором.
Источники
- STMicroelectronics. RM0008 Rev 21. Reference manual: STM32F101xx–STM32F107xx — 3.4 — режимы загрузки (таблица 9), встроенный загрузчик через USART1
- STMicroelectronics. AN3155 Rev 22. USART protocol used in the STM32 bootloader — синхронизация байтом 0x7F, чётность even, ответ 0x79; скорость 1200–115 200 бит/с
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — гл. 27 — загрузочная секция, самопрограммирование командой SPM, таблица 27-13 (BOOTSZ)
Нашли ошибку?
Смотрите также
- Flash и загрузчик STM32Страницы и секторы, BOOT0, системный загрузчик, AN3155, IAP, option bytes, RDP
- Прошивка AVRISP, HVPP, debugWIRE, JTAG, PDI, TPI, UPDI, загрузчики, avrdude
- Фьюзы AVRБиты конфигурации AVR: тактирование, загрузчик, BOD
- AVRDUDEПрошивка AVR из командной строки: ключи, Arduino, USBasp, фьюзы, ошибки