Этот год ещё только начался, а уже ознаменовался громким событием в мире микроэлектроники: компания Raspberry Pi Foundation 21 января анонсировала выпуск платы микроконтроллера, названной Raspberry Pi Pico на базе нового чипа собственной разработки RP204:

Аббревиатура названия RP2040 расшифровывается так:

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

 

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

Pico имеет размер 51мм х 21мм и может быть оснащен припаянными разъемами для соединения с макетной платой, либо может быть припаян непосредственно к печатной плате благодаря зубчатым контактным площадкам. Плата также оснащена 4-мя монтажными отверстиями, что часто очень удобно.

Основные технические характеристики микроконтроллера Raspberry Pi Pico на чипе RP2040:

  • Процессор: двухядерный ARM Cortex-M0+ @ 133 МГц. Особенность его в том, что ядро Cortex-M0+ не содержит в себе блока вычислений с плавающей запятой. Обычно это эмулируется библиотеками GCC, но тут Raspberry Pi использует более быстрое оптимизированное решение от автора Qfplib, которое лицензировано для использования на RP2040.
  • 264 КБ встроенной оперативной памяти SRAM (284 КБ если отключить XIP кеширование и использовать память USB).
  • 2 МБ флеш-память с XIP кешированием. В чипе RP2040 нет встроенной флеш-памяти, поэтому чип памяти распаян на плате. Поддержка до 16 МБ внешней флэш-памяти через выделенную шину QSPI.
  • Контроллер DMA.
  • 30 контактов GPIO, 4 из которых могут использоваться как аналоговые входы (рассчитанных на напряжение 3,3В!).
  • 4 x 12-разрядных аналоговых входа (на Pico доступно для пользователя только 3 из них).
  • 2 UART.
  • 2 контроллера SPI.
  • 2 контроллера I2C.
  • 16 каналов ШИМ.
  • 8 специализирванных контактов PIO (Programmable I/O state machines) для подключения собственной периферии
  • Контроллер USB 1.1 (порт MicroUSB B) и PHY с поддержкой хоста и устройства.
  • Встроенный сенсор температуры.
  • 2 × PIO блока для своих собственных интерфейсов. PIO блоки дают возможность, к примеру, запрограммировать интерфейс WS2812, добавить I2S, SDIO или VGA.
  • 2 x PLL (один из них — для USB).
  • Поддержка UF2 для загрузки бинарников.
  • Поддержка SWD для загрузки и отладки.
  • Поддержка спящих режимов и пониженной частоты для снижения потребления.

 

 

Что расположено на плате:

На каждой стороне платы микроконтролера расположены по 20 контактных площадок, с группами контактов GPIO (ввода-вывода общего назначения). Фактически доступны 25 контактов GPIO (технически их 26, но IO #15 имеет специальное назначение и не должен использоваться для работы с проектами). 3 из 25 контактов могут быть аналоговыми входами (всего чип имеет 4 аналого-цифровых преобразователя (АЦП), но один из них не доступен).

Также сразу стоит обратить внимание, что рабочее напряжение микроконтроллера (всех разъёмов GPIO) составляет 3.3В, т.е. подавая на них напряжение 5В вы рискуете вывести из строя микроконтроллер.

Назначение разъёмов GPIO (официальная схема от производителя):

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

 

Состав платы отличается минимализмом. На плате присутствует понижающий преобразователь питания с 5В на 3,3В (это не просто линейный преобразователь, который часто можно встретить на недорогих платах, а buck-boost SMPS на Richtek RT6150B, благодаря этому входное питание платы может быть в пределах 1.8В...5.5В). Один зеленый LED светодиод на GP25, кнопка выбора загрузки BOOTSEL, чип RP2040 с двухъядерным процессором Cortex M0+, и чип флэш-памяти QSPI 2МБ. Внутри RP2040 находится загрузчик USB UF2 с «постоянным ПЗУ». Это означает, что когда вы хотите запрограммировать новую прошивку, вам следует удерживать кнопку BOOTSEL во вермя подключения к USB (или замкнуть на землю контакт RUN / Reset), и он появится как USB-накопитель. Этот принцип прошивки давно знаком пользователям продукции компании Adafruit и используетсяу на всех их платах с родным USB. Обратите внимание, что вы при этом не нажимаете дважды кнопку сброса, а вместо этого удерживаете кнопку BOOTSEL во время загрузки, чтобы войти в загрузчик.

Для периферийных устройств есть два контроллера I2C, два контроллера SPI и два UART, которые мультиплексированы через GPIO. Имеется 16 каналов ШИМ.

Как видно, на плате отсутсвуют разъёмы для периферийных устройств звука I2S,  SDIO, дисплея, камеры. Вместо специальной аппаратной поддержки для периферийных устройств, RP2040 поставляется с системой PIO (Programmable I/O state machines) — интерфейс подключения расширений PIO, которая является уникальным и мощным способом создания настраиваемой аппаратной логики и блоков обработки данных, работающих сами по себе, не занимая процессор.  RP2040 использует объект PIO, который считывает в буфере данне и синхронизирует правильный битовый поток с идеальной точностью. То же самое с входом или выходом звука I2S, светодиодными матричными дисплеями, 8-битными TFT-экранами или TFT на основе SPI, а также VGA. В MicroPython и CircuitPython вы можете создавать команды управления интерфейсом PIO для написания сценария для периферийного устройства и загрузки его во время выполнения. Имеется 2 периферийных устройства PIO с 4 конечными автоматами каждое.

Несмотря на то, что RP2040 имеет много встроенной оперативной памяти (264 КБ), в нем нет встроенной флэш-памяти. Она обеспечивается внешней микросхемой флэш-памяти QSPI с объёмом 2МБ, которые используются совместно выполняемой программой и файловым хранилищем.

 

Предлагаются следующие варианты для разработки под RP2040:

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

При использовании C/C++ вы получаете всю флеш-память, при использовании Python у вас останется около 1 МБ для кода, файлов, изображений, шрифтов и т.п.  Порт MicroPython для Raspberry Pi Pico поддерживает все возможности чипа, включая собственный интерфейс подключения расширений PIO. Для разработки приложений с использованием MicroPython адаптирована интегрированная среда программирования Thonny. Следует отметить, что возможностей чипа вполне достаточно для выполнения приложений с задачами машинного обучения (для этого подготовлен порт фреймворка TensorFlow Lite).

 

Микроконтроллер RP2040 создавался не только для платы Raspberry Pi Pico. Компания Raspberry Pi Foundation предоставляет свой чип и заявляет о партнерских отношениях с такими компаниями, как Adafruit, Arduino, Pimoroni и Sparkfun, которые подготовили собственные варианты плат на базе этого микроконтроллера. Они имеют свои особенности, но объединены общим элементом — чипом RP2040. Давайте рассмотрим их:

 

 

Компания Adafruit представила 2 платы:

1. Плата Adafruit Feather RP 2040

Среди её особенностей стоит отметить:

  • наличие USB-C,
  • встроенная память 4МБ QSPI Flash (в отличие от 2МБ у Raspberry Pi Pico),
  • STEMMA QT I2C
  • отладочный порт SWD

 

2. Плата Adafruit ItsyBitsy RP 2040

 Особенности этой платы:

  • встроенная память 4МБ QSPI Flash (в отличие от 2МБ у Raspberry Pi Pico), как и у предыдущей модели,
  • кнопки загрузки и сброса,
  • встроенный RGB NeoPixel

 

 

Компания Arduino представила концепт Arduino Nano RP2040 Connect в форм-факторе своей базовой модели Arduino Nano.

 

Компания-производитель заявляет о наличии в этом микроконтроллере:

  • датчиков MEMS от STM (9-осевой IMU, гироскоп, акселерометр и микрофон),
  • увеличенной по сравнению с конкурентами флеш-памятью объемом 16 МБ,
  • WiFi и Bluetooth на базе высокопроизводительного радиомодуля,
  • крипточипа ECC608,
  • возможности подключения к облачному сервису Arduino Create IoT Cloud.

В компании также заявляют о планах перенести ядро ​​Arduino на эту новую архитектуру, чтобы каждый мог использовать чип RP2040 с существующей экосистемой Arduino (используя IDE, инструмент командной строки и тысячи библиотек).

 

 

Компания Pimoroni хочет похвастать 2-мя применениями чипа RP2040:

1. Pimoroni PicoSystem - портативная игровая система-контроллер, подключаемая по USB.

Её особенности:

  • Работает на RP2040
  • Объём памяти SRAM 264КБ
  • ЖК-экран IPS
  • Джойстик
  • Кнопки
  • Li-Рo аккумулятор
  • USB-C питание

 

 

2. Pimoroni Pico Explorer Base — целая платформа для обучения электронике и исследования работы различных модулей.

 

 

Компания Sparkfun представила 3 применения этого чипа:

1. SparkFun Thing Plus - RP2040 —  недорогая высокопроизводительная плата с гибкими цифровыми интерфейсами с микроконтроллером RP2040 от Raspberry Pi Foundation. Помимо посадочного места Thing Plus или Feather (с 18 контактами GPIO), на плате также есть слот для SD-карты, 16 МБ (128 Мбит) флэш-памяти, разъем для одноэлементной батареи JST (со схемой зарядки и датчиком уровня заряда), RGB-светодиод WS2812 , контакты JTAG PTH, а также четыре монтажных отверстия и фирменный разъем Qwiic.

 

2. SparkFun MicroMod RP2040 Processor — тоже недорогая и высокопроизводительная плата с гибкими цифровыми интерфейсами с микроконтроллером RP2040 от Raspberry Pi Foundation. С помощью разъема MicroMod M.2 можно очень легко подключить процессорную плату MicroMod Pi RP2040 к другим платам MicroMod. В комплект поставки платы входит винт для фиксации платы.

3. SparkFun Pro Micro - RP2040 — плата для разработчиков с разъёмами USB-C и Qwiic, а также RGB светодиодами WS2812B LED. Она может применяться с установленными пинами для разъёма GPIO, либо быть удобно распаяна на сторонней плате благодаря зубчатым краям платы с контактами. 

 

 

Сообщество компании Raspberry Pi Foundation как всегда быстро откливается на выход новинок и предлагает вниманию общественности реализованные проекты на продукции Raspberry Pi. Raspberry Pi Pico не стал исключением и тоже уже успел найти практическое применение. Давайте рассмотрим 2 примера его использования:

 

Проект №1. Трекер с использованием Raspberry Pi Pico

Источник:  Pi Pico Balloon Tracker 

Проект предлагает использование микроконтроллера Raspberry Pi Pico для передачи данных с метеозонда-воздушного шара. Автор проекта применяет GPS/радио трекеры для передачи местоположения воздушных шаров, чтобы их можно было отслеживать и легко находить. Трекеры состоят из приемника GPS, который определяет кординаты устройства и передает информацию о текущем местоположении на небольшой компьютер, который, в свою очередь, управляет радиопередатчиком для отправки этих данных в систему контроля положения зонда. Полученные данные затем обрабатыаются и выводятся в режиме онлайн на гугл-картах. Таким образом, роль трекерного компьютера проста, и те, кто производит свои собственные трекеры, могут выбирать из множества микросхем и плат микроконтроллеров, например, плат Arduino, микроконтроллеров PIC или BBC Microbit. Подойдет все, что угодно, со скромным объемом памяти кода, памяти данных, мощностью процессора и интерфейсом ввода-вывода (последовательным, SPI и т.п. в зависимости от выбора GPS и радиомодулей). Популярным выбором является Raspberry Pi, который позволяет легко добавить в систему слежения видеокамеру.

Raspberry Pi Pico имеет множество портов ввода-вывода (портов SPI, I2C и последовательных портов), плюс уникальную возможность для добавления дополнительных периферийных устройств с помощью программируемых модулей PIO. Кроме того, имея гораздо больше памяти, чем обычные микроконтроллеры, он обеспечивает возможность реализовать функции, которые обычно требуют задействования (и покупки) полноценного микрокомпьютера Raspberry Pi, например, встроенное в устройство прогнозирование места посадки зонда. 

 

Компоненты трекера:
В базовом трекере есть приемник GPS и радиопередатчик. Чтобы подключить их к Pico, используем макетную плату, на которой установим GPS-приемник UBlox, радиопередатчик LoRa и разъемы для самого Pico (Pico вверху, GPS внизу слева; LoRa внизу справа). 

В конкретном GPS-модуле UBlox, который был под рукой, был только последовательный порт, поэтому нельзя было использовать I2C. Но это и не важно, потому что, в отличие от большинства плат Arduino, Pico не ограничивается одним последовательным портом.

Модуль LoRa подключается через SPI и один вывод GPIO, который модуль использует для отправки своего статуса (например, пакет отправлен — готов к отправке следующего пакета) на Pico.

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

 

Настройка:
Автор проекта решил использовать для своего трекера язык C, а не Python, по разным причинам. Главная из них заключается в том, что у него было много существующего кода трекера C для работы с Arduino и Raspberry Pi. Для регулярного вывода отладочной информации из программы он подключил последовательный порт Pico к адаптеру FTDI USB Serial TTL, подключенному обратно к своему ПК, как показано на рисунке:

 

Код трекера:
Программы трекера My Pi и Arduino работают немного по-разному. На Raspberry Pi, чтобы разделить код для различных функций (GPS, радио, датчики и т.п.), автор использовал отдельный поток для каждой из них. Это позволяло, например, без задержки отправить новый пакет на радиопередатчик, даже если в другом месте одновременно выполнялась медленная операция. На Arduino, при отсутствии доступных потоков, код по-прежнему разделен на отдельные модули, но каждый из них закодирован для быстрого запуска без ожидания ответа периферийного устройства в цикле. Например, некоторым датчикам температуры на измерение может потребоваться секунда или около того, и очень важно не зацикливаться на ожидании результата.

Цепочка инструментов C для Pico, к сожалению, по умолчанию не поддерживает многопоточный код. Вместо того, чтобы перестраивать его с добавленной поддержкой, автор выбрал подход, который использовал с Arduino. Таким образом, основной код начинается с инициализации каждого модуля индивидуально, а затем входит в жесткий цикл, вызывая каждый модуль один раз за цикл. Затем каждый модуль должен быстро вернуть управление, чтобы цикл продолжал работать быстро и ни один модуль не заставлял ждать долго.

 

Код модулей:
Код GPS использует последовательный порт для получения данных NMEA от GPS. NMEA — это стандартный протокол ASCII, используемый практически всеми существующими модулями GPS и включающий текущую дату, время, широту, долготу, высоту и другие данные. Все, что нужно сделать, это подтвердить, что данные действительны, а затем прочитать и сохранить эти ключевые значения. Другая важная функция — убедиться, что модуль GPS находится в правильном «режиме полета», чтобы он работал на большой высоте: без этого он перестанет предоставлять данные о новых позициях на высоте около 18 км.


Радиокод LoRa проверяет, когда модуль не передает, а затем создает новое телеметрическое сообщение, содержащее вышеуказанные данные GPS, а также имя воздушного шара, любые другие данные датчика и прогноз места посадки. Это сообщение передается на чип LoRa через SPI, затем чип включает свое радио и модулирует радиосигнал с помощью данных телеметрии. Как только сообщение отправлено, чип включает свой выход DIO0, который подключен к Pico, чтобы он знал, когда может отправить другое сообщение. Все сообщения принимаются на земле (в данном случае приемником Pi LoRa), а затем загружаются в интернет-базу данных, которая, в свою очередь, управляет действующей картой Google:

 

Датчики:
Pico может питаться непосредственно от батареи через встроенный повышающий преобразователь. Входное напряжение подключается через делитель потенциала к аналоговому входу считывания (ADC3), что позволяет легко измерить напряжение батареи. Обратите внимание, что опорным напряжением АЦП является шина 3.3В, которая является шумной, особенно при использовании для питания внешних устройств, таких как GPS и LoRa, оба из которых имеют довольно высокие требования к потребляемой мощности, поэтому код усредняет многие измерения. В качестве альтернативы можно добавить точное опорное напряжение АЦП, но автор склонился к варианту нулевой стоимости программного обеспечения.

Температуру платы также можно измерить, на этот раз с помощью ADC4. Это менее полезно для трекера, чем измерение внешней температуры, поэтому автор добавил для этого устройство BME280. Примеры Pico включают код для BME, подключенного через SPI, но автор выбрал I2C, поэтому нужно было заменить вызовы SPI вызовами I2C, что легко реализуется. BME280 возвращает давление — вероятно, самое интересное измерение окружающей среды для трекера воздушных шаров, а также показания влажности.

 

Прогноз места посадки:
До сих пор все, чтосделано, также можно было реализовать на базовом чипе AVR, например Arduino Mini Pro с небольшим запасом места. Однако есть одно очень полезное дополнение — чип у Raspberry Pi Pico позволяет реализовать прогноз точки приземления.

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

Конечно, фактический полет никогда полностью не следует плану: например, запуск может быть позже запланированного, а при изменении ветровых условий точка посадки может сместиться на несколько миль в сторону от расчетной. Так что полезно иметь прогноз в реальном времени во время осуществления полета, и он действительно реализуется, используя ту же базу данных ветра. Однако, поскольку он онлайн, а 3G/4G могут быть недоступными в некоторых местах полета при следовании воздушного шара, полезно иметь независимый прогноз приземления. Это можно сделать в самом трекере, запомнив скорость и направление ветра (рассчитанные из положений GPS) на пути вверх, измерив скорость снижения после запуска, применив это к модели плотности атмосферы, чтобы построить будущую скорость снижения до земли, а затем вычислив влияние ветра во время снижения и, наконец, определив положение для приземления.

На обычных платах Arduino не хватает памяти для хранения измеренных данных о ветре, но у Pi Pico ее более чем достаточно.

Автор перенес свой существующий код, который:

  1. Во время взлета разбивает вертикальный диапазон на 100-метровые участки, в которых хранятся дельты широты и долготы в градусах в секунду.
  2. Каждые несколько секунд он выполняет прогноз места посадки на основе текущего положения, данных в этом массиве и предполагаемого профиля спуска, который использует простую атмосферную модель плюс значения по умолчанию для веса полезной нагрузки и эффективности парашюта.
  3. Во время спуска измеряется эффективность парашюта, и фактическое значение используется в приведенном выше расчете в (п.2).
  4. Вычисляет время, которое он проведет в каждой 100-метровой секции воздуха, затем умножает это значение на сохраненную скорость ветра, чтобы вычислить горизонтальное расстояние и направление, в котором он, как ожидается, будет двигаться в этом разделе.
  5. Складывает все эти движения секций вместе, добавляет их к текущей позиции и производит прогноз посадки.
  6. Отправляет текущее положение на землю вместе с остальной телеметрией.

 

 

Проект №2.  ИГРА ТЕТРИС (от сообщества любителей Raspberry Pi).

Источник: A very tiny game of Tetris!

Автор проекта (известный в сети как Jools64) использовал плату микроконтроллера Raspberry Pi Pico совместно с LCD-дисплеем  «Pico Display Pack» от компании Pimoroni. Он, как поклонник продукции Raspberry Pi и Pimoroni, не стал ждать выхода Pimoroni PicoSystem (см. обзор выше)  и создал своё приложение буквально за несколько часов. Код программы доступен для скачивания и повторения по ссылке.

Пакет Pico Display оснащен 1,14-дюймовым экраном IPS с разрешением 240 x 135 пикселей и четырьмя программируемыми кнопками. Он поставляется с библиотеками кода, которые можно использовать для программирования вывода на дисплей и ввода с помощью четырех кнопок. В программе Tetris нижние кнопки используются для перемещения фигур влево или вправо, в то время как верхние нижние кнопки вращают фигуры и ускоряют скорость падения.

Этот проект — отличный пример того, что сообщество может быстро сделать с таким маленьким устройством, как Pico. 

 

В настоящее время Raspberry Pi Pico доступен для заказа в нашем интернет-магазине. Его поставка ожидается уже скоро и у Вас есть шанс в числе первых провести эксперименты с ним, просто оставив предзаказ пройдя по ссылке:  купить Raspberry Pi Pico .