Raspberry pi pico linux

Поскольку на Raspberry Pi Pico не встанет Linux, умелец портировал на плату Fuzix

16 февраля 2021 года разработчик Дэвид Гивен представил порт ОС Fuzix для микроконтроллера Raspberry Pi Pico RP2040. Причем буквально за несколько дней перед этим он портировал Fuzix на микроконтроллер ESP8266 и записал об этом отдельное видео.

В порте Fuzix на RP2040 есть поддержка SD-карт для установки файловой системы UNIX и файла подкачки, а также поддерживается полный набор основных инструментов, включая запуск до 15 процессов, запуск пользовательских двоичных файлов, использующих до 64 КБ кода и данных каждый, работает последовательная консоль на UART0, доступен полный набор бинарных файлов ядра Fuzix — fsck, оболочка Bourne, стандартные инструменты Unix, клон vi, а также несколько простых игр.

Гивен пояснил, что текущий порт Fuzix на RP2040 запускается стабильно, но еще требует доработки. На данный момент в нем нет поддержки многозадачности, пайпов и бортовой флэш-памяти NAND.

Разработчик уточнил, что это наоборот хорошо, что порт использует только одно ядро ​​двухъядерного чипа Arm Cortex-M0+, оставляя возможность для задействования другого ядра и PIO блоков для различных других целей. Вдобавок порт Fuzix потребляет для работы только часть из 269 КБ оперативной памяти устройства.

Гивен заметил, что Raspberry Pi Pico работает немного медленнее ESP8266, но он еще не пробовал разгонять микроконтроллер. Он рассказал, что при штатных частотах производительности RP2040 вполне достаточно для интерактивного Unix.

Для создания порта Fuzix на RP2040 Гивен использовал существующую документацию и SDK Raspberry Pi Pico. Для сборки системы он использовал cmake. Также он использовал при создании порта OpenOCD для Pico.

Инструкция по установке ОС Fuzix и схема программирования микроконтроллера Raspberry Pi Pico RP2040 находятся в этом архиве.

В январе этого года Raspberry Pi Foundation представила микроконтроллер Pi Pico за $4 на своем кремнии. За обработку данных отвечает двухъядерный процессор Arm Cortex M0+, работающий на частоте до 133 МГц. Также присутствует 264 КБ встроенной оперативной памяти и 2 МБ флэш-памяти, USB 1.1 и каналы ввода-вывода общего назначения (пользователю доступны 26, из которых три являются аналоговыми входами). Подробное описание микроконтроллера приведено в этой публикации.

Fuzix — это UNIX-подобная минималистичная операционная система (потребляющая очень мало объема ресурсов) для слабых процессоров, например, на базе архитектуры Zilog Z80. Ее создал в 2014 году разработчик ядра Linux Алан Кокс. Fuzix состоит из ядра, компилятора C и набора основных UNIX-подобных приложений.

Источник

Raspberry Pi Documentation

Technical Specification

Raspberry Pi Pico is a low-cost, high-performance microcontroller board with flexible digital interfaces. Key features include:

RP2040 microcontroller chip designed by Raspberry Pi in the United Kingdom

Dual-core Arm Cortex M0+ processor, flexible clock running up to 133 MHz

264KB of SRAM, and 2MB of on-board Flash memory

Castellated module allows soldering direct to carrier boards

USB 1.1 with device and host support

Low-power sleep and dormant modes

Drag-and-drop programming using mass storage over USB

26 Г— multi-function GPIO pins

2 Г— SPI, 2 Г— I2C, 2 Г— UART, 3 Г— 12-bit ADC, 16 Г— controllable PWM channels

Accurate clock and timer on-chip

Accelerated floating-point libraries on-chip

8 Г— Programmable I/O (PIO) state machines for custom peripheral support

Pinout and Design Files

Design Files

Download Design Files (Cadence Allegro)

More information on Fritzing is available on the fritzing.org web site.

Documentation

Documentation for Raspberry Pi Pico and other RP2040-based boards.

RP2040 Device

A microcontroller by Raspberry Pi

Using RP2040 microcontrollers to build boards and products

Raspberry Pi Pico

An RP2040-based microcontroller board.

C/C++ development with Raspberry Pi Pico and other RP2040-based microcontroller boards

While it is not officially supported there is a Pico Setup for Windows installation tool which automates installation of the C/C++ SDK on Windows 10.

Software Development

Libraries and tools for C/C++ development on RP2040 microcontrollers

Читайте также:  Windows server 2019 essentials отличия от standart

A MicroPython environment for RP2040 microcontrollers

The API level Doxygen documentation for the Raspberry Pi Pico C/C++ SDK is also available as a micro-site.

If you are building applications with the C/C++ SDK and targetting boards other than the Raspberry Pi Pico, you will need to pass -DPICO_BOARD=boardname to CMake. Here boardname is the name of your board, e.g. for the Adafruit Feather RP2040 you should pass -DPICO_BOARD=adafruit_feather_rp2040 . See the boards/ directory in the Pico SDK, and the forums, for more information.

Software Utilities

What is on your Pico?

If you have forgotten what has been programmed into your Raspberry Pi Pico, and the program was built using our Pico C/C++ SDK, it will usually have a name and other useful information embedded into the binary. You can use the Picotool command line utility to find out these details. Full instructions on how to use Picotool to do this are available in our ‘getting started’ documentation.

Debugging using another Raspberry Pi Pico

It is possible to use one Raspberry Pi Pico to debug another Pico. This is possible via picoprobe, an application that allows a Pico to act as a USB в†’ SWD and UART converter. This makes it easy to use a Pico on non-Raspberry Pi platforms such as Windows, Mac, and Linux computers where you don’t have GPIOs to connect directly to your Pico. Full instructions on how to use Picoprobe to do this are available in our ‘getting started’ documentation.

Resetting Flash memory

Pico’s BOOTSEL mode lives in read-only memory inside the RP2040 chip, and can’t be overwritten accidentally. No matter what, if you hold down the BOOTSEL button when you plug in your Pico, it will appear as a drive onto which you can drag a new UF2 file. There is no way to brick the board through software. However, there are some circumstances where you might want to make sure your Flash memory is empty. You can do this by dragging and dropping a special UF2 binary onto your Pico when it is in mass storage mode.

Источник

Raspberry Pi Pico на МК RP2040: начало и первые шаги. Что есть поесть за $4

Начало

Raspberry Pi Foundation всегда знает чем порадовать или удивить нас, а так же как подталкивать других производителей на интересные шаги и решения для хорошей конкуренции.
В четверг (рыбный день, кстати) 21-ого января 2021 года был анонсирован выпуск нового микроконтроллера RP2040 и небольшой платы с его применением, которая получила название Raspberry Pi Pico.

Честно говоря, я прочитал эту новость и не планировал ничего делать по этому поводу. Но потом случайно заметил несколько особенностей этого микроконтроллера, что разбудило любопытство во мне и подтолкнуло к покупке пары плат для дальнейших экспериментов. Очень привлекло наличие PIO блоков и множество PWM. Справедливости ради, PWM можно как-то решить, а вот с PIO есть смысл поиграться.

После пары дней занимательной возни я решил поделиться своим небольшим опытом с Хабром и его гостями.

К сожалению, с PIO я недостаточно освоился и поэтому возможности PIO выходят за рамки этой статьи. Но если будет очень интересно сообществу, то возможно продолжение после того, как будет чем поделиться.

Введение

Raspberry Pi Pico является платой с микроконтроллером RP2040.

Надо помнить, что это не компьютер, на котором запущена взрослая ОС типа Linux, а именно микроконтроллер и поэтому цели применения у Pico отличаются от той же Raspberry Pi Zero и других старших продуктов семейства Raspberry Pi.

Приведу часть технических характеристик:

  • Два ядра Arm Cortex-M0+ @ 133 МГц
  • 264 КБ памяти (284 КБ если отключить XIP кеширование и использовать память USB)
  • 2 МБ флеш-память с XIP кешированием. В RP2040 нет встроенной флеш-памяти, поэтому чип распаян на плате. У RP2040 есть поддержка до 16 МБ внешней флеш-памяти
  • DMA контроллер
  • 4 x 12-разрядных аналоговых входа (на Pico доступно для пользователя 3 из них)
  • 2 × UART
  • 2 × SPI
  • 2 × I 2 C
  • 16 × PWM каналов
  • Встроенный сенсор температуры
  • Всего 30 GPIO пинов (3,3 вольта)
  • MicroUSB B порт с USB 1.1 контроллером и поддержкой хоста
  • 2 × PIO блока для своих собственных интерфейсов
  • 2 x PLL (один для USB, второй для остального)
  • Поддержка UF2 для загрузки бинарников
  • Поддержка SWD для загрузки и отладки
  • Поддержка спящих режимов и пониженной частоты для снижения потребления
Читайте также:  Как открыть меню восстановления windows 10 при загрузке

RP2040 декодируется как:

RP: Raspberry Pi
2: два ядра
0: ядра M0+
4: минимум 256 КБ памяти
0: нет встроенной флеш-памяти

PIO блоки дают возможность создавать свои интерфейсы. Например, можно запрограммировать интерфейс WS2812, добавить I 2 S, SDIO или VGA и т.п.

Ещё одна интересная штука: ядро Cortex-M0+ не содержит в себе блока вычислений с плавающей запятой. Обычно это эмулируется библиотеками GCC, но тут Raspberry Pi использует более быстрое оптимизированное решение от автора Qfplib, которое лицензировано для использования на RP2040.

Плата

Немного о самой плате Raspberry Pi Pico.

Плата имеет удобный размер 21мм x 51мм. Есть даже отверстия для монтирования, чем может похвастаться не каждая похожая плата.

Можно припаять пины для использования с макеткой или запаять весь модуль поверхностным монтажом на другую плату.

На Pico стоит понижающий преобразователь на 3,3 Вольта. И это не просто линейный преобразователь, которые часто встречаются на недорогих аналогичных платах, а buck-boost SMPS на Richtek RT6150B. Благодаря этому входное питание платы может быть в пределах 1,8 — 5,5 Вольт.

Флеш-память W25Q16JV, хоть, и стоит внешняя, но перепаивать её будет не такой уж и тривиальной задачей, так как чип в корпусе USON-8 (мне лично точно не под силу).
Есть кнопка BOOTSEL и светодиод на GPIO25. Так же выведен SWD для отладки.

Кстати, можно использовать вторую плату Pico как отладчик по SWD.

Входы-выходы

На Raspberry Pi Pico выведено почти все входные-выходные пины (26 из 30). Официальная распиновка платы:

Некоторые пины задействованы для внутреннего применения:

GPIO23: выход для контроля энергосбережения SMPS. Можно регулировать пульсации за счёт изменения КПД преобразователя
GPIO24: вход для VBUS sense (1 если VBUS по MicroUSB подключен)
GPIO25: выход на светодиод, расположенный на плате
GPIO29: аналоговый вход для измерения VSYS/3
Сам USB порт дополнительно выведен на точки TP1, TP2 и TP3 внизу платы.

Разработка

На данный момент официально предлагаются следующие варианты для разработки под RP2040:

  • C/C++ с использованием предлагаемого Pico SDK
  • CircuitPython для Pico
  • MicroPython для Pico

Варианты на Python’е имеют много своих ограничений, по большей части которые связаны с ограничением памяти микроконтроллера, но для многих быстрых прототипов на коленке этого должно хватить.

Попробую вкратце пройтись по каждому из этих подходов.

Постараюсь не особо заострять внимание на установку и конфигурацию для каждого способа, так как каждый из них потянет на отдельную статью. Вместо этого расскажу некоторые особенности и приведу примеры кода для них.

RP2040 имеет встроенный загрузчик, который поддерживает UF2 (разработка Microsoft) для загрузки бинарников. Это представляет из себя внешний USB накопитель, на который можно просто скопировать бинарник.

Когда я купил плату в магазине, то во флеш-памяти ничего не было и UF2 активировался автоматически при подключении по USB. Когда программа записана на флеш-памяти, то UF2 режим можно активировать удерживанием кнопки BOOTSEL при подачи питания по USB. Появится накопитель «RPI-RP2», который можно использовать для копирования бинарных файлов uf2.

Для отладки можно использовать SWD. Если нет подходящего отладчика, то можно использовать ещё одну плату Pico с прошитым отладчиком.

Как более простой вариант Pico может выводить данные стандартного вывода на UART или прикидываться USB CDC и выводить в обычный терминал типа PuTTY, minicom или аналогичный с параметрами по-умолчанию 115200 8n1.

C/C++ с Pico SDK

Пожалуй, этот подход получит максимальное использования «железа» на данный момент.
Raspberry Pi опубликовали неплохую документация на данную тему, с которой можно ознакомиться тут.

В своё время для ESP8266 мне пришлось пройти достаточно длинный квест для установки и настройки SDK. Но первоначальная установка окружения для RP2040 мне показалась намного более простой и удобной.

В оригинальном документе достаточно подробно описаны шаги для установки SDK на Linux, macOS и Windows.

Вариант с разработкой на Raspberry Pi 4B или 400 с Linux будет самым простым, так как есть скрипты, которые сделают первоначальную конфигурацию (даже установку Visual Studio Code):

У меня все Raspberry Pi 4 оказались в каких-то своих тёмных делах, да и как-то привычнее разрабатывать на более удобных компах. По этой причине был выбран путь установки окружения вручную. Тем более, это оказалось не таким уж и сложным.

Весь процесс начальной подготовки сводится к следующим шагам (в данном случае шаги выполнялись на macOS и Linux):

Пример кода для мигания светодиодом с использованием Pico SDK:

Читайте также:  Sketch для windows как установить

Можно попробовать собрать эту мигалку из примеров:

Если всё прошло без ошибок, то в результате мы получим файлы, среди которых будет blink.uf2. Этот файл можно скопировать на Pico в режиме UF2 (надо удерживать кнопку BOOTSEL во время подачи питания по USB).

После копирования Pico автоматически перезагрузится и можно наслаждаться «hello world» на микроконтроллере.

В «pico-examples» есть достаточно много интересных примеров. В том числе и примеры с использованием PIO. Выглядит очень интересно. Возможно, расскажу об этом потом, но надо самому разобраться для начала.

Для создания начального шаблона для своего проекта есть инструмент от Raspberry Pi.

Он создаёт шаблоны под Pico SDK, Visual Studio и добавляет поддержку разных библиотек на разную периферию.

CircuitPython

Я много слышал про MicroPython и CircuitPython, но никогда не сталкивался. А тут появилась хорошая возможность пощупать.

CircuitPython является форком MicroPython, но со своими плюшками. Пожалуй, самая заметная плюшка в том, что CircuitPython создаёт USB флешку со своей файловой системой, где можно напрямую редактировать скрипты на Python’е в своём любимом IDE. При любой записи изменённого скрипта происходит автоматический перезапуск платы и выполнение кода.
В терминале можно видеть результат или запустить интерактивный режим для выполнения команд в нём, что тоже помогает в отладке.

Установка CircuitPython достаточно проста:

  1. Скачать файл UF2 файл с CircuitPython’ом на circuitpython.org/board/raspberry_pi_pico
  2. Перевести Pico в режим UF2 удержанием BOOTSEL во время подачи питания USB
  3. Скопировать файл из #1 на флешку RPI-RP2, после чего Pico перезапустится автоматически

После этого из системы уйдёт RPI-RP2 и вместо него появится новый накопитель CIRCUITPY. На этом новом накопители должен быть файл code.py, с которого начинается выполнение кода. Так же там будет пустая директория «lib», куда можно добавлять сторонние и свои библиотеки.
Файл code.py можно изменять прямо на этом накопителе в своём любимом редакторе. Adafruit советует использовать свой MU Editor, но у меня он зависает при запуске. Наверно, это даже к лучшему, так как я всё равно пользовался бы чем-то другим.

Так же доступна консоль на последовательном порту с параметрами 115200 8n1. При подключении можно получить доступ к интерактивному Python’у и выводу в консоль через «print» в скриптах.

Наша мигалка на CircuitPyhon будет выглядеть примерно так:

Adafruit предлагает достаточно большой набор библиотек для работы с разным оборудованием.
Можно скачать .zip архив со всеми официальными доступными библиотеками для CircuitPython на circuitpython.org/libraries

Рекомендуется забирать .mpy версию. Это готовый байт-код, который откомпилирован под нужную версию CircuitPython.

MicroPython

MicroPython и CircuitPython достаточно близки друг к другу, но с некоторыми особенностями для отладки и API.

Установка MicroPython тоже достаточно проста:

  1. Скачиваем UF2 со свежим релизом тут (вкладка «Getting started with MicroPython»)
  2. Переводим Pico в режим UF2 удерживанием BOOTSEL во время подачи питания USB
  3. Копируем .uf2 файл из первого шага на RPI-RP2

На этот раз RPI-RP2 уходит, но новый накопитель не появляется. Можно подключиться терминалом на только что появившийся порт (115200 8n1), по которому будет доступна интерактивная консоль Python’а.

Для работы с кодом предполагается использование Thonny (возможно, есть и другие варианты). Это минималистичный IDE, который может редактировать код напрямую на плате микроконтроллера.

После установки Thonny в настройках надо подключить Pico. Это сделать можно через меню Tools — Options, потом в закладке «Interpreter» выбрать «MicroPython (Raspberry Pi Pico)» в поле «Which interpreter or device», а в поле «Port» выбрать порт, на котором подключена плата Pico.

Настройку лучше выполнять при подключенной Pico, что бы Thonny мог найти нужный порт.

Пример для мигания на MicroPython:

Выводы (на этот раз не контроллера)

На мой взгляд для такого свежего и нового микроконтроллера уже есть достаточно инструментов для начала экспериментов.

Уверен, что фанатам Arduino не придётся долго ждать когда Pico будет портирован на их любимую платформу. Зато пока есть хороший повод поиграться с Python’ом.

PIO выглядит очень интересной фишкой и я надеюсь заняться этим плотнее по мере появления свободного времени.

Ещё недавно я наткнулся на TensorFlow Lite Micro для Pico для запуска моделей машинного обучения.

В целом, я очень рад за новый продукт в линейке Raspberry Pi и надеюсь, что ему предстоит много приятных приключений и открытий в нашем мире.

Некоторые компании уже объявили о выходе своих плат на этом микроконтроллере (в том числе и с беспроводным интерфейсом), что должно дать больше возможностей.

Источник

Оцените статью