Nordic的DPPI 和 PPI

本文由DeepSeek生成,在此做记录。

在 Nordic 半导体芯片(如 nRF 系列)的上下文中,DPPI(Distributed Programmable Peripheral Interconnect)PPI(Programmable Peripheral Interconnect) 是两种硬件事件-任务路由机制,用于实现外设间的直接交互,减少 CPU 干预。以下是两者的核心区别:


1. 功能与架构

  • PPI

    • 固定通道:PPI 使用预定义的通道(如 16 或 32 个通道),每个通道需手动配置事件源和任务目标。
    • 静态绑定:事件与任务的绑定需通过代码显式设置,例如通过 nrf_ppi_channel_endpoint_setup 函数将无线电事件与定时器任务关联。
    • 应用场景:适用于简单的硬件自动化,如超时控制或事件触发任务(如定时器捕获或无线电启停)。
  • DPPI

    • 动态通道分配:DPPI 支持动态分配通道资源,允许更灵活的事件-任务映射,减少通道数量限制。
    • 广播模式:单个事件可同时触发多个任务,通过“订阅-发布”机制实现多外设协同工作。
    • 应用场景:适用于复杂系统,如多协议无线通信(蓝牙 + Thread)或需多外设联动的低功耗场景。

2. 配置方式

  • PPI

    • 需手动配置通道的 事件源(Event)任务目标(Task),例如:

      1
      2
      3
      4
      5
      6
      nrf_ppi_channel_endpoint_setup(
      NRF_PPI,
      HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI,
      (uint32_t)&NRF_RADIO->EVENTS_ADDRESS,
      (uint32_t)&EVENT_TIMER->TASKS_CAPTURE[1]
      );

      此处将无线电的地址匹配事件绑定到定时器的捕获任务。

  • DPPI

    • 通过 订阅列表(Subscribe List)发布列表(Publish List) 动态管理事件与任务的关联,例如:

      1
      nrf_dppi_subscribe_enable(NRF_DPPIC, EVENT_CHANNEL, TASK_GROUP);

      允许一个事件触发多个任务组,减少代码冗余。


3. 性能与资源占用

  • PPI

    • 低延迟:硬件直接路由,无 CPU 干预,适用于实时性要求高的场景。
    • 资源受限:通道数量固定,需避免通道冲突(如多个外设竞争同一通道)。
  • DPPI

    • 高扩展性:支持动态通道分配和广播机制,适合多任务并发场景。
    • 低功耗优化:通过事件广播减少重复配置,降低功耗(如传感器数据批量处理)。

4. 典型应用对比

场景 PPI 适用性 DPPI 适用性
单事件触发单任务 ✅(如超时关闭无线电) ✅(但资源利用率低)
多事件触发多任务 ❌(需多个通道) ✅(动态订阅)
低功耗传感器数据采集 ❌(需频繁配置通道) ✅(广播模式省电)
多协议无线通信同步 ❌(通道资源不足) ✅(灵活路由)

总结

  • PPI:适合简单、固定的硬件自动化需求,配置直接但扩展性有限。
  • DPPI:针对复杂系统设计,提供动态资源分配和多任务协同能力,是 Nordic 新一代芯片(如 nRF53 系列)的核心特性。

如需进一步了解具体芯片的实现细节,可参考 Nordic 官方文档(如《nRF5 SDK》或《nRF Connect SDK》)。