当前位置: 首页 > news >正文

私有外设总线PPB(Private Peripheral Bus) - 详解

私有外设总线PPB(Private Peripheral Bus)

PPB 的全称是 Private Peripheral Bus,中文翻译为私有外设总线

它是ARM Cortex-M处理器架构中一个极其关键的概念,专门用于访问处理器内核本身的调试、控制和配置组件。


1. 核心定义:它是什么?

PPB是一条基于高级外设总线(APB)协议的32位总线。它的“私有”体现在两个方面:

  1. 地址空间私有:它映射到一个专属于Cortex-M内核的、固定的存储器地址区域,即 0xE000_00000xE00F_FFFF。这个区域是ARM架构预定义的,所有Cortex-M处理器都遵守这个约定。
  2. 功能私有:挂在这条总线上的设备(寄存器)不是芯片厂商添加的通用外设(如UART、GPIO),而是ARM设计内核时内置的核心效果组件,用于控制内核最基本的行为,如中断、调试、系统定时器等。

简单来说,PPB是处理器内核的“内部管理系统”,用于访问那些“控制处理器自身”的寄存器。


2. 主要功能和特点

  • 访问内核级外设:PPB供应了访问以下核心组件的寄存器接口:

    • NVIC (Nested Vectored Interrupt Controller):嵌套向量中断控制器,管理所有中断。
    • SCB (System Control Block):系统控制块,控制系统级的设置,如电源管理、配置故障异常、定义向量表位置等。
    • SysTick Timer:系统定时器,为操作系统提供周期性的心跳中断。
    • MPU (Memory Protection Unit):内存保护单元(如果存在),配置内存访问权限。
    • 调试组件
      • FPB (Flash Patch and Breakpoint):闪存修补和断点单元。
      • DWT (Data Watchpoint and Trace):素材观察点与跟踪单元。
      • ITM (Instrumentation Trace Macrocell): instrumentation跟踪单元。
      • TPIU (Trace Port Interface Unit):跟踪端口接口单元。
  • 只支持特权访问:出于安全性和稳定性考虑,对PPB空间的访问通常得CPU处于特权模式。如果CPU处于用户(非特权)模式,尝试访问PPB区域将触发MemManage Fault(内存管理故障)。这可以防止用户应用程序随意修改内核的关键配置。

  • 固定的地址映射:PPB的地址是标准化的。例如:

    • NVIC 的基础地址是 0xE000_E100
    • SCB 的基础地址是 0xE000_ED00
    • SysTick 的寄存器在 0xE000_E010
      这种固定映射使得编写驱动程序、操作系统端口和调试器具变得极其方便,具有很好的可移植性。

3. 在环境中的位置

为了更好地理解PPB的地位,我们可以看一个简化的系统连接图:

从上图可以看出:


4. 与“系统总线”和“外设总线”的区别

特性PPB (私有外设总线)系统总线 / 芯片APB总线
地址范围0xE000_0000 - 0xE00F_FFFF例如 0x4000_0000 (APB1), 0x5000_0000 (APB2)
挂载的设备内核私有外设(NVIC, SCB, SysTick, 调试单元)芯片厂商添加的外设(GPIO, UART, TIMER, ADC等)
主要功能控制处理器内核自身的行为(中断、异常、调试、定时)控制芯片外部功能(驱动引脚、通信、数据转换)
访问权限通常需要特权模式可由软件配置为特权或用户模式均可访问(通常通过MPU)
标准化由ARM定义,所有Cortex-M芯片都一样由芯片厂商定义,不同厂商、不同型号的芯片各不相同

总结

PPB是Cortex-M处理器内核用于访问和控制其内部核心作用组件(如中断、系统定时器、调试单元)的私有总线。它位于固定的地址空间,需要特权访问,是与芯片厂商添加的外设完全分离的、由ARM预定义的“内核自留地”。

芯片厂商扩展的(通过芯片的APB总线访问)。在编写启动代码、移植操作系统或进行底层调试时,你会频繁地与PPB上的寄存器打交道。就是理解PPB有助于你区分哪些功能是Cortex-M内核自带的(通过PPB访问),哪些功能

http://www.jsqmd.com/news/1307/

相关文章:

  • enrichmcp 构建数据驱动mcp的框架
  • 完整教程:visual studio快捷键
  • AppSpider 7.5.020 for Windows - Web 应用程序安全测试
  • 上周热点回顾(9.15
  • “学术造神”何时休?
  • vLLM 核心机密:大模型推理引擎内部长啥样?
  • 华为销量下滑OV米荣迎来窗口期
  • 【GitHub每日速递 250922】开源 AI 搜索引擎 Perplexica:本地大模型 + 多模式搜索,免费又强大!
  • coze工作流实战——三分钟读一本名著
  • 大厂是怎么识别“高潜员工”的?
  • 读人形机器人19后劳动经济
  • 2025年最佳笔记本扩展坞评测:一站式提升工作站效率
  • 论文查重项目
  • 我的第一个程序Hello,World!成功运行!
  • Day05-1-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\David\scanner-Demo01~05(简易计算器)
  • Day05-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\David\struct-ifDemo01~03+shunxuDemo
  • JS历理 优化login.js脚本2
  • Codeforces Round 1052 (Div. 2)
  • PatternMatcher-Pytorch
  • uboot启动流程
  • 内存泄漏
  • Context Engineering
  • ios在wifi模式下设置http代理
  • 面试官问:请画出 MySQL 架构图!这种变态问题都能问的出来
  • 基于协方差交叉(CI)的多传感器融合算法matlab仿真,对比单传感器和SCC融合
  • github/网盘/公众号信息收集
  • AtCoder Regular Contest 206 (Div. 2) 部分题解
  • Grafana 和 Openssh 高危漏洞修复
  • 学习日报(补发)
  • Influxdb 得模糊查询总结