Перейти к содержанию

UF2

Чтобы прошить Raspberry Pi Pico, не нужен программатор: плата подключается к компьютеру как флешка, и на неё достаточно скопировать файл с расширением .uf2. Загрузчик в ПЗУ сам запишет программу и перезапустит чип.

Обновлено Редакция GAW

UF2 — формат файла прошивки, который загрузчик принимает через USB-накопитель: плата подключается к компьютеру как флешка, и программу записывают обычным копированием файла. Так устроен загрузчик в ПЗУ RP2040 и RP2350 — программатор не нужен.

Как это работает на RP2040. Если при включении удерживать кнопку BOOTSEL, загрузчик предоставляет USB-диск RPI-RP2: 128 МБ, файловая система FAT16, на нём только два файла — INFO_UF2.TXT с версией загрузчика и INDEX.HTM со ссылкой на документацию. Любые другие файлы диск на самом деле не хранит. Но когда на него копируют файл UF2, загрузчик узнаёт в данных блоки прошивки, записывает их во флеш-память или ОЗУ и после последнего блока перезапускает чип с новой программой.

Что внутри файла. UF2 состоит из блоков; каждый несёт адрес и порцию данных. Для RP2040 загрузчик принимает блоки с идентификатором семейства 0xe48bff56 и данными по 256 байт, а адреса флеш-памяти должны лежать в диапазоне 0x10000000–0x11000000. Готовый файл UF2 из программы создают и проверяют утилитой picotool.

RP2350. У нового чипа идентификаторов семейств несколько: rp2040, rp2350-arm-s, rp2350-arm-ns, rp2350-riscv, data и absolute. По ним загрузчик понимает, для каких ядер собрана программа. Без таблицы разделов файл записывается в начало флеш-памяти, а при её наличии — в раздел, который принимает этот идентификатор.

Подробнее о загрузчиках в целом — в термине «Загрузчик», о самих чипах — на страницах «RP2040 и RP2350» и Raspberry Pi Pico.

Частые вопросы

Как прошить Raspberry Pi Pico файлом UF2?

Отключите плату, зажмите кнопку BOOTSEL и подключите USB — Pico появится как флешка RPI-RP2. Скопируйте на неё файл .uf2: загрузчик запишет программу во флеш-память и сам перезапустит плату, диск при этом исчезнет.

Почему UF2 не записался на Pico?

Загрузчик RP2040 принимает только правильные блоки UF2: с идентификатором семейства 0xe48bff56, данными по 256 байт и адресами в допустимом диапазоне. Неправильный файл может не записаться совсем или записаться частично, а операционная система не всегда сообщает об ошибке. Проверить запись можно программой picotool.

Подходит ли файл UF2 от RP2040 для RP2350?

Загрузчик RP2350 различает семейства по идентификатору внутри файла: rp2040, rp2350-arm-s, rp2350-arm-ns, rp2350-riscv и другие. Программу нужно собирать для того чипа и того типа ядер — Arm или RISC-V, — на котором она будет работать.

Источники

  1. Raspberry Pi. RP2040 Datasheet (build 2025-02-20) — разд. 2.8.4 — загрузчик в ПЗУ предоставляет USB-диск RPI-RP2 объёмом 128 МБ с FAT16 и файлами INFO_UF2.TXT и INDEX.HTM; скопированный файл UF2 записывается во флеш-память или ОЗУ, после этого чип перезапускается; разд. 2.8.4.2 — блоки UF2 с идентификатором семейства 0xe48bff56 и данными по 256 байт, адреса флеш-памяти 0x10000000–0x11000000 с выравниванием 256 байт; UF2 создают и проверяют программой picotool
  2. Raspberry Pi. RP2350 Datasheet — разд. 5.1.18 — загрузчик RP2350 различает стандартные идентификаторы семейств UF2: rp2040, rp2350-arm-s, rp2350-arm-ns, rp2350-riscv, data и absolute; без таблицы разделов файл записывается в начало флеш-памяти, при таблице разделов — в раздел, который принимает его идентификатор
  3. Raspberry Pi. Raspberry Pi Pico Datasheet — разд. 4.1 — для загрузки по USB плату обесточивают, держат кнопку BOOTSEL при подключении USB, Pico появляется как USB-накопитель, и перетаскивание файла .uf2 записывает его во флеш-память и перезапускает плату

Нашли ошибку?