CA 总线基本概念:命令地址信号映射归纳总结
CA 总线,说白了就是控制器发给 DRAM 的「命令+地址」传输通道。我刚开始接触 LPDDR4 时,总觉得 CA 和 DQ 一样是数据总线,结果调试时被时序坑惨了——后来才明白,CA 的拓扑、电平、延迟和 DQ 完全是两套规矩。这节就把 CA 总线的信号映射掰开揉碎讲清楚。
CA 总线的信号构成
LPDDR4 的 CA 总线一共用 6 根单向线:CA[5:0]。注意,它是单向的,只从控制器发往 DRAM,不像 DQ 那样双向。每根 CA 线在时钟上升沿和下降沿各传输 1 bit 信息,所以一个时钟周期能传 12 bit。
- CA[5:0]:6 根命令地址线,双沿采样
- CK_t / CK_c:差分时钟,CA 信号以 CK_t 的交叉沿为参考
- CS:芯片选择,决定当前命令发给哪个 rank
- CKE:时钟使能,控制自刷新、掉电等状态
- ODT:片内端接,CA 和 DQ 共用,但 CA 的 ODT 有独立时序
这里有个我踩过的坑:曾经遇到 CA 信号在高温下眼图塌陷,查了半天发现是 ODT 阻值没按数据手册里的温度系数补偿。嗯,LPDDR4 的 ODT 是分段可调的,别只照搬默认值。
命令编码与地址映射
我把 LPDDR4 常用命令的 CA 映射整理成了表格。你看到这个表,基本就掌握了 CA 总线的「翻译规则」。
| 命令 | CS | CA[5:0] 上升沿 | CA[5:0] 下降沿 | 说明 |
|---|---|---|---|---|
| 激活 (ACT) | L | Row Address[14:9] | Row Address[8:3] | 打开一行 |
| 读 (RD) | L | Bank[2:0] + BL | Col Address[9:4] | 突发长度固定 16 |
| 写 (WR) | L | Bank[2:0] + BL | Col Address[9:4] + MRS | 注意写掩码在 MR 里 |
| 预充电 (PRE) | L | 000 110 | 000 000 | ALL 位控制全 Bank |
| 刷新 (REF) | L | 100 000 | 000 000 | 每 7.8us 一次 |
| 模式寄存器写 (MRW) | L | MR[7:2] | Data[7:0] | 配置时序、驱动强度等 |
你看,ACT 命令的上升沿传的还是行地址的高 6 位,下降沿传低 6 位。意思就是一次 ACT 需要 2 个 CK 边沿才能把完整的 12 bit 行地址发送出去。我个人习惯在调试时先抓一个 ACT 命令,数 CA[5:0] 波形,确认左右沿匹配——这招在 CA 训练失败时特别快。
地址映射的层级关系
LPDDR4 的地址不是单纯的行列号。它包含 BG (Bank Group)、Bank、Row、Column 四层。我把常见的地址映射画出来,你一看就懂。
典型地址映射示例(16Gb die, ×16 宽度)
- BG: 2 bit (BG[1:0]) → 4 个 Bank Group
- Bank: 2 bit (BA[1:0]) → 每个 BG 内 4 个 Bank
- Row: 15 bit (RA[14:0]) → 32K 行
- Column: 10 bit (CA[9:0]) → 1K 列
注意:CA 总线上传输的地址是复用的。同一个 CA[5:0] 引脚,在 ACT 时钟沿传行地址,在 RD/WR 时钟沿传列地址。千万别搞混。
CA 总线的时序要点
CA 训练失败,多半出在下面几个参数上。我列个清单,你调试时逐一排查。
- tIS (输入建立时间):CA 信号在 CK 交叉沿之前的稳定时间。LPDDR4 一般要求 0.3ns 以上。
- tIH (输入保持时间):CA 信号在 CK 交叉沿之后的稳定时间。通常 0.3ns。
- tDQSQ (CA 输出时序偏差):控制器内部 CA 信号的 clock-to-out 偏差,随电压温度变化。
- CA ODT 阻抗匹配:我碰到过阻抗设成 60Ω 时信号反射严重,改成 48Ω 后眼图眼高增加 40mV。
为什么会同时调 tIS 和 tIH?因为 LPDDR4 的 CA 是双沿采样,左右沿的时序窗口不对称。我曾经在某个项目中,上升沿能满足 tIS 但下降沿差 20ps——最后发现是控制器内部的 PLL 相位不对称,加了个延迟后解决。
结构图:CA 命令地址信号映射流程
下面这张 SVG 图展示了一个 CA 命令从控制器到 DRAM 的完整路径,包括地址分层和命令编码的合并。
避坑指南:CA 训练失败的常见原因
我经历过几个项目,CA 训练失败的根因高度重复。你下次遇到这问题,按顺序查。
⚠️ 我建议的排查顺序:
- 用示波器量 CK_t/CK_c 的交叉点电压——LPDDR4 要求 VIX 在 0.45V~0.55V 之间,很多板子交叉点偏移到 0.6V,导致建立时间不足。
- 检查 CA 走线的等长偏差。我见过一组 CA 线长了 300ps,直接导致下降沿采样错误。
- 核对 CS 信号的时序。CS 是每命令的基础,CS 沿和 CK 的相位关系必须在 tIS 窗口内。
- 查 DRAM 的 MRS 配置。CA ODT 阻值、驱动强度、差分输入阈值——这些全在 MR 寄存器里,写错一个就能让脸图闭合。
💡 一个小技巧: 如果你没有差分探头,可以用单端探头测 CK_t 和 CK_c 的交叉点——把两个探头的地线夹在板子上同一个 GND 点,然后用数学功能做 (CH1 - CH2) × 0.5,得到的波形交叉点就是真实的 VIX。我在产测线上经常这么干,比借差分探头快多了。
地址映射的实际案例
拿一个 8Gb die、×32 位宽的 LPDDR4 颗粒举例:
- 行地址需要 15 bit,用 2 个时钟沿传完(上升沿 6 + 下降沿 6 + 上升沿再 3?不对,LPDDR4 一个 ACT 命令只占 1 个时钟周期(2 个边沿),共传 12 bit。那多出来的行地址是怎么来的?
- 答案是:行地址一共 15 bit,但在 ACT 命令中只传 12 bit,另外 3 bit 由之前写入的 MRS 或某个特殊寄存器提供。你想想看,这不就省了 0.5 个时钟周期。后来我在规范里看到这叫「行地址压缩模式」,确实提升了命令效率。
写到这里,我给一张汇总表,把 CA 信号和地址的对应关系列清楚。调试时对着表抓波形,一眼就能看出左/右沿是否对齐。
| 命令 | CS 状态 | 时钟沿 | CA5 | CA4 | CA3 | CA2 | CA1 | CA0 |
|---|---|---|---|---|---|---|---|---|
| ACT | L | 下降沿 | R8 | R7 | R6 | R5 | R4 | R3 |
| ACT | L | 上升沿 | R14 | R13 | R12 | R11 | R10 | R9 |
| RD | L | 下降沿 | C9 | C8 | C7 | C6 | C5 | C4 |
| RD | L | 上升沿 | BA2 | BA1 | BA0 | BG1 | BG0 | BL |
你注意看,RD 命令的上升沿传的是 Bank 地址和 Bank Group,下降沿才传列地址高 6 位。低 4 位列地址呢?在后续的 DQ 突发里通过 BL 长度隐式给出。所以,千万不要以为列地址完整出现在 CA 总线上——它有一部分是「按顺序自增」的。
好了,CA 总线的信号映射就梳理到这儿。这些基础概念如果不深究,后续的 CA 训练调试很容易绕弯路。实际项目里,我每个新板子到手的第一件事就是抓一个 ACT 命令的 CA 波形,确认左右沿的地址内容是否正确——这是最直接的验证手段,没有之一。