RP2040 PIO 可编程输入输出端口:硬件结构与工作原理速览

1.硬件讲解

我们不难看到,对于树莓派 Pico 板载的 RP2040 来说,其通信外设资源非常有限,当我们需要使用的通信外设数量大于树莓派 Pico 具有的通信外设(例如需要四个 UART)或者我们需要的通信协议树莓派 Pico 上硬件不支持时(例如 VGA 视频输出),我们除了使用 GPIO 软件模拟实现通信接口外,还可以选用 PIO 可编程输入输出接口。

PIO 可编程输入输出端口是 RP2040 的一个特殊的外设,"可编程输入输出"指的是它无需 RP2040 的 CPU 参与即可使用预先设定好的操作对特定GPIO​上输入或输出的数据进行处理。​它可以实现多种不同的通信接口/外设,实际上,我们可以把 PIO 理解为一个 RP2040 芯片内部中又一个简易独立的单片机,通过写入简单汇编程序到 PIO 块中即可实现多种通信接口,同时相比于 GPIO 软件模拟通信协议来说,它几乎不占用 CPU 资源同时运行速度快。

目前,PIO 外设可实现以下通信协议:8080 和 6800 并行总线、I2C、3 针 I2S、SDIO、SPI、DSPI、QSPI、UART、DPI 或 VGA(通过电阻式 DAC)。

1.1 PIO 外设的基本结构

RP2040 有两个完全相同的 PIO 外设。每个 PIO 外设都独立连接到了 AHB lite 总线、GPIO 引脚和中断控制器:

  • AHB Lite 总线:实现 PIO 与 RP2040 主 CPU、片内存储的高速数据交互;
  • GPIO 引脚:作为 PIO 与外部设备进行输入 / 输出操作的物理接口;
  • 中断控制器:实现 PIO 向主 CPU 发送中断请求,完成事件同步。

1280X1280 (2).PNG

单个 PIO 外设的结构图如下所示:

1280X1280.PNG

简单来说,PIO 外设由以下几个部分组成:

  • ​状态机(State Mchine):​每个 PIO 包含 4 个独立的状态机,是 PIO 的核心执行硬件,可视为轻量级专用处理器,内部包含:
    • PC(指令计数器):记录当前待执行指令在指令内存中的地址,控制指令的顺序执行;
    • Clock Div(时钟分频器):独立调节状态机的运行时钟频率,适配不同速率的外部 I/O 协议;
    • X/Y 可擦写数据暂存器:临时存储运算数据、中间结果;
    • Out Shift(输出移位寄存器):将数据按指定位宽、顺序移位后输出至 GPIO;
    • In Shift(输入移位寄存器):从 GPIO 读取数据并按指定规则移位暂存;
    • 状态机通过内部寄存器读取指令内存中的汇编指令,自主完成数据读写、GPIO 控制等操作;同时可访问 FIFO、DMA、GPIO 等单元,并生成中断信号,用于状态机之间、PIO 与主 CPU 之间的同步。
  • ​指令内存(Instruction Memory):​是容量为 32 条指令的只读存储单元,由同一 PIO 内的 4 个状态机共享,用户编写的 PIO 专用汇编指令,会被加载至该内存中,供各状态机独立读取并执行;
  • GPIO 映射(GPIO Mapping):
    • 状态机的输入 / 输出信号可映射至 RP2040 的 GPIO 引脚(硬件支持最多 32 个 GPIO,RP2040 实际引出 30 个可用 GPIO);
    • 同一 PIO 内的所有状态机,可独立且同时访问任意 GPIO 引脚,具备灵活的引脚分配能力。
  • ​FIFO 存储器:​每个状态机的 Out Shift、In Shift 移位寄存器,分别与一组 “发送 FIFO(Tx FIFO)”和“接收 FIFO(Rx FIFO)” 相连,核心作用是实现 “数据收发请求” 与 “实际执行操作” 的异步解耦:
    • ​发送场景:​主 CPU 先将待输出数据写入 Tx FIFO;当状态机就绪时,从 Tx FIFO 取数,通过 Out Shift 寄存器输出至 GPIO;
    • ​接收场景:​状态机从 GPIO 读数据后暂存至 In Shift 寄存器,再写入 Rx FIFO;主 CPU 可在合适时机从 Rx FIFO 取数。
  • ​中断及中断掩码寄存器:​用于管理 PIO 的中断信号:
    • ​中断源:​包括 FIFO(如 FIFO 满 / 空)、状态机(如指令执行完成、特定操作触发)的原始中断信号;
    • ​中断掩码寄存器:​对原始中断信号进行 “使能 / 屏蔽” 配置,仅未被屏蔽的中断会发送至 RP2040 中断控制器,触发主 CPU 响应。
posted @ 2026-09-01 10:55  FreakStudio  阅读(3)  评论(0)    收藏  举报