Теоретически, практически невозможно заблокировать Raspberry Pi Pico 2 или другие платы на RP2350, поскольку код загрузочного ПЗУ ( исходный код ) хранится в 32 КБ ПЗУ микроконтроллера и по определению является «памятью только для чтения». Однако недавно удалось «заблокировать» Raspberry Pi Pico 2, и даже тестовый пример со светодиодом не запускался на плате. Далее будет объяснён простой метод восстановления/своего рода сброса к заводским настройкам.
Сначала поясним, что произошло. Плата стала непригодной к использованию после выполнения следующей команды в процессе сборки RISC-V Linux для RP2035 при подключённой к сборочной машине Pico 2:
make flash-kernel
В определённый момент происходит копирование двоичного файла прошивки UF2, предназначенного для плат с PSRAM, которой Raspberry Pi Pico 2 не оснащена:
cp build/psram-bootloader.uf2 "/media/jaufranc/RP2350"/
После этого плата Raspberry Pi Pico 2 по-прежнему отображалась как диск «RP2350» на компьютере, и можно было скопировать другой UF2-файл (например, blink_simple.uf2), но ничего не происходило. Подключение последовательной консоли показало следующее:
Invalid PSRAM ID: 0
PSRAM setup failed
Press any key to reset.
Очевидно, что старая прошивка, ожидавшая PSRAM, продолжала работать, а копирование различных UF2-файлов (blink_simple, CircuitPython…) не давало эффекта.
Решение для восстановления заблокированной Raspberry Pi Pico 2 / платы RP2350 заключается в простом скачивании и копировании flash_nuke.uf2 (файл идентичен для RP2040 и RP2350) на диск RP2350 компьютера, что автоматически сотрёт флеш-память и восстановит работоспособность платы. Это всё.
По-видимому, прошивка RISC-V Linux создаёт разделы на плате, которые не удаляются при копировании нового UF2-файла при работе программы из флеш-памяти. Однако flash_nuke выполняется однократно из ОЗУ и не подвержен этому ограничению. Исходный код доступен @ https://github.com/raspberrypi/pico-examples/blob/master/flash/nuke/ , а следующая строка в CMakeLists.txt принудительно запускает его из ОЗУ:
pico_set_binary_type(flash_nuke no_flash)
Решение было найдено через раздел комментариев на CNX Software и форумы Raspberry Pi , где можно узнать подробности о внутренних процессах.
Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.