一、IVT(Image Vector Table,映像向量表)
作用:ROM的"导航地图",告诉ROM:
- 程序入口在哪(entry)
- 硬件配置在哪(指向DCD)
- 镜像信息在哪(指向Boot Data)
- 我在哪(self地址)
位置:固定在特定偏移(SD卡:0x400,NOR:0x1000等)
大小:32字节固定
二、DCD(Device Configuration Data,设备配置数据)
作用:硬件的"安装说明书",告诉ROM如何:
- 配置时钟(锁相环PLL、时钟控制模块CCM)
- 初始化DDR内存
- 设置电压
- 其他关键硬件
特点:
- ROM在跳转前执行DCD
- 确保你的程序有正确的运行环境
- 特别是DDR初始化必须在DCD中完成
完整时钟树
晶振(24MHz)
↓
[PLL1] → 996MHz → [CCM] → CPU核心
[PLL2] → 528MHz → [CCM] → DDR控制器
[PLL3] → 480MHz → [CCM] → USB接口
[PLL4] → 多种频率 → [CCM] → 各种外设
[PLL5] → 视频时钟 → [CCM] → 显示接口
[PLL6] → 音频时钟 → [CCM] → 音频接口
[PLL7] → ENET时钟 → [CCM] → 网络接口
为什么需要这么复杂?性能需求不同:
- CPU:需要最高频率(996MHz)算得快
- DDR:需要特定频率(528MHz)匹配内存芯片
- USB:需要精确480MHz(USB2.0标准)
- GPIO:66MHz就够了,太快反而有信号完整性问题
特性 | OCRAM | DDR |
位置 | 芯片内部 | 外部芯片 |
大小 | 128KB | 256MB-1GB |
速度 | 快 | 稍慢 |
初始化 | 自动 | 需要DCD配置 |
用途 | 启动数据 | 程序运行 |
没有DDR的限制:
只能在128KB的OCRAM中运行,放不下稍微复杂的程序,放不下Linux内核,放不下图形界面
有DDR的优势:
可以运行Linux(需要几百MB),可以运行复杂的应用程序,可以处理大量数据,可以使用图形显示
核心要点:
- IVT = 地址簿(告诉ROM各种东西在哪里)
- DCD = 设置手册(告诉ROM如何配置硬件)
- ROM只认这两个结构,找不到就启动失败
- 程序员编写的代码运行时,DCD的初始化已完成