跳转到内容
新建笔记

i.MX8MP 地址图谱:多核、DMA、调试与多媒体

i.MX8MP 的地址表需要先选定观察者:A53、M7、SDMA 和调试端口看到的地址并不总相同。同一块存储器可以有多个入口;一个地址窗口也可能只解码少量寄存器。查到地址之后,还要确认所有权、访问权限、时钟、电源、缓存属性和软件映射。

本文以 NXP RM Rev.3 第 2 章为地址表基础,结合 MCUXpresso SDK MCUX_2.16.000 与 Linux 6.8 的实际驱动说明使用方法。保留原文的 A53、M7、SDMA、AIPS1~5、DAP、Audio DSP 和 HDMI 表项。表中的大小按闭区间 end-start+1 计算,统一使用 KiB/MiB/GiB;这只是区间长度,不代表整个窗口都可读写。

地址种类含义常见误用
CPU 本地地址当前处理器发出的地址,包括 M7 TCM 和别名入口把 M7 的 0x20000000 直接当作 A53 的 DTCM 地址
系统物理地址SoC 总线视角下的资源位置在 Linux 用户态把物理地址强转为普通指针
DMA 地址某 DMA 主控可使用的设备地址,经驱动映射/转换获得将 CPU 虚拟指针或 SDMA 内部外设窗口当作 DMA 地址
软件虚拟地址MMU/操作系统提供给 CPU 的映射认为数值和物理地址相同就具有相同访问属性

Linux 驱动应取得资源并使用 devm_platform_ioremap_resource() 等接口映射 MMIO,按寄存器语义使用 readl()/writel();DMA 缓冲则通过 DMA API 管理。M7 裸机通常直接使用设备头定义,但仍需检查权限、时钟和跨核所有权。volatile 只约束特定编译器访问,不能完成地址转换、互斥或缓存一致性。

RM Rev.3 的第 2 章本身存在几条 VPU 区间重叠与容量不一致,原笔记继承了这些问题。下面的表保留所列起止地址,并给出区间算术长度,将这些行标记为“VPU 待核定”;不能据此认定完整区间都由该 IP 解码。

表项手册所列起止地址算术长度可交叉确认的内容
VPU G10x38300000…0x3830ffff64 KiBLinux 6.8 设备树也使用该 64 KiB 资源
VPU G20x38310000…0x3841ffff1088 KiBLinux 6.8 只声明基址 0x38310000、长度 64 KiB
VC8000E encoder0x38320000…0x3842ffff1088 KiBVPU 章节确认基址,不能从这里推导合法末地址
VPU BLK_CTRL0x38330000…0x383fffff832 KiBLinux 6.8 声明基址 0x38330000、长度 0x100
VPU0x38340000…0x384fffff1792 KiB与上述多行重叠,不能当作额外独立 2 MiB RAM

驱动声明的资源长度也不一定等于完整硬件解码范围。因此这里不猜测新的终点;实现驱动时采用所选 BSP 的匹配驱动与该模块寄存器定义。

2. Cortex-A53 / 系统地址图

跳转到“2. Cortex-A53 / 系统地址图”
起始地址结束地址区域大小描述
DDR内存区域
0x1000000000x23fffffff5 GiBDDR Memory (除M7外的所有模块)
0x400000000xffffffff3 GiBDDR 系统窗口(M7 主窗口上限见 M7 表)
保留区域
0x3f0000000x3fffffff16 MiBReserved
0x3e0000000x3effffff16 MiBReserved
DDR控制器(DDRC)
0x3dc000000x3dffffff4 MiBDDR PHY (Broadcast)
0x3d8000000x3dbfffff4 MiBDDR PERF_MON
0x3d4000000x3d7fffff4 MiBDDR CTL
0x3d1000000x3d3fffff3 MiBReserved
0x3d0000000x3d0fffff1 MiBDDR BLK_CTRL
0x3c0000000x3cffffff16 MiBDDR PHY
专用处理器
0x3b0000000x3bffffff16 MiBAudio DSP
0x3a0000000x3affffff16 MiBReserved
中断控制器和加速器
0x389000000x39ffffff23 MiBReserved
0x388000000x388fffff1 MiBGIC REG (中断控制器)
0x387000000x387fffff1 MiBReserved
0x385000000x386fffff2 MiBNPU (神经网络处理器)
视频处理单元(VPU)
0x383400000x384fffff1792 KiBVPU(VPU 待核定:见本节前说明)
0x383300000x383fffff832 KiBVPU BLK_CTRL(VPU 待核定:见本节前说明)
0x383200000x3842ffff1088 KiBVPU VC8000E Encoder(VPU 待核定:见本节前说明)
0x383100000x3841ffff1088 KiBVPU G2 Decoder(VPU 待核定:见本节前说明)
0x383000000x3830ffff64 KiBVPU G1 Decoder(VPU 待核定:见本节前说明)
USB控制器
0x382000000x382fffff1 MiBUSB2 REG
0x381000000x381fffff1 MiBUSB1 REG
图形处理器(GPU)
0x380100000x380fffff960 KiBReserved
0x380080000x3800ffff32 KiBGPU2D REG
0x380000000x38007fff32 KiBGPU3D REG
QSPI Flash接口
0x360000000x37ffffff32 MiBQSPI RX Buffers Reserved
0x340000000x35ffffff32 MiBQSPI1 RX Buffer
PCIe控制器
0x33c000000x33ffffff4 MiBPCIe REG Reserved
0x338000000x33bfffff4 MiBPCIe1 REG
QSPI和DMA
0x331000000x337fffff7 MiBReserved
0x330100000x330fffff960 KiBReserved
0x330080000x3300ffff32 KiBQSPI1 TX Buffer
0x330000000x33007fff32 KiBAPBH DMA
外设总线(AIPS)
0x32c000000x32ffffff4 MiBAIPS-4
0x329000000x32bfffff3 MiBReserved
0x328000000x328fffff1 MiBReserved
0x327000000x327fffff1 MiBReserved
0x326000000x326fffff1 MiBReserved
0x325000000x325fffff1 MiBReserved
0x324000000x324fffff1 MiBReserved
0x323000000x323fffff1 MiBReserved
0x322000000x322fffff1 MiBReserved
0x321000000x321fffff1 MiBReserved
0x320000000x320fffff1 MiBReserved
0x310000000x31ffffff16 MiBReserved
0x30c000000x30ffffff4 MiBAIPS-5
0x308000000x30bfffff4 MiBAIPS-3
0x304000000x307fffff4 MiBAIPS-2
0x300000000x303fffff4 MiBAIPS-1
其他外设和存储
0x290000000x2fffffff112 MiBReserved
0x280000000x28ffffff16 MiBA53 / DAP (调试接口)
0x200000000x27ffffff128 MiBReserved
0x180000000x1fffffff128 MiBPCIe-1
0x080000000x17ffffff256 MiBQSPI
0x040000000x07ffffff64 MiBReserved
0x010000000x03ffffff48 MiBReserved
片上RAM(OCRAM)
0x00c000000x00ffffff4 MiBReserved
0x00b000000x00bfffff1 MiBReserved
0x00a000000x00afffff1 MiBOCRAM Reserved
0x009900000x009fffff448 KiBReserved
0x009000000x0098ffff576 KiBOCRAM (片上RAM)
紧耦合存储器(TCM)
0x008400000x008fffff768 KiBReserved
0x008200000x0083ffff128 KiBTCM Reserved
0x008000000x0081ffff128 KiBDTCM (数据TCM)
0x007e00000x007fffff128 KiBITCM (指令TCM)
0x007c00000x007dffff128 KiBReserved
安全存储
0x007000000x007bffff768 KiBReserved
0x006000000x006fffff1 MiBReserved
0x005000000x005fffff1 MiBReserved
0x004000000x004fffff1 MiBReserved
0x002000000x003fffff2 MiBReserved
0x001900000x001fffff448 KiBReserved
0x001890000x0018ffff28 KiBOCRAM_S Reserved
0x001800000x00188fff36 KiBOCRAM_S(状态保持 RAM)
0x001100000x0017ffff448 KiBReserved
0x001080000x0010ffff32 KiBCAAM Reserved
0x001000000x00107fff32 KiBCAAM (加密加速器安全RAM)
Boot ROM
0x000400000x000fffff768 KiBReserved
0x0003f0000x0003ffff4 KiBBoot ROM - Protected 4KB
0x000000000x0003efff252 KiBBoot ROM (启动ROM)

两个 DDR 窗口合计提供最大 8 GiB 地址空间:低段 0x40000000…0xffffffff 为 3 GiB,高段 0x100000000…0x23fffffff 为 5 GiB。板上实装容量、启动固件内存训练结果及 Linux 保留区决定实际可用内存;低段表中的“所有模块”概述也不能覆盖 M7 的具体访问限制。

0x3c000000 一带是 DDR PHY、控制器和监测寄存器,不是 DDR 数据存储。GPU/VPU/NPU 的寄存器窗口同样不等于可放帧缓冲或模型的内存。Reserved 区域应保持不访问;是否返回总线错误、超时或其他结果依具体路径而定。

OCRAM 为 576 KiB,OCRAM_S 为 36 KiB 状态保持 RAM;TCM 的系统入口是 0x007e0000 的 ITCM 和 0x00800000 的 DTCM。它们虽紧耦合到 M7,也有系统侧入口,不能写成“A53 永远无法访问”。

3. Cortex-M7 地址图与别名

跳转到“3. Cortex-M7 地址图与别名”
起始地址结束地址区域大小描述
高地址保留区
0xe01000000xffffffff511 MiBReserved
0xe00000000xe00fffff1 MiBCM7 PPB (Private Peripheral Bus)
0xd80000000xdfffffff128 MiBReserved
外部接口
0xd00000000xd7ffffff128 MiBPCIe-1
0xc00000000xcfffffff256 MiBQSPI Flash
DDR主内存
0x400000000xbfffffff2 GiBDDR Memory (M7可访问2GB)
DDR控制器
0x3f0000000x3fffffff16 MiBReserved
0x3e0000000x3effffff16 MiBReserved
0x3dc000000x3dffffff4 MiBDDR PHY (Broadcast)
0x3d8000000x3dbfffff4 MiBDDR PERF_MON
0x3d4000000x3d7fffff4 MiBDDR CTL
0x3d1000000x3d3fffff3 MiBReserved
0x3d0000000x3d0fffff1 MiBDDR BLK_CTRL
0x3c0000000x3cffffff16 MiBDDR PHY
专用处理器
0x3b0000000x3bffffff16 MiBAudio DSP
0x3a0000000x3affffff16 MiBReserved
中断控制器和加速器
0x389000000x39ffffff23 MiBReserved
0x388000000x388fffff1 MiBGIC REG(M7 自身中断使用 NVIC)
0x387000000x387fffff1 MiBReserved
0x385000000x386fffff2 MiBNPU
视频处理单元(VPU)
0x383400000x384fffff1792 KiBVPU(VPU 待核定:见本节前说明)
0x383300000x383fffff832 KiBVPU BLK_CTRL(VPU 待核定:见本节前说明)
0x383200000x3842ffff1088 KiBVPU VC8000E Encoder(VPU 待核定:见本节前说明)
0x383100000x3841ffff1088 KiBVPU G2 Decoder(VPU 待核定:见本节前说明)
0x383000000x3830ffff64 KiBVPU G1 Decoder(VPU 待核定:见本节前说明)
USB和GPU
0x382000000x382fffff1 MiBUSB2 REG
0x381000000x381fffff1 MiBUSB1 REG
0x380100000x380fffff960 KiBReserved
0x380080000x3800ffff32 KiBGPU2D REG
0x380000000x38007fff32 KiBGPU3D REG
QSPI和PCIe寄存器
0x360000000x37ffffff32 MiBQSPI RX Buffers Reserved
0x340000000x35ffffff32 MiBQSPI1 RX Buffer
0x33c000000x33ffffff4 MiBPCIe REG Reserved
0x338000000x33bfffff4 MiBPCIe1 REG
QSPI和DMA
0x331000000x337fffff7 MiBReserved
0x330100000x330fffff960 KiBReserved
0x330080000x3300ffff32 KiBQSPI1 TX Buffer
0x330000000x33007fff32 KiBAPBH DMA
外设总线(AIPS)
0x32c000000x32ffffff4 MiBAIPS-4
0x329000000x32bfffff3 MiBReserved
0x328000000x328fffff1 MiBReserved
0x327000000x327fffff1 MiBReserved
0x326000000x326fffff1 MiBReserved
0x325000000x325fffff1 MiBReserved
0x324000000x324fffff1 MiBReserved
0x323000000x323fffff1 MiBReserved
0x322000000x322fffff1 MiBReserved
0x321000000x321fffff1 MiBReserved
0x320000000x320fffff1 MiBReserved
0x310000000x31ffffff16 MiBReserved
0x30c000000x30ffffff4 MiBAIPS-5
0x308000000x30bfffff4 MiBAIPS-3
0x304000000x307fffff4 MiBAIPS-2
0x300000000x303fffff4 MiBAIPS-1
调试和保留区
0x290000000x2fffffff112 MiBReserved
0x280000000x28ffffff16 MiBA53/ DAP
0x240000000x27ffffff64 MiBReserved
0x220000000x23ffffff32 MiBReserved
0x210000000x21ffffff16 MiBReserved
0x204000000x20ffffff12 MiBReserved
M7别名区域(SYSTEM)
0x203000000x203fffff1 MiBCM7 ALIAS SYSTEM Reserved
0x202900000x202fffff448 KiBReserved
0x202000000x2028ffff576 KiBOCRAM
0x201900000x201fffff448 KiBReserved
0x201890000x2018ffff28 KiBReserved
0x201800000x20188fff36 KiBOCRAM_S
0x201100000x2017ffff448 KiBReserved
0x201080000x2010ffff32 KiBReserved
0x201000000x20107fff32 KiBCAAM (32K secure RAM)
0x200600000x200fffff640 KiBReserved
0x200200000x2005ffff256 KiBReserved
0x200000000x2001ffff128 KiBDTCM (数据TCM)
0x1ffe00000x1fffffff128 KiBReserved(RM 第 2 章标注;加载器别名差异见正文)
M7别名区域(CODE)
0x100000000x1ffdffff262016 KiBCM7 ALIAS CODE(具体转换依实现,见正文)
0x080000000x0fffffff128 MiBQSPI Code alias
低地址保留
0x040000000x07ffffff64 MiBReserved
0x010000000x03ffffff48 MiBReserved
0x00c000000x00ffffff4 MiBReserved
0x00b000000x00bfffff1 MiBReserved
片上RAM(OCRAM)
0x00a000000x00afffff1 MiBOCRAM Reserved
0x009900000x009fffff448 KiBReserved
0x009000000x0098ffff576 KiBOCRAM
TCM保留区
0x008280000x008fffff864 KiBReserved
0x008200000x00827fff32 KiBReserved
0x008000000x0081ffff128 KiBReserved
0x007e00000x007fffff128 KiBReserved
0x007d80000x007dffff32 KiBReserved
0x007000000x007d7fff864 KiBReserved
更多保留区
0x006000000x006fffff1 MiBReserved
0x005000000x005fffff1 MiBReserved
0x004000000x004fffff1 MiBReserved
0x002000000x003fffff2 MiBReserved
0x001900000x001fffff448 KiBReserved
安全RAM
0x001890000x0018ffff28 KiBOCRAM_S Reserved
0x001800000x00188fff36 KiBOCRAM_S
0x001100000x0017ffff448 KiBReserved
0x001080000x0010ffff32 KiBCAAM Reserved
0x001000000x00107fff32 KiBCAAM (32K secure RAM)
0x000200000x000fffff896 KiBReserved
指令TCM
0x000000000x0001ffff128 KiBITCM (指令TCM)

M7 的 DDR 主窗口为 0x40000000…0xbfffffff,共 2 GiB。M7 的 32 位地址空间还要容纳设备、PPB、QSPI、PCIe 和别名入口,所以不能把“32 位可表达 4 GiB”直接当成“能访问 4 GiB DDR”。

M7 在本地通过 0x00000000…0x0001ffff 访问 128 KiB ITCM,通过 0x20000000…0x2001ffff 访问 128 KiB DTCM。适合把关键代码、栈或热点数据放入 TCM,但“紧耦合、可预测”不是“任何访问都零周期”。容量、链接布局、启动搬运、DMA 可达性和并发访问都需要确认。

PPB 包含 NVIC、SysTick、SCB、MPU 等本核系统资源。M7 中断由 NVIC 处理;表中出现 GIC 窗口不表示 M7 应通过 GIC 收取自己的外设中断。

已确认的转换与实现范围

跳转到“已确认的转换与实现范围”
M7 本地窗口系统窗口起点转换MCUX_2.16.000 helper 覆盖范围
ITCM 0x000000000x007e0000加 0x007e0000128 KiB
DTCM 0x200000000x00800000减 0x1f800000128 KiB
OCRAM alias 0x202000000x00900000减 0x1f900000仅前 128 KiB;硬件表为 576 KiB
OCRAM_S alias 0x201800000x00180000减 0x20000000仅前 32 KiB;硬件表为 36 KiB

这里特意区分 helper 的实现范围和硬件容量。该 SDK 的 MEMORY_ConvertMemoryMapAddress() 对范围外地址直接原样返回;“返回了一个值”不表示已验证这个地址是合法 DMA 目标。

DDR CODE alias 更要看启动软件:Linux 6.8 的 imx_rproc 为 i.MX8MP 复用的地址转换表,把 0x10000000 入口映射到系统 0x40000000。某些 NXP U-Boot 版本的 bootaux 转换表采用不同假设。不能把其中一个实现的偏移写成所有固件通用公式。

RM 第 2 章把 0x1ffe0000…0x1fffffff 标为 Reserved,而部分 U-Boot 的主机侧加载表包含相关 TCM 别名处理;加载器接受一个地址不等于已经证明 M7 可以直接按该地址访问。此处保留手册行并标注差异,实际固件采用对应版本已验证的链接地址和加载路径。

下面示例只接受上表中 SDK helper 明确处理的四个窗口,而且检查整个非空范围没有跨出窗口。它只做数值转换,不证明 DMA 主控有访问权,也不处理 Linux 虚拟地址或 DDR CODE alias。

#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
bool m7_known_local_span_to_system(uint32_t local, size_t bytes,
uint32_t *system)
{
static const struct {
uint32_t local_base;
uint32_t system_base;
uint32_t size;
} windows[] = {
{ 0x00000000U, 0x007e0000U, 0x00020000U },
{ 0x20000000U, 0x00800000U, 0x00020000U },
{ 0x20200000U, 0x00900000U, 0x00020000U },
{ 0x20180000U, 0x00180000U, 0x00008000U }
};
if (system == NULL || bytes == 0U || bytes > UINT32_MAX) {
return false;
}
for (size_t i = 0; i < sizeof(windows) / sizeof(windows[0]); ++i) {
if (local < windows[i].local_base) {
continue;
}
uint32_t offset = local - windows[i].local_base;
if (offset < windows[i].size && bytes <= windows[i].size - offset) {
*system = windows[i].system_base + offset;
return true;
}
}
return false;
}

跨核共享时,还应从双方都能访问且已保留的 RAM 分配缓冲区,为控制字段与数据制定所有权协议;写完、完成 cache clean 和发布顺序后再通知对端,接收方取得所有权后再按映射需要 invalidate。MU 事件、SEMA4 锁与 cache 操作分别解决通知、互斥和可见性,不能互相替代。

以下两表是 SDMA 外设端口视图,不是 CPU 可以直接解引用的 AIPS 系统地址,也不是 DMA 通道编号。表中的 0x6000 只说明 UART1 位于相应视图的入口,不能直接把它填入任意 SDK/API 的源地址字段。

地址外设用途
0xF000SPBA智能外设总线仲裁器
0xE000Reserved保留
0xD000CAN_FD2CAN FD总线2
0xC000CAN_FD1CAN FD总线1
0xB000Reserved保留
0xA000Reserved保留
0x9000UART2串口2
0x8000UART3串口3
0x7000Reserved保留
0x6000UART1串口1
0x5000Reserved保留
0x4000eCSPI3增强型SPI总线3
0x3000eCSPI2增强型SPI总线2
0x2000eCSPI1增强型SPI总线1
0x1000Reserved保留
0x0000Reserved保留
地址外设用途
0xF000SPBA智能外设总线仲裁器
0xE000Reserved保留
0xD000Reserved保留
0xC000AUDIO XCVR RX (eARC)音频收发器接收(增强音频回传通道)
0xB000HDMI TX AUDLNK MSTHDMI发送音频链路主控
0xA000PDM (MICFIL)脉冲密度调制(麦克风滤波器)
0x9000ASRC异步采样率转换器
0x8000SAI7同步音频接口7
0x7000Reserved保留
0x6000SAI6同步音频接口6
0x5000SAI5同步音频接口5
0x4000Reserved保留
0x3000SAI3同步音频接口3
0x2000SAI2同步音频接口2
0x1000SAI1同步音频接口1
0x0000Reserved保留

CPU 系统地址中的 UART1 基址为 0x30860000;真正搬运的是其数据寄存器,地址、传输宽度、水位和握手请求应由匹配驱动处理。外设出现在地址表中,也不自动意味着已有对应请求源、脚本和驱动支持。例如表中的 CAN-FD 可见性不能单独证明可以照搬 UART 的 SDMA 接收方案。

SDMA 是带脚本处理能力的控制器,具有 32 个虚拟通道和 48 个请求输入。脚本、事件到通道映射、buffer descriptor 和优先级共同决定传输。通道 0 通常负责脚本装载和内部上下文操作;原文把 UART 接收固定放到 channel 0,并给每个通道虚构一个 SDMA1_CH0_IRQHandler(),不是可直接使用的 i.MX8MP 驱动接口。

UART 接收与循环音频的正确工作流

跳转到“UART 接收与循环音频的正确工作流”

Linux 外设驱动先按设备树连接请求 DMA 通道,再配置从设备参数,映射缓冲区,准备描述符,提交并 issue pending,最后在完成通知中归还/重用缓冲。连续音频常用 cyclic DMA;停止时必须等待 DMA 与回调结束后再释放内存。dmaengine_submit() 只是提交,不能替代 dma_async_issue_pending()。

M7 项目应采用该 SDK 的真实 SDMA/外设驱动和示例,确认脚本固件、请求源、通道分配、系统地址转换和 cache 维护。原文 sdma_channel_config_t、SDMA_ConfigChannel() 等未绑定到实际版本的代码只表达了流程,不能当作完整 SDK 示例。

双缓冲时,一个缓冲由 DMA 使用,另一个才由 CPU 填充。需要在对应 period 完成后切换所有权;不能仅把 current_buffer 翻转就假定 DMA 已切到另一地址。计算采样帧、通道数、样本位宽、period 字节数时要使用同一套单位。

传输速率与 CPU 开销分别计算

跳转到“传输速率与 CPU 开销分别计算”

115200 bit/s、8N1 下传输 1 MiB 的理想最短时间为:

t=1048576×10115200≈91.02  st=\frac{1048576\times10}{115200}\approx91.02\;s

1 MB(十进制)也约需 86.81 s,原来的“100 ms”相差数百倍。DMA 不改变线速;CPU 占用百分比必须实测,不能预填“轮询 100%、中断 50~80%、DMA 小于 1%”。800 MHz×100 ms 为 8000 万周期,也不能直接称为 8 亿条指令。

SDMA2/3 可以服务录音、播放、ASRC 等不同通路,但共享音频时钟和内存仍可能相互影响。智能音箱、网关等应用应按持续带宽、period 截止时间、溢出/欠载恢复及功耗测量来评估收益。

AIPS 把系统互连连接到较低带宽的外设寄存器空间;SPBA 对相关外设访问进行仲裁。分组有利于组织访问和电源/时钟控制,但 AIPS 组号并不是“此组永远属于某一个核”的安全策略。

多数表项以 64 KiB 槽位安排,不代表每个外设实现了 64 KiB 寄存器。CAAM 等还有更大的窗口,HDMI 子系统又细分成 4 KiB、2 KiB 等范围。表中保留的省略号表示原概览合并显示的保留槽,不能把省略处当作可分配资源。

AIPS1:系统控制、GPIO、GPT、WDOG

跳转到“AIPS1:系统控制、GPIO、GPT、WDOG”
起始地址结束地址外设大小功能说明
系统控制和安全
0x303f00000x303fffffReserved64 KiB保留
0x303e00000x303effffCSU64 KiB中央安全单元
0x303d00000x303dffffRDC64 KiB资源域控制器
0x303c00000x303cffffSEMAPHORE264 KiBRDC 信号量块(区别于通用 SEMA4)
0x303b00000x303bffffSEMAPHORE164 KiBRDC 信号量块(区别于通用 SEMA4)
电源和时钟管理
0x303a00000x303affffGPC64 KiB通用电源控制器
0x303900000x3039ffffSRC64 KiB系统复位控制器
0x303800000x3038ffffCCM64 KiB时钟控制模块
0x303700000x3037ffffSNVS_HP64 KiB安全非易失性存储(高功率)
0x303600000x3036ffffANA_PLL64 KiB模拟PLL(锁相环)
0x303500000x3035ffffOCOTP_CTRL64 KiB一次性可编程熔丝控制
引脚和配置
0x303400000x3034ffffIOMUXC_GPR64 KiBIO复用通用寄存器
0x303300000x3033ffffIOMUXC64 KiBIO复用控制
0x303200000x3032ffffReserved64 KiB保留
0x303100000x3031ffffReserved64 KiB保留
0x303000000x3030ffffReserved64 KiB保留
定时器
0x302f00000x302fffffGPT364 KiB通用定时器3
0x302e00000x302effffGPT264 KiB通用定时器2
0x302d00000x302dffffGPT164 KiB通用定时器1
0x302c00000x302cffffReserved64 KiB保留
0x302b00000x302bffffReserved64 KiB保留
看门狗和传感器
0x302a00000x302affffWDOG364 KiB看门狗3
0x302900000x3029ffffWDOG264 KiB看门狗2
0x302800000x3028ffffWDOG164 KiB看门狗1
0x302700000x3027ffffANA_OSC64 KiB模拟振荡器
0x302600000x3026ffffTMU (ANA_TSENSOR)64 KiB温度监控单元
0x302500000x3025ffffReserved64 KiB保留
GPIO
0x302400000x3024ffffGPIO564 KiB通用IO端口5
0x302300000x3023ffffGPIO464 KiB通用IO端口4
0x302200000x3022ffffGPIO364 KiB通用IO端口3
0x302100000x3021ffffGPIO264 KiB通用IO端口2
0x302000000x3020ffffGPIO164 KiB通用IO端口1
总线配置
0x301f00000x301fffffAIPS1_Configuration64 KiBAIPS1配置寄存器
0x301000000x301effffGlobal Module Enable960 KiB全局模块使能保留
0x300000000x300fffffReserved1 MiB保留

AIPS2:PWM、GPT、计数器与监测

跳转到“AIPS2:PWM、GPT、计数器与监测”
起始地址结束地址外设大小功能说明
性能监控和QoS
0x307f00000x307fffffQoSC64 KiB服务质量控制
0x307e00000x307effffReserved64 KiB保留
0x307d00000x307dffffPERFMON264 KiB性能监控器2
0x307c00000x307cffffPERFMON164 KiB性能监控器1
0x307b00000x307bffffReserved64 KiB保留(多个)
……………
定时器扩展
0x307000000x3070ffffGPT464 KiB通用定时器4
0x306f00000x306fffffGPT564 KiB通用定时器5
0x306e00000x306effffGPT664 KiB通用定时器6
0x306d00000x306dffffReserved64 KiB保留
系统计数器
0x306c00000x306cffffSystem_Counter_CTRL64 KiB系统计数器控制
0x306b00000x306bffffSystem_Counter_CMP64 KiB系统计数器比较
0x306a00000x306affffSystem_Counter_RD64 KiB系统计数器读取
PWM
0x306900000x3069ffffPWM464 KiB脉宽调制4
0x306800000x3068ffffPWM364 KiB脉宽调制3
0x306700000x3067ffffPWM264 KiB脉宽调制2
0x306600000x3066ffffPWM164 KiB脉宽调制1
0x306500000x3065ffffReserved64 KiB保留(多个)
……………
总线配置
0x305f00000x305fffffAIPS2_configuration64 KiBAIPS2配置寄存器
0x305000000x305effffGlobal Module Enable960 KiB全局模块使能保留
0x304000000x304fffffReserved1 MiB保留

AIPS3:通用通信、存储、网络及 A53–M7 MU

跳转到“AIPS3:通用通信、存储、网络及 A53–M7 MU”
起始地址结束地址外设大小功能说明
网络和存储
0x30bf00000x30bfffffENET2_TSN64 KiB以太网2(时间敏感网络)
0x30be00000x30beffffENET164 KiB以太网1
0x30bd00000x30bdffffSDMA164 KiB智能DMA1
0x30bc00000x30bcffffReserved64 KiB保留
0x30bb00000x30bbffffQSPI64 KiB四线SPI Flash控制器
0x30ba00000x30baffffReserved64 KiB保留(多个)
……………
SD/MMC
0x30b600000x30b6ffffuSDHC364 KiBSD/MMC主机控制器3
0x30b500000x30b5ffffuSDHC264 KiBSD/MMC主机控制器2
0x30b400000x30b4ffffuSDHC164 KiBSD/MMC主机控制器1
0x30b300000x30b3ffffReserved64 KiB保留(多个)
……………
I2C总线
0x30ae00000x30aeffffI2C664 KiBI2C总线6
0x30ad00000x30adffffI2C564 KiBI2C总线5
多核通信
0x30ac00000x30acffffSEMAPHORE_HS64 KiB通用硬件信号量 SEMA4
0x30ab00000x30abffffMU_1_B (A53, M7)64 KiB消息单元1B(A53-M7)
0x30aa00000x30aaffffMU_1_A (A53, M7)64 KiB消息单元1A(A53-M7)
0x30a900000x30a9ffffReserved64 KiB保留
0x30a800000x30a8ffffIRQ_STEER64 KiB中断路由(音频处理器)
0x30a700000x30a7ffffReserved64 KiB保留
串口和I2C
0x30a600000x30a6ffffUART464 KiB串口4
0x30a500000x30a5ffffI2C464 KiBI2C总线4
0x30a400000x30a4ffffI2C364 KiBI2C总线3
0x30a300000x30a3ffffI2C264 KiBI2C总线2
0x30a200000x30a2ffffI2C164 KiBI2C总线1
0x30a100000x30a1ffffReserved64 KiB保留(多个)
……………
总线配置
0x309f00000x309fffffAIPS3_Configuration64 KiBAIPS3配置寄存器
0x309400000x309effffGlobal Module Enable 1704 KiB全局模块使能保留
安全加密
0x309000000x3093ffffCAAM256 KiB加密加速和保证模块
SPBA总线外设
0x308f00000x308fffffSPBA164 KiB智能外设总线仲裁器1
0x308e00000x308effffReserved64 KiB保留
CAN总线
0x308d00000x308dffffFlexCAN264 KiBCAN FD总线2
0x308c00000x308cffffFlexCAN164 KiBCAN FD总线1
0x308b00000x308bffffReserved64 KiB保留(多个)
……………
串口
0x308900000x3089ffffUART264 KiB串口2
0x308800000x3088ffffUART364 KiB串口3
0x308700000x3087ffffReserved64 KiB保留
0x308600000x3086ffffUART164 KiB串口1
0x308500000x3085ffffReserved64 KiB保留
SPI
0x308400000x3084ffffeCSPI364 KiB增强SPI3
0x308300000x3083ffffeCSPI264 KiB增强SPI2
0x308200000x3082ffffeCSPI164 KiB增强SPI1
0x308100000x3081ffffReserved64 KiB保留(多个)
0x308000000x3080ffffReserved64 KiB保留

AIPS4:媒体、显示与高速接口控制

跳转到“AIPS4:媒体、显示与高速接口控制”
起始地址结束地址外设大小功能说明
显示和多媒体
0x32ff00000x32ffffffReserved64 KiB保留(多个)
……………
0x32fd00000x32fdffffHDMI_TX64 KiBHDMI发送器
0x32fc00000x32fcffff(HDMI_TX子系统)64 KiBHDMI TX子系统详细映射
0x32fb00000x32fbffffReserved64 KiB保留(多个)
……………
安全和高速IO
0x32f800000x32f8ffffTZASC64 KiBTrustZone地址空间控制器
0x32f700000x32f7ffffReserved64 KiB保留(多个)
……………
0x32f100000x32f1ffffHSIO BLK_CTL64 KiB高速IO块控制
0x32f000000x32f0ffffPCIE_PHY164 KiBPCIe PHY1
0x32ef00000x32efffffReserved64 KiB保留(多个)
……………
媒体处理
0x32ec00000x32ecffffMEDIA BLK_CTL64 KiB媒体块控制
0x32eb00000x32ebffffReserved64 KiB保留(多个)
……………
显示接口
0x32e900000x32e9ffffLCDIF264 KiBLCD接口2
0x32e800000x32e8ffffLCDIF164 KiBLCD接口1
0x32e700000x32e7ffffReserved64 KiB保留
MIPI接口
0x32e600000x32e6ffffMIPI_DSI164 KiBMIPI显示串行接口1
0x32e500000x32e5ffffMIPI_CSI264 KiBMIPI摄像头串行接口2
0x32e400000x32e4ffffMIPI_CSI164 KiBMIPI摄像头串行接口1
图像处理
0x32e300000x32e3ffffIPS Dewarp64 KiB图像去畸变处理
0x32e200000x32e2ffffISP264 KiB图像信号处理器2
0x32e100000x32e1ffffISP164 KiB图像信号处理器1
0x32e000000x32e0ffffISI64 KiB图像传感器接口
总线配置
0x32df00000x32dfffffAIPS4_configuration64 KiBAIPS4配置寄存器
0x32d000000x32deffffGlobal Module Enable960 KiB全局模块使能保留
0x32c000000x32cfffffReserved1 MiB保留

AIPS5:音频、DMA 与 DSP 通信

跳转到“AIPS5:音频、DMA 与 DSP 通信”
起始地址结束地址外设大小功能说明
0x30ff00000x30ffffffReserved64 KiB保留(大量)
……………
多核通信(音频DSP)
0x30e900000x30e9ffffMU_3_B (M7, Audio)64 KiB消息单元3B(M7-音频DSP)
0x30e800000x30e8ffffMU_3_A (M7, Audio)64 KiB消息单元3A(M7-音频DSP)
0x30e700000x30e7ffffMU_2_B (A53, Audio)64 KiB消息单元2B(A53-音频DSP)
0x30e600000x30e6ffffMU_2_A (A53, Audio)64 KiB消息单元2A(A53-音频DSP)
增强DMA(eDMA)
0x30e500000x30e5ffffeDMA Channels[31:16]64 KiBeDMA通道16-31(4KB/通道)
0x30e400000x30e4ffffeDMA Channels[15:0]64 KiBeDMA通道0-15(4KB/通道)
0x30e300000x30e3ffffeDMA Management64 KiBeDMA管理页
音频子系统
0x30e200000x30e2ffffAUDIO BLK_CTRL64 KiB音频块控制
0x30e100000x30e1ffffSDMA264 KiB智能DMA2
0x30e000000x30e0ffffSDMA364 KiB智能DMA3
总线配置
0x30df00000x30dfffffAIPS5_Configuration64 KiBAIPS5配置寄存器
0x30d000000x30deffffGlobal Module Enable 1960 KiB全局模块使能保留
SPBA音频外设
0x30cf00000x30cfffffSPBA264 KiB智能外设总线仲裁器2
0x30ce00000x30ceffffReserved64 KiB保留(多个)
……………
0x30cc00000x30ccffffAUDIO XCVR RX (eARC)64 KiB音频收发器RX(增强ARC)
0x30cb00000x30cbffffHDMI TX AUDLNK MSTR64 KiBHDMI发送音频链路主控
0x30ca00000x30caffffPDM (MICFIL)64 KiB脉冲密度调制(麦克风)
0x30c900000x30c9ffffASRC64 KiB异步采样率转换器
数字音频接口(SAI)
0x30c800000x30c8ffffSAI764 KiB同步音频接口7
0x30c700000x30c7ffffReserved64 KiB保留
0x30c600000x30c6ffffSAI664 KiB同步音频接口6
0x30c500000x30c5ffffSAI564 KiB同步音频接口5
0x30c400000x30c4ffffReserved64 KiB保留
0x30c300000x30c3ffffSAI364 KiB同步音频接口3
0x30c200000x30c2ffffSAI264 KiB同步音频接口2
0x30c100000x30c1ffffSAI164 KiB同步音频接口1
0x30c000000x30c0ffffReserved64 KiB保留

从地址表走到实际驱动

跳转到“从地址表走到实际驱动”

GPIO 点灯需要先确认板上连接、pad ALT 与电气属性,再设置方向和输出值;GPIO1 的基址并不能告诉你某个 LED 接在哪一位。UART 同样需要 pinmux、时钟、波特率、FIFO、中断/DMA 和错误处理。Linux 下应使用 GPIO/UART 子系统接口;不要让 M7 同时改动 Linux 已使用的实例。

CCM 的 root/CCGR 布局应采用 MIMX8ML8 的 fsl_clock 定义;原文使用类似其他 i.MX 系列的 CCGR0 通用结构,不能仅换基址就适配。IOMUXC 的 ALT 编号取决于具体 pad;GPC 请求和握手也需要电源域所有权与超时处理。

MU1 连接 A53/M7,MU2 连接 A53/Audio DSP,MU3 连接 M7/Audio DSP。普通 MU 每侧有四个 32 bit TX/RX 寄存器,发送前检查可写状态,接收按协议读取并确认。大数据保存在共享内存,MU 传递事件或元信息,不能用 A53 GIC 的核间 SGI 代替发往 M7 的 MU 通知。

通用 SEMA4(0x30ac0000)有 16 个 gate。正确的尝试加锁包含写入锁请求并读回确认;SEMA4_GetLockProc() 或读取 gate 为 0 只是在观察状态。原“等待空闲→直接进入临界区”的代码有竞争窗口。释放必须由持有者执行,异常恢复也要避免强制解锁仍在使用的资源。AIPS1 的 RDC 信号量块与通用 SEMA4 不应混为一谈。

RDC 配置主控域与外设/内存策略,CSU 和安全属性进一步参与安全访问判断。将 M7 改到某个域号,不会自动为它开放所有 UART,也不会自动阻止 A53;要核对两边实际权限与锁定状态。

6. DAP 与 CoreSight 调试地址图

跳转到“6. DAP 与 CoreSight 调试地址图”
起始地址结束地址大小分配
CoreSight调试基础设施
0x28c0a0000x28ffffff4056 KiBReserved
0x28c090000x28c09fff4 KiBHUGO_CXCTI1 (交叉触发接口1)
0x28c080000x28c08fff4 KiBHUGO_CXCTI0 (交叉触发接口0)
0x28c070000x28c07fff4 KiBCXTPIU (跟踪端口接口单元)
0x28c060000x28c06fff4 KiBCXTMC_ETR (嵌入式跟踪路由器)
0x28c050000x28c05fff4 KiBATB_REPLICATOR (跟踪总线复制器)
0x28c040000x28c04fff4 KiBCXTMC_ETB (嵌入式跟踪缓冲)
0x28c030000x28c03fff4 KiBHUGO_ATB_FUNNEL (跟踪漏斗)
0x28c020000x28c02fff4 KiBCXTSGEN_READ (时间戳读取)
0x28c010000x28c01fff4 KiBCXTSGEN_CTRL (时间戳控制)
0x28c000000x28c00fff4 KiBHUGO ROM Table (根ROM表)
保留区域
0x28b500000x28bfffff704 KiBReserved
0x28b400000x28b4ffff64 KiBReserved
0x28b300000x28b3ffff64 KiBReserved
0x28b200000x28b2ffff64 KiBReserved
0x28b100000x28b1ffff64 KiBReserved
0x28a500000x28b0ffff768 KiBReserved
0x28a400000x28a4ffff64 KiBReserved
0x28a300000x28a3ffff64 KiBReserved
0x28a200000x28a2ffff64 KiBReserved
0x28a100000x28a1ffff64 KiBReserved
0x289500000x28a0ffff768 KiBReserved
0x289400000x2894ffff64 KiBReserved
0x289300000x2893ffff64 KiBReserved
0x289200000x2892ffff64 KiBReserved
0x289100000x2891ffff64 KiBReserved
0x288500000x2890ffff768 KiBReserved
0x288400000x2884ffff64 KiBReserved
0x288300000x2883ffff64 KiBReserved
0x288200000x2882ffff64 KiBReserved
0x288100000x2881ffff64 KiBReserved
音频处理器调试
0x288000000x2880ffff64 KiBAudio Processor Debug
0x287500000x287fffff704 KiBReserved
Cortex-A53 CPU3 调试接口
0x287400000x2874ffff64 KiBMP4-CPU3 Trace (跟踪)
0x287300000x2873ffff64 KiBMP4-CPU3 PMU (性能监控单元)
0x287200000x2872ffff64 KiBMP4-CPU3 CTI (交叉触发接口)
0x287100000x2871ffff64 KiBMP4-CPU3 Debug (调试单元)
0x286500000x2870ffff768 KiBReserved
Cortex-A53 CPU2 调试接口
0x286400000x2864ffff64 KiBMP4-CPU2 Trace
0x286300000x2863ffff64 KiBMP4-CPU2 PMU
0x286200000x2862ffff64 KiBMP4-CPU2 CTI
0x286100000x2861ffff64 KiBMP4-CPU2 Debug
0x285500000x2860ffff768 KiBReserved
Cortex-A53 CPU1 调试接口
0x285400000x2854ffff64 KiBMP4-CPU1 Trace
0x285300000x2853ffff64 KiBMP4-CPU1 PMU
0x285200000x2852ffff64 KiBMP4-CPU1 CTI
0x285100000x2851ffff64 KiBMP4-CPU1 Debug
0x284500000x2850ffff768 KiBReserved
Cortex-A53 CPU0 调试接口
0x284400000x2844ffff64 KiBMP4-CPU0 Trace
0x284300000x2843ffff64 KiBMP4-CPU0 PMU
0x284200000x2842ffff64 KiBMP4-CPU0 CTI
0x284100000x2841ffff64 KiBMP4-CPU0 Debug
多核ROM表
0x284000000x2840ffff64 KiBMP4 ROM Table (A53多核ROM表)
0x280100000x283fffff4032 KiBReserved
根调试接口
0x280000000x2800ffff64 KiBDAP ROM Table (调试访问端口根表)

这里的 MP4 表示四核处理器集群,不是视频文件格式。每个 A53 核的 Debug、CTI、PMU、Trace 具有独立入口,ROM Table 用于组件发现。调试器还要识别 AP、认证、电源和组件状态,不能仅以地址规则推导寄存器协议。

组件作用使用边界
Debug断点、观察点和外部调试控制通用寄存器不是 Debug_base + reg_num*4 的线性数组
CTI把选定触发信号在组件间关联需配置输入/输出通道与握手;向基址写 0xf 不会自动让四核同步暂停
PMU周期及微架构事件计数事件定义、可用计数器、溢出和内核权限均需确认
Trace 源产生执行跟踪信息输出通常是压缩协议数据,不是直接可读的每条指令文本
ATB funnel汇合多路 trace不会自动扩展下游带宽
Replicator将 trace 分发到不同路径需要可用 sink 和正确通路
TMC/ETB/ETF、ETR片上缓冲或路由到系统内存4 KiB 寄存器窗口长度不是 DDR trace 缓冲大小;概述给出的 ETF 内部存储为 4 KiB
TPIU向外部跟踪接口输出依赖板上引出和探针能力,不保证任意开发板可用

原示例中的硬件断点寄存器偏移、OpenOCD target/imx8mp.cfg、GDB 多核输出以及 ETR 的 mem_addr/mem_size/enable 路径没有绑定可验证配置,不应作为照抄命令。应采用实际调试器支持的 SoC/板级脚本,AArch64 目标使用相匹配的 ELF 与调试架构;arm-none-eabi-gdb 不能仅凭名称就保证支持该 A53 调试配置。

性能计数与 trace 分开使用

跳转到“性能计数与 trace 分开使用”

Linux 上先检查可用事件,再测量已有程序。例如在权限和事件支持均满足时:

终端窗口
perf list
perf stat -e cycles,instructions -- ./myapp

这两行是目标 Linux 的使用示例;程序名按实际替换。IPC 为 instructions/cycles。cache miss rate 需要相应缓存层级的 miss 数除以 access 数,不能用 cache-misses/cycles 算百分比,也不能假定通用别名在当前 PMU 上可用或代表同一层级。

CoreSight 的 Linux 框架按 source/link/sink 管理通路,实际 sysfs 接口使用具体设备的 enable_source、enable_sink 等定义。若 perf list 中存在 cs_etm,可按该内核文档选择已枚举的 sink,用 perf 的 AUX trace 路径采集并结合匹配 ELF/解码支持分析。任意从 ETR 导出的原始 trace.bin 并不是 perf.data,不能直接用 perf script -i trace.bin 获得原文那种调用轨迹。

调试时还要考虑暂停对实时外设、看门狗和多核锁的影响;追踪本身也有带宽和存储开销。性能数字应记录测试输入、频率、cache 状态、编译选项与重复次数。

7. Audio DSP 地址图与内存安排

跳转到“7. Audio DSP 地址图与内存安排”
起始地址结束地址大小分配
0x3b7700000x3bffffff8768 KiBReserved (保留)
0x3b7400000x3b76ffff192 KiBReserved (保留)
系统RAM
0x3b7000000x3b73ffff256 KiBAudio Processor System RAM (OCRAM_A)
0x3b6f88000x3b6fffff30 KiBReserved (保留)
本地紧耦合存储器
0x3b6f80000x3b6f87ff2 KiBAudio Processor Local Memory (Instr Ram0)
0x3b6f00000x3b6f7fff32 KiBAudio Processor Local Memory (Data Ram1)
0x3b6e80000x3b6effff32 KiBAudio Processor Local Memory (Data Ram0)
0x3b0000000x3b6e7fff7072 KiBReserved (保留)

RM 明确该音频处理器为 Cadence HiFi4,不需要写“推测”。其配置包含 32 KiB I-cache、48 KiB D-cache、2 KiB 指令 TCM、64 KiB 数据 TCM(两个 32 KiB bank)和 256 KiB OCRAM_A。上表是系统侧窗口;DSP 固件的本地地址与链接脚本要使用对应 Xtensa 工具链定义,不能让 A53 的 C section 名称直接决定 DSP 放置位置。

RM 列出 nominal 600 MHz、overdrive 800 MHz,并具有每周期四个 32 bit MAC 或八个 16 bit MAC 的能力。在 800 MHz、适用的 16 bit 运算与理想流水条件下,算术峰值可写为 6.4 GMAC/s;32 bit 对应 3.2 GMAC/s。这不是实测编解码性能,也不能推出任意八通道算法都在 1 ms 内完成。

指令和数据分开、多个数据 bank 及 SIMD/VLIW 可以增加并行度,但仍受 bank 冲突、访存、指令安排、数据类型和库实现限制。原文所列“FFT 2 μs、MP3 十路、A53 慢 25~33 倍、DSP 只耗 0.2 W”等缺少可复现测试条件,不作为设备指标。

音频工作流与容量预算

跳转到“音频工作流与容量预算”

智能音箱可采用 PDM/SAI 采集→DMA 环形缓冲→波束形成/回声消除/降噪→播放或编码;车载音响可包含多通道混音、均衡、分频与输出;会议终端还需要同步采集、远端参考和编解码。模块顺序、状态保存和延迟预算取决于算法,不能用几个未定义函数拼出已可运行的固件。

例如 48 kHz、八通道、16 bit、每块 128 帧的数据量为 128×8×2=2048 byte,双缓冲为 4096 byte;仅收齐一块就需约 2.667 ms。端到端时延还要加处理、排队与输出,不能同时宣称这个块长实现小于 1 ms 总延迟。

存储区可考虑放置必须核对
2 KiB Instr RAM经测量选出的短热点代码链接后的实际大小和启动复制,不能保证整个主循环都放得下
Data RAM0当前采样块或工作区bank/对齐、容量、DMA 可达性、缓存属性
Data RAM1系数、历史状态或另一工作区同一 bank 内实际总占用;4096 个 float 系数加同量状态已恰好 32 KiB
OCRAM_A较大的代码、缓冲或状态AUDIOMIX 电源、权限及与其他使用者的分配
DDR大文件、模型、较大缓冲延迟和带宽、cache、保留区及所有权

原例的 .dram1 属性只写在系数声明前,后一个状态数组不会自动继承;section 名称还必须被链接脚本接收,并通过 map 文件确认。SDK、DSP 固件和 Linux 中随意使用相同字符串也不会自动指向同一物理 RAM。

A53 可承担网络、文件和 UI,DSP/M7 承担合适的实时处理;通过 MU 通知共享缓冲时,应传递可校验的长度/偏移/序号,约定双方字节序、内存布局和重启恢复。直接把本核指针塞进消息,或只靠一个 ready 变量,不构成完整跨核协议。

起始地址结束地址区域大小描述
HDMI核心控制器
0x32fd80000x32fdffffHDMI TX Controller & PHY32 KiB0xFF00-0xFFFF: HDMI TX PHY
0x8000-0xFE31: HDMI TX Controller
安全和保留区
0x32fd40000x32fd7fffReserved16 KiB保留
0x32fd30000x32fd3fffHDMI TX TRNG4 KiB真随机数发生器(加密用)
0x32fd20000x32fd2fffReserved4 KiB保留
0x32fd10000x32fd1fffReserved4 KiB保留
0x32fd00000x32fd0fffReserved4 KiB保留
更多保留区
0x32fcf0000x32fcffffReserved4 KiB保留
0x32fce0000x32fcefffReserved4 KiB保留
0x32fcd0000x32fcdfffReserved4 KiB保留
0x32fcc0000x32fccfffReserved4 KiB保留
0x32fc70000x32fcbfffReserved20 KiB保留
显示接口
0x32fc60000x32fc6fffLCDIF34 KiBLCD接口3(连接到HDMI)
0x32fc50000x32fc5fffReserved4 KiB保留
音视频并行接口
0x32fc48000x32fc4fffHTX_PAI (BLK_CTRL)2 KiBHDMI TX并行音频接口
0x32fc40000x32fc47ffHTX_PVI (BLK_CTRL)2 KiBHDMI TX并行视频接口
中断和控制
0x32fc30000x32fc3fffReserved4 KiB保留
0x32fc20000x32fc2fffIRQ_STEER4 KiB中断路由控制器
0x32fc10000x32fc1fffReserved4 KiB保留
块控制
0x32fc00000x32fc0fffHDMI TX BLK_CTRL4 KiBHDMI TX块控制器

HTX_PVI 与 HTX_PAI 的地址区间均为 2 KiB,原表与 RM 对应容量栏写成 4 KiB;这里按明确起止地址更正。HDMI 控制器/PHY 行中的偏移是相对 0x32fd0000 子窗口描述,不能一律相对每个子模块基址再加一遍。

组件在显示通路中的作用
LCDIF3从内存读取配置好的帧数据,产生视频时序
HTX_PVI并行视频接口及相关控制
HTX_PAI并行音频接口及相关控制
HDMI TX controller视频/音频打包、链路和协议控制
HDMI PHY电气发送、串行化与时钟相关物理层功能
TRNG安全功能使用的随机源,不能单独完成 HDCP
BLK_CTRL子系统时钟/复位等局部控制
IRQ_STEER汇集/路由子系统中断,具体掩码和输出需按实例配置

实际启动要按驱动的依赖关系完成电源、时钟、复位、显示时序、帧缓冲、PHY 和链路状态设置,并读取接收端 EDID/连接状态选择模式。原文混用较早 LCDIF 的寄存器结构、假定的 HDMI_CTRL/PHY_CTRL 偏移与固定写值,不能直接用于 i.MX8MP。

分辨率、链路带宽和帧缓冲

跳转到“分辨率、链路带宽和帧缓冲”

i.MX8MP 数据手册给出的 HDMI 上限为 3840×2160p30、297 MHz 像素时钟;不能因接口称为 HDMI 2.0a 就宣称 4Kp60。VPU 的硬件编码/解码上限也要独立核对,ISP 处理分辨率和 HDMI 输出分辨率不是解码能力。

在 RGB/YCbCr 4:4:4、每色 8 bit 的 TMDS 情况下,每条数据 lane 每像素发送 10 bit:297 MHz 像素时钟对应每 lane 2.97 Gbit/s,三 lane 合计 8.91 Gbit/s。像素时钟、串行数据速率和时钟 lane 不能混写;色深和采样方式改变时应按实际模式重新计算。

帧缓冲先按 stride×height 分配,再考虑多缓冲和对齐:

示例格式单帧字节数(无额外 stride padding)两帧最低字节数
1920×1080 RGB8886,220,80012,441,600
1920×1080 XRGB88888,294,40016,588,800
3840×2160 XRGB888833,177,60066,355,200

原文以 2 MiB 偏移放置下一张 1080p RGB888 帧,会与前一帧重叠。翻页还要遵守 vblank/提交完成同步,CPU 或解码器写入与显示读取应使用驱动支持的 buffer/fence/DMA 同步;不能写个地址就保证无撕裂。

4K XRGB8888 在 30 fps 时仅一次连续读帧就约 995.3 MB/s,尚未计算 GPU 写入、合成、解码和其他主控流量。这是数据量估算,不能当作实测总带宽。

数据手册列出 32 通道 HDMI 音频输出支持;实际 channel layout、采样率、位宽、压缩格式与 eARC 能力取决于整个链路及驱动。HDCP 还涉及专用协议、密钥和软件配置,不能通过打开 TRNG 和一个 enable 位完成认证;原示例也不能代表已经获得内容保护功能。这里只说明模块边界,不提供未经验证的密钥加载步骤。

9. 使用这份图谱时的核对顺序

跳转到“9. 使用这份图谱时的核对顺序”
  1. 确定发起访问的核/主控和地址类型,再查对应视图。
  2. 确认芯片料号、板上连接、实际 RAM 容量和 Linux/固件保留区。
  3. 用当前驱动/BSP 的资源、寄存器结构和地址转换规则核对基址及范围。
  4. 确认域权限、时钟、电源、复位和所有权,避免两个驱动控制同一资源。
  5. 为 DMA/共享内存明确缓存、屏障、通知、缓冲生命周期与错误恢复。
  6. 对频率、吞吐、时延、功耗等结论记录实际测量条件;地址表本身不提供这些保证。