题目4: XBL设备树中DDR节点配置
在XBL阶段,设备树(Device Tree)是描述DDR硬件拓扑与初始化参数的唯一静态信息来源。每个DDR控制器、每个通道、每个PHY的物理特性与配置策略均通过一个或多个设备树节点表达。正确填写设备树中的DDR节点,是XBL能够完成DDR枚举、频率切换、电压调整以及PHY校准的前提。
本章讲解设备树语法中与DDR相关的节点结构,详细分析频率表、ODT、ZQ校准以及PHY配置项的含义与填写规范。读者将掌握如何读取/编写一个典型平台(如Snapdragon 8 Gen系列)的DDR设备树节点。
4.1 设备树语法与DDR节点结构
设备树采用DTS(Device Tree Source)语法,以树状方式描述硬件。DDR相关的节点通常嵌套在soc节点下的ddr或memory-controller节点中。一个典型的DDR控制器节点结构如下:
soc {
ddr-controller@ff000000 {
compatible = "qcom,ddr4-ctl-v2";
reg = <0x0 0xff000000 0x0 0x1000>;
#address-cells = <2>;
#size-cells = <0>;
channel@0 {
reg = <0x0 0x0 0x0 0x0>; /* 通道索引与物理偏移 */
freq-table = <
0 2133000 0 0
1 1866000 0 0
2 1600000 0 0
>;
odt-config {
ca-odt = <60>; /* CA端接阻抗,单位Ω */
clk-odt = <48>;
dq-odt = <40>;
};
zq-config {
zq-clk-div = <4>;
zq-cal-samples = <8>;
zq-lpf-coefficient = <0x3>;
};
phy-config {
drive-strength = <0x1F>;
dqs-slew-rate = <0x2>;
rx-eq-enable = <1>;
};
};
};
};
上述代码展示了四个关键配置区:频率表(freq-table)、ODT配置(odt-config)、ZQ校准配置(zq-config)以及PHY配置(phy-config)。实际平台可能还会包含电压调节节点、时序参数节点等。
#address-cells和#size-cells用于描述子节点的地址格式。DDR通道节点一般使用reg属性区分不同的物理通道。
4.2 DDR频率表配置
频率表定义了DDR控制器支持的频率状态(Frequency State)。每个状态包含索引、核心频率(kHz)、电压调节器标识(通常为0表示自动)以及预留字段。XBL在枚举时按默认顺序遍历频率表,并尝试在每个频率点完成训练。
频率表通常以u32数组形式存在,每4个数字描述一个状态:
freq-table = <
STATE_INDEX FREQ_IN_KHZ VREG_ID RESERVED
0 2133000 0 0
1 1866000 0 0
2 1600000 0 0
>;
| 字段 | 说明 | 常见值 |
|---|---|---|
| STATE_INDEX | 频率状态编号,从0递增 | 0 ~ 7 |
| FREQ_IN_KHZ | 核心频率,单位kHz | 1600000 ~ 4266000 |
| VREG_ID | 电压调节器索引,0表示自动 | 0 或 1 |
| RESERVED | 保留位,通常填0 | 0 |
XBL默认使用频率表中的最后一个状态(最高频)作为目标频率。若某个频率点训练失败,XBL会回退到较低频率状态并重新训练。
4.3 ODT(片上端接)配置
ODT(On-Die Termination)用于匹配传输线的特征阻抗,减少信号反射。DDR控制器需要分别配置CA总线、CK时钟线和DQ数据线的端接阻抗值。设备树节点中的odt-config通常包含三个属性:
- ca-odt:命令/地址线的ODT阻抗,单位Ω。常见值40、48、60。
- clk-odt:差分时钟线的ODT阻抗。
- dq-odt:数据线的ODT阻抗。
ODT值必须与PCB走线设计以及DIMM模块(或POP封装)的端接要求一致。错误的ODT会导致信号眼图闭合,XBL可能在训练阶段报告同步错误。
4.4 ZQ校准配置
ZQ校准用于精确调整DDR PHY的输出驱动强度,以补偿工艺、电压和温度(PVT)变化。XBL在每次频率切换或冷启动时都会执行ZQ校准。设备树中zq-config配置项包括:
- zq-clk-div:ZQ校准时钟分频系数,决定校准精度与速度的平衡。
- zq-cal-samples:每次校准采样的次数,通常为4、8或16。
- zq-lpf-coefficient:低通滤波器系数,用于稳定校准结果。
ZQ校准的典型流程如下:
- XBL向DDR控制器发起ZQ校准命令,等待PHY返回完成状态。
- PHY根据设备树中的
zq-clk-div生成内部采样时钟。 - 采样完毕后,PHY更新驱动码寄存器,并锁定校准值。
- 若校准失败,XBL会记录错误寄存器并尝试重试。
4.5 PHY配置项
PHY配置项直接控制DDR物理层的行为,包括驱动强度、信号斜率、均衡等。设备树中的phy-config属性集合因芯片不同而异,但常见的通用项如下:
- drive-strength:数据线驱动强度,通常为0x1F(31)表示最大驱动。
- dqs-slew-rate:DQS信号的压摆率,0~3分别对应慢至快。
- rx-eq-enable:接收均衡器使能,1为开启,0为关闭。
- dqs-offset:DQS相对于CLK的相位偏移,单位ps。
PHY配置调优实验通常在硬件验证阶段进行,锁定后的参数直接固化在设备树中。XBL在每次启动时读取这些配置并写入PHY寄存器。