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

PIO (программируемый ввод-вывод)

В RP2040 и RP2350 есть блоки, которые работают как маленькие процессоры, но заточены под ввод-вывод: они выполняют короткие программы и с точностью до такта управляют выводами. На них делают интерфейсы, которых нет в обычной периферии чипа.

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

PIO (programmable I/O, программируемый ввод-вывод) — блок микроконтроллеров RP2040 и RP2350, который работает как набор маленьких специализированных процессоров для управления выводами. Каждый блок содержит четыре автомата состояний; они выполняют программы из общей памяти команд, читают и выставляют уровни на выводах с точностью до такта и обмениваются данными с процессором через FIFO.

ЧипБлоков PIOАвтоматовФункции выводов
RP204028F6, F7
RP2350312F6, F7, F8

Что есть у автомата. По даташиту RP2040 — два 32-битных сдвиговых регистра, два рабочих регистра, очереди FIFO на 4 слова по 32 бита в каждую сторону (их можно объединить в одну на 8 слов) и дробный делитель такта: 16 разрядов целой части и 8 дробной. Чтобы автомат управлял выводом, этому выводу назначают функцию PIO, а входы PIO видят всегда.

Зачем это нужно. Обычная периферия чипа ограничена набором блоков — двумя UART, двумя SPI. PIO позволяет сделать недостающие или нестандартные интерфейсы: даташит RP2040 перечисляет параллельные шины 8080 и 6800, I²C, I²S, SDIO, SPI и QSPI, UART, видеовыход DPI или VGA через резистивный ЦАП. Популярный пример — управление адресными светодиодами WS2812.

Набор команд и примеры программ разобраны в статье «PIO RP2040», делитель такта под нужную скорость подбирает калькулятор PIO. Какие выводы доступны автоматам — в таблицах RP2040 и RP2350.

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

Что такое PIO в RP2040?

Programmable I/O — блок программируемого ввода-вывода. В RP2040 их два, в каждом четыре автомата состояний. Автомат выполняет короткую программу из специальных команд и управляет выводами с точностью до такта, поэтому на PIO делают интерфейсы, которых нет среди обычной периферии: светодиоды WS2812, VGA, дополнительные UART и SPI.

Сколько блоков PIO в RP2350?

Три — PIO0, PIO1 и PIO2, то есть 12 автоматов состояний против восьми у RP2040. В таблице функций выводов им соответствуют функции F6, F7 и F8.

Как задать частоту работы PIO?

У каждого автомата есть дробный делитель системного такта: 16 разрядов целой части и 8 дробной. Делитель и время одной команды для нужной скорости интерфейса подбирает калькулятор PIO на сайте.

Источники

  1. Raspberry Pi. RP2040 Datasheet (build 2025-02-20) — разд. 3.1 — два одинаковых блока PIO по четыре автомата состояний; автоматы одного блока выполняют программы из общей памяти команд; у каждого автомата два 32-битных сдвиговых регистра, два 32-битных рабочих регистра, FIFO 4×32 бита в каждую сторону (8×32 в одну), дробный делитель такта с 16 целыми и 8 дробными разрядами; PIO реализует параллельные шины 8080 и 6800, I²C, I²S, SDIO, SPI, DSPI, QSPI, UART, DPI и VGA через резистивный ЦАП; разд. 3.6.2 — пример программы для светодиодов WS2812; табл. 3 — PIO управляет выводом, если выбраны функции F6 или F7, а входы видит всегда
  2. Raspberry Pi. RP2350 Datasheet — табл. 3 и 4 — три блока PIO: функции F6, F7, F8 (PIO0–PIO2), всего 12 автоматов состояний; вход выводов подключён к PIO всегда

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