RP2040-Zero часто покупают как альтернативу Arduino Nano, ESP32-C3 SuperMini или Raspberry Pi Pico: она компактна, недорога, имеет современный USB-C и достаточно производительна для датчиков, дисплеев, светодиодных лент, USB-устройств, MIDI-контроллеров и нестандартной периферии на PIO.
Важно не путать названия. RP2040 — это сам микроконтроллер, разработанный Raspberry Pi. RP2040-Zero — конкретная плата разработки Waveshare, построенная вокруг этого микроконтроллера. У других производителей есть свои платы на том же чипе: Raspberry Pi Pico, Seeed XIAO RP2040, Adafruit QT Py RP2040 и десятки других. Код для RP2040 часто переносим между ними, но распиновка, размер Flash, встроенные светодиоды и питание у плат отличаются.
Что внутри RP2040-Zero
Основа платы — RP2040. Это двухъядерный Arm Cortex-M0+ микроконтроллер с частотой до 133 МГц, 264 КБ встроенной SRAM и богатым набором периферии. Сам чип не содержит Flash-памяти для программы: она вынесена на плату отдельной микросхемой QSPI. В версии Waveshare RP2040-Zero обычно установлено 2 МБ Flash.
| Характеристика | RP2040-Zero |
|---|---|
| Микроконтроллер | Raspberry Pi RP2040 |
| Процессор | 2 × Arm Cortex-M0+ до 133 МГц |
| Оперативная память | 264 КБ SRAM |
| Flash для программы | 2 МБ QSPI NOR Flash |
| Логические уровни GPIO | 3,3 В |
| USB | USB-C, USB 1.1 device/host на уровне RP2040 |
| Выводы на гребёнке | 20 многофункциональных GPIO-контактов |
| АЦП | До 4 каналов 12 бит у RP2040; на гребёнку этой платы выведены GPIO26, GPIO27, GPIO28 и GPIO29 |
| Интерфейсы | 2 × UART, 2 × I2C, 2 × SPI, PWM, PIO |
| Особенности платы | BOOT, RESET, адресный RGB WS2812, castellated-площадки |
| Рабочая температура чипа | −40…+85 °C по спецификации RP2040 |
RP2040 предоставляет 30 GPIO, но не все выведены на контактную гребёнку маленькой RP2040-Zero. На её основных краевых контактах доступны 20 многофункциональных GPIO; дополнительные линии, включая часть служебных сигналов, могут быть доступны через мелкие площадки. Для обычных проектов с кнопками, датчиками, I2C, SPI и дисплеями выводов обычно хватает.
Raspberry Pi заявляет для RP2040 два UART, два SPI, два I2C, 16 PWM-каналов, USB 1.1 с поддержкой host/device и восемь state machine программируемого ввода-вывода PIO. Именно PIO — особенность, из-за которой RP2040 выделяется среди похожих микроконтроллеров: она позволяет реализовывать точные нестандартные протоколы и временные последовательности независимо от основного кода.
Чем RP2040 отличается от Arduino и ESP32
RP2040-Zero — не «маленький Raspberry Pi с Linux». Это микроконтроллерная плата: она запускает одну прошивку, не имеет привычной ОС, окон, браузера и файловой системы как у Raspberry Pi Zero 2 W.
| Плата/семейство | Сильная сторона | Что учитывать |
|---|---|---|
| Arduino Uno/Nano | Простота, огромное число базовых примеров, 5-вольтовая логика у классических AVR | Значительно меньше RAM и вычислительной мощности |
| ESP32 | Wi-Fi, Bluetooth, удобен для IoT | GPIO только 3,3 В, Wi-Fi повышает потребление и усложняет тайминги |
| RP2040-Zero | USB, PIO, два ядра, предсказуемые тайминги, компактность | Нет встроенных Wi-Fi/Bluetooth, все GPIO — 3,3 В |
| Raspberry Pi Zero | Linux-компьютер, HDMI, сеть, многозадачность | Это одноплатный компьютер, а не прямой аналог микроконтроллера |
Если проекту нужны Wi-Fi или Bluetooth «из коробки», обычно проще взять ESP32. Если нужен компактный USB-MIDI-контроллер, клавиатура, HID-устройство, генерация необычного протокола, адресные светодиоды с точным таймингом или просто быстрая плата без радиомодуля — RP2040-Zero очень удачный кандидат.
Распиновка RP2040-Zero
Ниже приведены основные краевые контакты платы. Нумерация ориентирована для варианта, когда USB-C находится сверху, а плата лежит компонентами вверх. У некоторых продавцов встречаются изображения с другой ориентацией — перед подключением всегда сверяйтесь с маркировкой на текстолите.
| Контакт платы | Сигнал RP2040 | Частое применение |
|---|---|---|
| 5V | VBUS/USB 5 В | Питание от USB или 5-вольтовый вход/выход с оговорками |
| GND | Земля | Общий провод |
| 3V3 | Стабилизированные 3,3 В | Питание 3,3-вольтовых датчиков |
| GP29 | ADC3 | Аналоговый вход, GPIO |
| GP28 | ADC2 | Аналоговый вход, GPIO |
| GP27 | ADC1 | Аналоговый вход, GPIO |
| GP26 | ADC0 | Аналоговый вход, GPIO |
| GP15 | GPIO | Цифровой ввод/вывод, PWM |
| GP14 | GPIO | Цифровой ввод/вывод, PWM |
| GP13 | GPIO | Цифровой ввод/вывод, PWM |
| GP12 | GPIO | Цифровой ввод/вывод, PWM |
| GP11 | GPIO | SPI1 TX по распространённой конфигурации |
| GP10 | GPIO | SPI1 SCK по распространённой конфигурации |
| GP9 | GPIO | SPI1 CS по распространённой конфигурации |
| GP8 | GPIO | SPI1 RX по распространённой конфигурации |
| GP7 | GPIO | I2C1 SCL по распространённой конфигурации |
| GP6 | GPIO | I2C1 SDA по распространённой конфигурации |
| GP5 | GPIO | I2C0 SCL по распространённой конфигурации |
| GP4 | GPIO | I2C0 SDA по распространённой конфигурации |
| GP3 | GPIO | Цифровой ввод/вывод, PWM |
| GP2 | GPIO | Цифровой ввод/вывод, PWM |
| GP1 | UART0 RX по распространённой конфигурации | UART, цифровой ввод/вывод |
| GP0 | UART0 TX по распространённой конфигурации | UART, цифровой ввод/вывод |
Один и тот же GPIO на RP2040 можно назначать разным интерфейсам. Например, I2C0 не «приклеен» навсегда к GP4/GP5 — это просто удобная и распространённая пара. Однако начинайте с типовых назначений: готовые примеры, схемы и библиотеки обычно предполагают именно их.
Встроенный RGB-светодиод
На RP2040-Zero установлен адресный RGB-светодиод семейства WS2812. Это не обычный одиночный LED, который включают digitalWrite(): цвет передаётся последовательностью импульсов по одному GPIO. В большинстве примеров для этой платы используется GP16.
GP16 не выведен на основную гребёнку как свободный контакт, поскольку уже соединён со встроенным RGB-светодиодом. Это удобно для первого теста, но учитывайте его при выборе пинов для своего проекта.
У недорогих клонов и ревизий платы возможны отличия. Если пример с RGB не работает, сначала проверьте маркировку платы, схему продавца и распиновку именно вашей ревизии.
Питание: что можно и чего нельзя
RP2040 — 3,3-вольтовый микроконтроллер. Его GPIO не рассчитаны на 5 В. Это главное правило платы.
| Куда подаём питание | Что происходит | Ограничения |
|---|---|---|
| USB-C | Нормальный способ питания и прошивки | Нужен USB-кабель с передачей данных |
Контакт 5V | Связан с USB-питанием на многих платах; подходит для 5 В при понимании схемы питания | Не подавайте одновременно несколько источников 5 В без развязки |
Контакт 3V3 | Питание 3,3-вольтовой части | Подавайте только стабильные 3,3 В; не подключайте сюда 5 В |
| GPIO | Сигналы 0…3,3 В | 5 В на GPIO может повредить RP2040 |
Питание от батареи
В документации Waveshare указано, что VSYS на RP2040-Zero соединён с VUSB (контакт 5V). Если питать плату батареей через эту линию, нужен диод для защиты от обратного тока в USB. Питание через 3V3 возможно только от уже стабилизированных 3,3 В. Не подключайте Li-Ion/LiPo аккумулятор 4,2 В напрямую к 3V3: для него нужен стабилизатор 3,3 В.
Для первого проекта проще и безопаснее питать плату от USB-C. Для автономного устройства используйте подходящий DC-DC/LDO, предусмотрите защиту аккумулятора и измерьте фактическое потребление мультиметром. Базовые принципы питания и запаса по току разобраны в .
Прошивка и файлы UF2
У RP2040 есть встроенный USB-загрузчик. Когда плата запущена в режиме BOOTSEL, компьютер видит её как обычный USB-накопитель, чаще всего с названием RPI-RP2. Прошивка для такого режима хранится в файле с расширением .uf2.
Чтобы установить MicroPython, CircuitPython или свою программу в формате UF2:
- Подключите плату кабелем USB-C с передачей данных.
- Зажмите кнопку BOOT.
- Не отпуская BOOT, кратко нажмите RESET.
- Отпустите BOOT.
- На компьютере должен появиться USB-диск
RPI-RP2. - Скопируйте на него нужный файл
.uf2. - Плата автоматически перезагрузится и начнёт выполнять новую прошивку.
Если ваша плата не определяется, попробуйте другой кабель: многие USB-C кабели из комплекта к зарядке передают только питание. Также помогает подключение напрямую в порт компьютера без USB-хаба.
Почему файл UF2 «исчезает» после копирования?
Это нормальное поведение. Загрузчик считывает UF2, записывает прошивку во Flash и сразу перезагружает RP2040. USB-диск RPI-RP2 пропадает, потому что плата уже вышла из режима загрузчика. Если нужно снова увидеть этот диск, повторите комбинацию BOOT + RESET.
Arduino IDE: первый запуск
Для работы с RP2040 в Arduino IDE нужен пакет плат. Один из распространённых вариантов — Raspberry Pi Pico/RP2040 by Earle F. Philhower, III: он поддерживает множество плат на RP2040, включая совместимые варианты Waveshare.
Устанавливаем поддержку RP2040
- Откройте Arduino IDE.
- Перейдите в File → Preferences.
- В поле Additional Boards Manager URLs добавьте:
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
- Откройте Tools → Board → Boards Manager.
- Найдите
Raspberry Pi Pico/RP2040. - Установите пакет от Earle F. Philhower, III.
- В меню Tools → Board выберите
Waveshare RP2040 Zero, если он есть в вашей версии пакета. Если отдельного пункта нет, используйте совместимый профильRaspberry Pi Picoтолько для первого теста, но затем проверьте Flash, светодиод и pin mapping для своей платы.
После первого подключения в режиме BOOTSEL загрузка может происходить через USB-накопитель. Когда плата уже получила прошивку, Arduino IDE обычно использует USB-порт, который появляется как последовательное устройство.
Первый скетч: мигаем внешним светодиодом
Подключите:
RP2040-Zero GP15 ----[220–1000 Ом]----|>|---- GND
LEDАнод LED подключается к резистору, катод — к GND.
constexpr int LED_PIN = 15;
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
}Если LED мигает, значит плата успешно прошита, GPIO работает, а вы правильно ориентировали выводы.
Проверяем Serial Monitor
Добавьте вывод в порт:
void setup() {
Serial.begin(115200);
delay(1500);
Serial.println("RP2040-Zero запущена");
}
void loop() {
Serial.println("tick");
delay(1000);
}Откройте Serial Monitor на скорости 115200 бод. Если порт не появился, нажмите RESET, закройте другие программы, которые могут удерживать последовательный порт, и проверьте, что выбрана правильная плата в Arduino IDE.
Встроенный RGB WS2812 в Arduino
Для встроенного RGB-светодиода удобно использовать библиотеку Adafruit NeoPixel.
- Откройте Sketch → Include Library → Manage Libraries.
- Найдите
Adafruit NeoPixel. - Установите библиотеку.
Пример для GP16:
#include <Adafruit_NeoPixel.h>
constexpr int RGB_PIN = 16;
constexpr int RGB_COUNT = 1;
Adafruit_NeoPixel pixel(RGB_COUNT, RGB_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
pixel.begin();
pixel.setBrightness(20); // Начинаем с малой яркости.
}
void loop() {
pixel.setPixelColor(0, pixel.Color(255, 0, 0));
pixel.show();
delay(700);
pixel.setPixelColor(0, pixel.Color(0, 255, 0));
pixel.show();
delay(700);
pixel.setPixelColor(0, pixel.Color(0, 0, 255));
pixel.show();
delay(700);
}Если светодиод не меняет цвет, попробуйте временно сменить RGB_PIN согласно документации вашей платы. Не ставьте яркость 255 без причины: даже один WS2812 при белом цвете может потреблять десятки миллиампер, а в автономном проекте это лишний расход батареи.
MicroPython: прошивка и первый код
Для RP2040-Zero существует отдельная официальная сборка MicroPython. Скачивайте именно вариант Waveshare RP2040-Zero, а не UF2 от Raspberry Pi Pico: generic-сборка может работать, но не будет знать особенности конкретной платы так же хорошо.
Устанавливаем MicroPython
- Скачайте
.uf2для Waveshare RP2040-Zero со страницы загрузок MicroPython. - Введите плату в режим BOOTSEL комбинацией BOOT + RESET.
- Дождитесь накопителя
RPI-RP2. - Скопируйте на него файл
.uf2. - Дождитесь автоматического перезапуска.
После прошивки можно работать через Thonny, mpremote или последовательный терминал.
Первый код MicroPython: внешний LED
В Thonny откройте новый файл, выберите интерпретатор MicroPython и порт RP2040-Zero, затем выполните:
from machine import Pin
from time import sleep
led = Pin(15, Pin.OUT)
while True:
led.toggle()
sleep(0.5)Для автозапуска сохраните файл на устройство под именем main.py.
MicroPython: встроенный RGB WS2812
from machine import Pin
from neopixel import NeoPixel
from time import sleep
pixel = NeoPixel(Pin(16, Pin.OUT), 1)
while True:
pixel[0] = (32, 0, 0)
pixel.write()
sleep(0.5)
pixel[0] = (0, 32, 0)
pixel.write()
sleep(0.5)
pixel[0] = (0, 0, 32)
pixel.write()
sleep(0.5)Значения (R, G, B) задают яркость красного, зелёного и синего каналов от 0 до 255. Для первого опыта держите их небольшими: (32, 0, 0) уже хорошо видно в помещении.
Почему main.py важен?
MicroPython выполняет boot.py, если он есть, а затем main.py при каждом включении или перезагрузке платы. В main.py размещают код устройства, который должен работать автономно. Для коротких экспериментов можно запускать строки через REPL, но после отключения питания они исчезнут, если не сохранены в файл.
CircuitPython: вариант с USB-диском CIRCUITPY
CircuitPython тоже поддерживает Waveshare RP2040-Zero. После установки плата обычно появляется как накопитель CIRCUITPY, а основной код лежит в файле code.py. Изменили файл, сохранили — код автоматически перезапустился.
Установка выглядит так же:
- Скачайте CircuitPython UF2 для
Waveshare RP2040-Zero. - Введите плату в BOOTSEL-режим.
- Скопируйте UF2 на
RPI-RP2. - После перезапуска откройте диск
CIRCUITPY. - Создайте или отредактируйте
code.py.
Пример мигания внешним LED:
import time
import board
import digitalio
led = digitalio.DigitalInOut(board.GP15)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = not led.value
time.sleep(0.5)CircuitPython удобен, когда вы часто пробуете датчики и библиотеки Adafruit: исходник хранится на доступном USB-диске, а большая часть периферии имеет готовые примеры. Подробнее о различиях интерпретаторов читайте в статье .
Подключаем I2C-датчик: BME280 или OLED
I2C позволяет подключить несколько датчиков двумя сигнальными проводами. Для RP2040-Zero распространённая пара — GP4 = SDA и GP5 = SCL.
RP2040-Zero BME280 / OLED
----------- ------------
3V3 -------------- VCC
GND -------------- GND
GP4 (SDA) -------------- SDA
GP5 (SCL) -------------- SCLИспользуйте питание 3,3 В, если модуль рассчитан на него. Многие BME280/OLED-платы умеют работать от 3,3 В и 5 В, но важно проверить, к какому напряжению подтянуты линии SDA/SCL. GPIO RP2040 не рассчитаны на 5-вольтовые уровни.
I2C-сканер для Arduino
#include <Wire.h>
constexpr int SDA_PIN = 4;
constexpr int SCL_PIN = 5;
void setup() {
Serial.begin(115200);
Wire.setSDA(SDA_PIN);
Wire.setSCL(SCL_PIN);
Wire.begin();
}
void loop() {
int devices = 0;
for (uint8_t address = 1; address < 127; address++) {
Wire.beginTransmission(address);
uint8_t error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device: 0x");
if (address < 16) Serial.print('0');
Serial.println(address, HEX);
devices++;
}
}
if (devices == 0) {
Serial.println("I2C-устройства не найдены");
}
Serial.println("---");
delay(3000);
}Для BME280 обычно появится 0x76 или 0x77, для OLED SSD1306 часто 0x3C. Это не ошибка, если адрес не такой, как в чужом примере: он зависит от конкретного модуля и положения его адресных перемычек.
PWM: плавно регулируем яркость LED
ШИМ (PWM) быстро включает и выключает светодиод. Глаз усредняет вспышки и видит изменение яркости. Подключите LED с резистором к GP15, как в первом примере, и используйте:
constexpr int LED_PIN = 15;
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
for (int brightness = 0; brightness <= 255; brightness++) {
analogWrite(LED_PIN, brightness);
delay(8);
}
for (int brightness = 255; brightness >= 0; brightness--) {
analogWrite(LED_PIN, brightness);
delay(8);
}
}На RP2040 доступны 16 PWM-каналов. Не подключайте светодиод напрямую к GPIO без резистора: PWM не ограничивает ток, он только меняет среднюю яркость. Расчёт резистора есть в .
АЦП: читаем потенциометр
RP2040 имеет 12-битный АЦП. На RP2040-Zero для аналога удобно использовать GP26, GP27, GP28 или GP29. Подключим потенциометр на 10 кОм:
RP2040-Zero Потенциометр 10 кОм
----------- -------------------
3V3 --------------- Крайний вывод
GND --------------- Другой крайний вывод
GP26 --------------- Средний вывод (ползунок)Важно: на ползунке будет напряжение 0…3,3 В. Нельзя подключать к GP26 потенциометр, запитанный от 5 В.
constexpr int POT_PIN = 26;
void setup() {
Serial.begin(115200);
}
void loop() {
int raw = analogRead(POT_PIN);
float voltage = raw * 3.3f / 4095.0f;
Serial.print("ADC: ");
Serial.print(raw);
Serial.print(" Voltage: ");
Serial.println(voltage, 3);
delay(250);
}Некоторые Arduino core и настройки могут отдавать другое разрешение АЦП по умолчанию. Если ожидаете диапазон 0…4095, при необходимости добавьте в setup():
analogReadResolution(12);PIO: почему RP2040 любят за нестандартные проекты
Обычные микроконтроллеры имеют фиксированный набор периферии: UART, SPI, I2C, PWM. Если нужен интерфейс, которого нет в списке, приходится нагружать процессор точными задержками, писать обработчики прерываний или брать другой чип.
У RP2040 есть восемь PIO state machine — маленьких программируемых автоматов ввода-вывода. Они могут сами формировать или считывать строгую последовательность сигналов, пока ядра Cortex-M0+ занимаются логикой приложения.
PIO используют для:
- точного управления лентами WS2812/NeoPixel;
- нестандартных светодиодных матриц;
- дополнительного UART/SPI-подобного интерфейса;
- генерации сигналов с жёсткими таймингами;
- захвата быстрых импульсов;
- DVI/видеовывода на некоторых более крупных RP2040-платах.
Для первого проекта не нужно писать PIO на ассемблере. Достаточно знать, что библиотека может использовать PIO внутри, а RP2040 при этом не «тормозит» основной код так, как это иногда происходит при программном bit-banging.
Частые проблемы
Компьютер не видит RPI-RP2
- Проверьте USB-C кабель: он должен передавать данные.
- Зажмите BOOT и коротко нажмите RESET, затем отпустите BOOT.
- Попробуйте другой USB-порт без хаба.
- Если кнопки нажимать неудобно, отключите USB, удерживайте BOOT и подключите кабель снова.
- Убедитесь, что это именно RP2040-Zero, а не внешне похожая ESP32-плата.
Arduino IDE не загружает скетч
- Проверьте выбранную плату и USB-порт в меню Tools.
- Переведите плату в BOOTSEL и повторите первую загрузку.
- Закройте Serial Monitor, Thonny и другие программы, которые могут удерживать порт.
- Убедитесь, что не установлен конфликтующий пакет плат RP2040.
- Попробуйте снизить скорость загрузки, если такая опция есть в меню платы.
Не работает встроенный RGB
- Проверьте, что у вашей ревизии действительно есть WS2812.
- Убедитесь, что используется GPIO16 и библиотека поддерживает
NEO_GRB + NEO_KHZ800. - Начните с низкой яркости.
- Проверьте тип платы в Arduino core и документацию продавца: распиновка у клонов может отличаться.
I2C-сканер никого не видит
- Соедините GND датчика с GND платы.
- Проверьте, что SDA идёт на GP4, SCL на GP5 и их не перепутали.
- Питайте датчик от 3V3, если нет гарантии безопасных уровней I2C при 5 В.
- Проверьте адрес в коде и качество соединений на макетной плате.
- Не подключайте 5-вольтовые подтяжки SDA/SCL прямо к RP2040.
Плата перезагружается или USB отключается
Частая причина — питание. Светодиодная лента, сервопривод, мотор или реле не должны питаться от 3V3 платы. Используйте отдельный источник для нагрузки, объедините земли и добавьте запас по току. Разбор просадок и выбора питания — в .
Что можно собрать
- USB-MIDI-контроллер с потенциометрами и кнопками.
- Макропад или компактную USB-клавиатуру.
- Контроллер адресной ленты WS2812 с эффектами.
- Маленькую метеостанцию на BME280 и OLED.
- Логгер датчиков с SD-картой по SPI.
- Настольный таймер или часы с DS3231 и OLED.
- Контроллер для энкодера, дисплея и ручных органов управления.
- Узел проводной автоматики, где Wi-Fi не нужен или нежелателен.
Что запомнить
- RP2040-Zero — это плата Waveshare на RP2040, а не одноплатный компьютер Raspberry Pi Zero.
- RP2040 имеет два Cortex-M0+ до 133 МГц, 264 КБ SRAM, USB, PWM, ADC, I2C, SPI, UART и восемь PIO state machine.
- У RP2040-Zero обычно 2 МБ Flash, USB-C, BOOT/RESET и встроенный WS2812 на GP16.
- Все GPIO используют уровни 3,3 В: 5 В на входе может повредить плату.
- Для установки UF2 зажмите BOOT, нажмите RESET, скопируйте файл на
RPI-RP2. - Arduino IDE, MicroPython и CircuitPython подходят для старта; выбор зависит от проекта и привычного рабочего процесса.
- Для I2C удобно начать с GP4 (SDA) и GP5 (SCL), для аналоговых входов — GP26–GP29.
Проверь себя
- Можно ли считать RP2040-Zero мини-компьютером с Linux, как Raspberry Pi Zero?
- Почему датчик, работающий от 5 В, нельзя автоматически подключать к GPIO RP2040-Zero?
- Что произойдёт с файлом UF2 после копирования на диск
RPI-RP2?
Показать ответы
- Нет. RP2040-Zero — микроконтроллерная плата. Она запускает одну прошивку и не работает под Linux. Raspberry Pi Zero — одноплатный компьютер с процессором, оперативной памятью, операционной системой и файловой системой.
- GPIO RP2040 работают с уровнями 0…3,3 В и не рассчитаны на 5 В. Даже если датчик питается от 5 В, его сигнальные линии должны быть 3,3-вольтовыми либо идти через согласователь уровней/делитель, если это допустимо для данного интерфейса.
- Загрузчик записывает данные из UF2 во Flash и перезагружает плату. Поэтому диск
RPI-RP2исчезает — это нормальное поведение. Чтобы снова войти в режим загрузчика, используйте BOOT + RESET.