PIO (программируемый ввод-вывод)
В RP2040 и RP2350 есть блоки, которые работают как маленькие процессоры, но заточены под ввод-вывод: они выполняют короткие программы и с точностью до такта управляют выводами. На них делают интерфейсы, которых нет в обычной периферии чипа.
Обновлено Редакция GAW
PIO (programmable I/O, программируемый ввод-вывод) — блок микроконтроллеров RP2040 и RP2350, который работает как набор маленьких специализированных процессоров для управления выводами. Каждый блок содержит четыре автомата состояний; они выполняют программы из общей памяти команд, читают и выставляют уровни на выводах с точностью до такта и обмениваются данными с процессором через FIFO.
| Чип | Блоков PIO | Автоматов | Функции выводов |
|---|---|---|---|
| RP2040 | 2 | 8 | F6, F7 |
| RP2350 | 3 | 12 | F6, 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 на сайте.
Источники
- 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, а входы видит всегда
- Raspberry Pi. RP2350 Datasheet — табл. 3 и 4 — три блока PIO: функции F6, F7, F8 (PIO0–PIO2), всего 12 автоматов состояний; вход выводов подключён к PIO всегда
Нашли ошибку?
Смотрите также
- PIO RP2040Автоматы PIO: устройство, 9 команд, задержка, side-set, FIFO, частота, пример
- Делитель PIO RP2040INT и FRAC по частоте и тактам на бит, регистр CLKDIV, ошибка, код pico-sdk
- RP2040: выводы и функции GPIO30 GPIO: выводы QFN-56, функции F1–F9, АЦП, QSPI, SWD, питание, токи
- RP2350: выводы и функции GPIO30 или 48 GPIO: выводы QFN-60 и QFN-80, функции F0–F11, АЦП, 5 В, токи