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 训练失败,多半出在下面几个参数上。我列个清单,你调试时逐一排查。

  1. tIS (输入建立时间):CA 信号在 CK 交叉沿之前的稳定时间。LPDDR4 一般要求 0.3ns 以上。
  2. tIH (输入保持时间):CA 信号在 CK 交叉沿之后的稳定时间。通常 0.3ns。
  3. tDQSQ (CA 输出时序偏差):控制器内部 CA 信号的 clock-to-out 偏差,随电压温度变化。
  4. CA ODT 阻抗匹配:我碰到过阻抗设成 60Ω 时信号反射严重,改成 48Ω 后眼图眼高增加 40mV。

为什么会同时调 tIS 和 tIH?因为 LPDDR4 的 CA 是双沿采样,左右沿的时序窗口不对称。我曾经在某个项目中,上升沿能满足 tIS 但下降沿差 20ps——最后发现是控制器内部的 PLL 相位不对称,加了个延迟后解决。

结构图:CA 命令地址信号映射流程

下面这张 SVG 图展示了一个 CA 命令从控制器到 DRAM 的完整路径,包括地址分层和命令编码的合并。

CA 命令地址信号映射流程 控制器内部 地址转换 BG+Bank+Row+Col → 12bit 序列 命令编码 ACT/RD/WR… CA 总线复用 每时钟沿 6bit CA[5:0] 上升沿:行地址 下降沿:列/命令 DRAM 接收 内部译码 行 / 列地址分离 Bank 选择 💡 关键点: 同一条 CA[5:0] 在 ACT 和 RD/WR 命令中承载不同地址域, 但时序参数 tIS/tIH 保持一致。调试时一定要确认 CK 交叉沿位置。

避坑指南:CA 训练失败的常见原因

我经历过几个项目,CA 训练失败的根因高度重复。你下次遇到这问题,按顺序查。

⚠️ 我建议的排查顺序:

  1. 用示波器量 CK_t/CK_c 的交叉点电压——LPDDR4 要求 VIX 在 0.45V~0.55V 之间,很多板子交叉点偏移到 0.6V,导致建立时间不足。
  2. 检查 CA 走线的等长偏差。我见过一组 CA 线长了 300ps,直接导致下降沿采样错误。
  3. 核对 CS 信号的时序。CS 是每命令的基础,CS 沿和 CK 的相位关系必须在 tIS 窗口内。
  4. 查 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 波形,确认左右沿的地址内容是否正确——这是最直接的验证手段,没有之一。