只读分享解决方案文档原理方案设计📅 2026-09-24🔖 V1.0⏳ 29天有效(至 2026-10-31)
🔧解决方案&应用市场分析 -> 原理方案设计 -> DRAM系列产品方案 -> DDR3_软件设计规范
生成时间 2026-09-24 00:55:09 有效期至 2026-10-31 23:59:59(29天有效(至 2026-10-31))
同系列 · 原理方案设计

DDR3(L) 软件设计规范

编制日期 2026-09-24

面向 XT41(42)K04G16AB(4Gb ×16 DDR3(L) SDRAM)的控制器驱动设计约定 —— 覆盖 上电初始化 12 步、模式寄存器 MR0–MR3、读 / 写延迟与突发、 刷新管理、ZQ 校准、ODT 与写均衡、低功耗,逐条给出可落地的命令序列、时序门限与状态判据。

文档编号DDR3-SW-SPEC-001
版本 / 状态V1.0 · 正式发布
适用器件XTX XT41K04G16AB / XT42K04G16AB(DDR3L-1600 / DDR3-1866,4Gb ×16)及同系列 96-ball TFBGA 器件
参考标准XT41(42)K04G16AB Datasheet 版本号 Rev 1.5(Jul-13,2023)· JEDEC JESD79-3F
配套文档DDR3_电路设计指南.html(硬件 / 原理图 / 布线约束)

0. 目的与范围

本规范约束 DDR3(L) 器件在嵌入式 / SoC 内存控制器中的软件行为:上电初始化序列、模式寄存器配置、读 / 写 / 刷新命令时序、ZQ 校准、ODT 与写均衡、低功耗与复位。凡本文与器件 datasheet 冲突,以 datasheet 为准。

  • 统一初始化序列:RESET → 时钟稳定 → CKE 拉高 → MRS(MR2→MR3→MR1→MR0) → ZQCL → 等待 tDLLK/tZQinit,固化一套标准流程。
  • 统一寄存器配置:CL / CWL / WR / AL / ODT / DLL 全部通过 MRS 写入;MR 默认值未定义,必须全部显式初始化。
  • 统一刷新策略:以 tREFI 为节拍发 Auto Refresh;温度越界时按 2×、4× 缩短间隔;休眠用 Self Refresh。
  • 统一低功耗路径:空闲进 Precharge Power-Down,深度休眠进 Self Refresh,明确 DLL 慢 / 快退出与唤醒时序。
不在本规范范围:SDRAM 颗粒物理层与 PCB 布线(见《DDR3 电路设计指南》);PHY 层比特级训练算法的具体实现;内存子系统的 ECC 纠错(由控制器/颗粒外的 ECC 模块负责,不在 DDR3 颗粒内);操作系统页表与缓存一致性策略。

一句话结论:DDR3 是「命令驱动、时钟双边沿、fly-by 拓扑」的器件 —— 所有读写都要先 ACT 打开行,再发 RD/WR;读数据在 AL+CL 个周期后才出现,写数据在 AL+CWL 个周期后才有效; 没有 DLL 锁定的读、没有 tDLLK 等待的 MRS、没有 ZQCL 的阻抗、没有按温度缩短的 tREFI,都会让系统表现为偶发位错甚至完全无法训练。

文档使用说明

  • 本文是《DDR3 电路设计指南》的软件配套篇:硬件篇解决「怎么接、怎么供电、怎么走线、 fly-by 怎么做」,本文解决「控制器怎么初始化、命令怎么发、时序怎么等、低功耗怎么进」。
  • 命令码、寄存器位、时序值均取自 XT41(42)K04G16AB Datasheet Rev 1.3,与 JEDEC JESD79-3F 一致。其它容量 / 其它厂商型号存在差异,移植前必须逐条核对。
  • 文中 C 代码为协议骨架伪代码,演示流程与判断条件,非特定平台可直接编译的完整实现;ddr_cmd()、now_ns() 等为平台相关底层。
贯穿全文的三条铁律

① MR 默认值未定义,上电必须完整写一遍 MR0–MR3——不能「只改要用的位」,MRS 必须按 BA 整寄存器重写; ② 任何 DLL Reset 后必须等 tDLLK 才能发读命令或同步 ODT——tDLLK 未满足就读,tDQSCK / tAON 违例; ③ 时序门限一律按 datasheet max 留余量——typ 值只用来排程,不能当失败判据;温度越高 tREFI 越短,必须动态切换。

1 · 器件定位与阵列组织

DDR3(L) 不是「即插即用的 SRAM」。它有 8 个 Bank、行 / 列分离的地址、2KB 页、8n 预取,且所有功能靠 MRS 配置。软件设计的第一件事,是把「地址空间」和「刷新节奏」搞清楚。

1.1 器件定位与关键参数

4 Gb
总容量
256M × 16 bit · 4Gb = 512MB
8
Bank 数量
BA0–BA2,3 bit Bank 地址
2 KB
页容量 (Page Size)
行缓冲 = 1KB/byte-lane × 16 bit
1.35 / 1.5 V
供电 VDD/VDDQ
DDR3L 1.35V / DDR3 1.5V
1600 / 1866
数据率 Mbps
CL11 / CL13
8n
预取架构
8 倍预取,BL8 原子突发
260 ns
tRFC
刷新周期,违例即故障
7.8 µs
tREFI (≤85℃)
85~95℃ → 3.9µs;>95℃ → 1.95µs
96-ball
封装
TFBGA 8.0×13.0mm · 0.8mm pitch

数据取自 XT41(42)K04G16AB Datasheet Rev 1.3 第 2 节 Features 与第 3 节 Ordering Information。

项目参数软件影响
组织256M × 16x16 接口,DQ[15:0] 双字节通道
Bank 地址BA0–BA2(3 bit)最多 8 个 Bank,可独立 ACT / PRE
行地址 (Row)A0–A14(15 bit)单 Bank 32K 行;ACT 用 15 bit 行地址
列地址 (Col)A0–A9(10 bit)单 Bank 1K 列;2KB 页 = 1024 ×16bit
页尺寸 / 突发2KB / BL8(8n 预取)一次突发最多搬 8×16bit = 16B
速度档DDR3L-1600(11-11-11) / DDR3-1866(13-13-13)决定 CL / CWL / tCK,MRS 必须据此配
温度等级商业 0~95℃ / 工业 −40~95℃ / 扩展 −20~95℃决定 tREFI 倍率与 SRT/ASR 配置

1.2 阵列组织与地址映射

DDR3 的地址在命令中分时复用,软件最容易在这里出错:ACT 命令送行地址,RD/WR 命令送列地址,BA 选择 Bank。

地址类型位宽出现在哪些命令含义
Bank 地址 BA[2:0]3 bitACT / RD / WR / PRE / MRS(BA)选择 8 个 Bank 之一;MRS 用 BA 选 MR0–MR3
行地址 Row (RAS 期)A0–A14(15 bit)ACTBank 内行号 0~32767;打开到行缓冲
列地址 Col (CAS 期)A0–A9(10 bit)RD / WR页内字节偏移;A10=1 触发 Auto-Precharge(A10/AP)
突发控制 A12/BC1 bit(on-the-fly)RD / WRMR0 BL=BC4or8 时,A12=1 选 BC4 chop
列地址只有 10 bit,但物理页是 2KB

2KB 页 = 1024 列 ×16bit。一次 BL8 突发只覆盖 8×16bit = 16 字节。要读写整页 2KB,需在列地址上连续发 128 次 BL8 突发(或靠控制器的 burst 合并)。不要把「列地址 10 bit」误当成「能一次寻址 1KB 数据」——每次突发仍然是 BL8。

1 Device = 4 Gb (256M × 16) = 8 Bank × 32K Row × 1K Col 512MB · 8n 预取 · 2KB 页 1 Bank = 32K Row(BA0–BA2 选择) ACT 打开某一行进入行缓冲(2KB) 1 Row = 1K Col × 16bit = 2 KB 页 RD/WR 用 10 bit 列地址 + BL8 突发访问 1 Burst = 8 × 16bit = 16 B(BL8) BC4 chop 时仅前 4 beat(8B)
图 1 · DDR3 x16 阵列层级:Device → Bank → Row → Column → Burst

1.3 引脚与拓扑

96-ball TFBGA(x16)的关键引脚分组如下,软件 / 控制器需按组管理:

分组引脚方向与功能
时钟CK, CK, CKE差分时钟 + 时钟使能(异步控制 Power-Down / Self-Refresh 进出)
命令CS, RAS, CAS, WE, ODT, RESET命令译码(ACT/RD/WR/PRE/REF/MRS 等由这 4 根 + CKE 编码)
地址BA0–BA2, A0–A14, A10/AP, A12/BCBank/行/列复用;A10=AP 自预充,A12=BC on-the-fly
数据DQ[15:0], DQS/DQS, DMU/DML16 bit 双向数据 + 双字节通道 DQS 选通 + 数据掩码
参考 / 校准ZQ, VREFCA, VREFDQZQ 外接 240Ω±1% 用于 ODT/驱动阻抗校准;VREF 必须跟踪 VDDQ/2
Fly-by 拓扑决定了必须做写均衡

DDR3 的命令 / 地址 / 时钟采用 fly-by(菊花链)拓扑以减小 stub。这导致每个颗粒上 CK 与 DQS 存在 flight-time skew,控制器必须支持 Write Leveling(MR1 A7=1)来补偿。x16 器件不支持 TDQS(MR1 A11 必须 =0)。

2 · 术语与缩写

DDR3 命令与寄存器术语量大,这里按「命令 / 寄存器」与「时序 / 延迟」两组列出,后续章节直接引用。

2.1 命令与寄存器术语

术语全称 / 含义软件关注点
ACTActivate —— 打开指定 Bank 的某一行到行缓冲读 / 写前必须 ACT;受 tRCD 约束
RD / RDARead / Read with Auto-prechargeRDA 在突发结束后自动 PRE 该行
WR / WRAWrite / Write with Auto-prechargeWRA 受 WR(tWR)+tRP 决定的 tDAL 约束
PRE / PREAPrecharge / Precharge All —— 关闭行,写回行缓冲PREA 关闭所有 Bank;受 tRP 约束
REFAuto Refresh —— 内部刷新一行周期发,受 tRFC / tREFI 约束
MRSMode Register Set —— 写 MR0–MR3按 BA 选寄存器;受 tMRD / tMOD 约束
ZQCL / ZQCSZQ Calibration Long / Short校准 ODT/驱动阻抗;ZQ 引脚接 240Ω
SRE / SRXSelf Refresh Entry / Exit低功耗休眠;退出异步且需 tXS
MPRMulti-Purpose Register —— 读预定校准码型写训练用;MR3 A2=1 使能
RESET硬件复位(低有效引脚)上电与稳定电源下复位均可用
ODTOn-Die Termination —— 片内终端电阻Rtt_Nom(MR1)/Rtt_WR(MR2) 配置

2.2 时序与延迟术语

术语含义软件关注点
CLCAS Latency —— 读命令到首个读数据的内核延迟(nCK)=11 或 13;RL = AL + CL
CWLCAS Write Latency —— 写命令到首个写数据(nCK)=8 或 9;WL = AL + CWL
ALAdditive Latency —— ACT 后读 / 写命令的附加延迟0 / CL-1 / CL-2;提升总线效率
RL / WLRead / Write Latency = AL + CL / AL + CWL控制器数据门控基准
WRWrite Recovery(用于 Auto-Precharge)= ceil(tWR/tCK);与 tRP 决定 tDAL
tRFCRefresh Cycle time260ns;REF 命令后必须等待
tREFIRefresh Interval7.8 / 3.9 / 1.95 µs(随温度变化)
tDLLKDLL lock timeDLL reset 后必须等待才能读
tZQinit / tZQoperZQ 初始化 / 操作时间ZQCL 后等 tZQinit;ZQCS 后等 tZQoper
tXPR / tXSReset/CKE 退出 / Self-Refresh 退出tXPR=max(tXS,5tCK);SRX 后发 NOP 填满 tXS
ASR / SRTAuto Self-Refresh / Self-Refresh Temperature扩展温区必须使能 ASR 或置 SRT
PPDPrecharge Power-Down DLL(MR0 A12)0=慢退出(DLL off) / 1=快退出(DLL on)

3 · 控制器架构与初始化

DDR3 初始化是「命令序列 + 时序等待」的硬约束,错一步整片不可用。控制器固件必须严格按 12 步执行。

3.1 分层职责

LAYER 1
PHY / 寄存器层
直接驱动 CK、命令 / 地址、DQ/DQS、ODT、CKE、RESET;实现 ddr_cmd()、ddr_wait_ns()、阻抗 / 驱动配置。
平台相关,需精确满足 tIS/tIH
LAYER 2
序列层
实现上电初始化、MRS 配置、刷新调度、ZQ 校准、低功耗进出、复位恢复等标准命令序列。
本文核心约束层
LAYER 3
应用 / 内存管理层
内存空间分配、cache 一致性、训练(read/write leveling)、错误上报;调用序列层完成读写。
调控制器 IP 与 MMU

3.2 上电初始化流程

Datasheet 规定,上电与初始化必须执行下列序列(顺序不可调换):

  1. 上电并保持 RESET 低:RESET 维持 ≤0.2×VDD,其余输入可不定;CKE 在 RESET 释放前拉低(≥10ns)。电源爬坡(300mV→VDDmin)≤200ms,且 VDD≥VDDQ、|VDD−VDDQ|<0.3V;RESET 低至少 200µs(稳定电源下)。
  2. RESET 释放后等待 500µs:DRAM 在此期间独立做内部状态初始化(不依赖外部时钟)。
  3. 启动并稳定 CK/CK:时钟稳定至少 10ns 或 5tCK(取大);CKE 为同步信号,需满足 tIS;CKE 变高前先注册一个 NOP / Deselect。
  4. ODT 保持高阻:RESET 释放到 CKE 拉高期间,片内终端为高阻;若 MR1 要开 Rtt_Nom,ODT 引脚须静态拉低。
  5. CKE 拉高后等 tXPR:tXPR = max(tXS, 5tCK),再发第一条 MRS。
  6. MRS 写 MR2:BA=(0,1,0);配置 CWL / Rtt_WR / SRT / ASR。
  7. MRS 写 MR3:BA=(1,1,0);配置 MPR(默认 A2=0 正常操作)。
  8. MRS 写 MR1:BA=(0,1,0→应为 BA0=1,BA1=0,BA2=0) 使能 DLL(A0=0)、驱动强度、Rtt_Nom、AL、写均衡。
  9. MRS 写 MR0:BA=(0,0,0) 并使能 DLL Reset(A8=1);配置 BL / BT / CL / WR / PPD。
  10. 发 ZQCL:启动 ZQ 长校准(阻抗参考 240Ω)。
  11. 等待 tDLLK 与 tZQinit 完成:CKE 在此期间必须连续为高。
  12. 进入正常操作:此后可发 ACT / RD / WR / REF。
MRS 顺序必须是 MR2 → MR3 → MR1 → MR0

Datasheet 明确要求先写 MR2、MR3,再写 MR1(DLL Enable),最后写 MR0(DLL Reset)。先写 MR0 的 DLL Reset 而 MR1 的 DLL 未使能,会导致 DLL 处于未定义状态。两个 MRS 之间必须间隔 tMRD,MRS 到非 MRS 命令须间隔 tMOD,期间插 NOP/DES。

电源 & RESET 低 (≥200µs) → RESET 释放 → 等待 500µs 启动 CK/CK 稳定 (≥10ns/5tCK) → CKE 拉高 (前插 NOP) → 等 tXPR MRS 序列 (间隔 tMRD, NOP 填充) MR2(CWL/Rtt_WR/SRT/ASR) → MR3(MPR) → MR1(DLL En,ODT,AL) → MR0(DLL Reset,CL/WR/BL) 发 ZQCL (长校准, ZQ=240Ω) 等待 tDLLK + tZQinit (CKE 连续高) → 就绪, 进入正常操作
图 2 · DDR3 上电初始化 12 步(顺序不可调换)

3.3 复位流程

稳定电源下的复位(RESET at Stable Power):

  • 任意时刻将 RESET 拉低 ≤0.2×VDD,维持至少 100ns;CKE 在 RESET 释放前拉低(≥10ns)。
  • 随后执行上电初始化流程的第 2~11 步(RESET 释放后等 500µs 起)。
  • 复位后所有 MR 回到未定义态,必须重新完整写 MR0–MR3;数组内容不受 MRS/RESET 影响。
RESET 不影响阵列内容,但会清空配置

RESET 与 DLL Reset(MRS MR0 A8)都不会破坏存储阵列。但二者都会让 MR0–MR3 回到「未定义」,因此复位后必须重新执行完整 MRS 序列,不能假设配置还在。

4 · 模式寄存器 MR0–MR3 体系

四个模式寄存器覆盖 DDR3 的全部可编程功能。MR 默认值未定义,上电必须整寄存器重写;即使只改一个字段,也要把该 MR 的全部地址位重新定义。

4.1 四张表总览

寄存器BA 编码主要字段初始化必配
MR0BA=000BL, BT, CL, Test, DLL Reset, WR, PPDCL / WR / BL / PPD 必配
MR1BA=001DLL En, DIC, AL, Rtt_Nom, WL En, TDQS, QoffDLL En / Rtt_Nom / AL 必配
MR2BA=010Rtt_WR, SRT, ASR, CWL, PASRCWL / SRT / ASR 必配
MR3BA=011MPR, MPRLocMPR 默认 0(正常),训练时置 1

4.2 MR0 —— 突发 / CL / WR / DLL

位字段编码说明
A0,A1Burst Length00=BL8固定; 01=BC4或8(on-the-fly); 10=BC4固定推荐 01(on-the-fly 灵活)
A3Burst Type0=顺序; 1=交织通常 0
A2,A4,A5,A6CAS LatencyCL11→1110; CL13→0011与速度档匹配
A7Test Mode0=正常; 1=测试必须 0,否则不保证功能
A8DLL Reset0=否; 1=是(自清零)初始化写 MR0 时置 1
A9,A10,A11Write Recovery000=16; 001=5; 010=6; 011=7; 100=8; 101=10; 110=12; 111=14WR≥ceil(tWR/tCK)
A12PPD (预充掉电 DLL)0=慢退出(DLL off); 1=快退出(DLL on)快速唤醒选 1

4.3 MR1 —— DLL / 驱动 / ODT / 写均衡

位字段编码说明
A0DLL Enable0=使能; 1=禁止正常操作必须 0
A1,A5驱动阻抗 DIC00=RZQ/6; 01=RZQ/7RZQ=240Ω
A3,A4Additive Latency00=关; 01=CL-1; 10=CL-2高速总线效率用
A2,A6,A9Rtt_Nom000=关; 001=RZQ/4; 010=RZQ/2; 011=RZQ/6; 100=RZQ/12; 101=RZQ/8常规终端;写时仅允许 RZQ/2,4,6
A7Write Leveling En0=关; 1=开fly-by 拓扑训练必开
A11TDQS0=关; 1=开x16 必须 0(与 DM 复用)
A12Qoff0=输出使能; 1=关闭正常 0

4.4 MR2 —— CWL / 自刷新 / 写 ODT

位字段编码说明
A0PASR0=全阵列; 其它=部分阵列自刷新默认 0
A3,A4,A5CWL011=8 (1.5≥tCK≥1.25ns); 100=9 (1.25≥tCK≥1.07ns)与 tCK 匹配
A6ASR0=手动 SRT; 1=使能自动自刷新扩展温区建议 1
A7SRT0=常温; 1=扩展温区超 85℃ 必须置 1 或使能 ASR
A9,A10Rtt_WR00=动态 ODT 关; 01=RZQ/4; 10=RZQ/2写期间专用终端;写均衡时不可用

4.5 MR3 与 MPR

位字段编码说明
A2MPR0=正常(数据来自阵列); 1=数据来自 MPR读训练时置 1
A1,A0MPRLoc00=预定校准码型; 其它=保留MPR 启用时读 [0,1,0,1…] 码型
MPR 使能期间只允许 RD/RDA

MR3 A2=1 后,所有 RD/RDA 重定向到 MPR(输出预定校准码型,用于读同步训练);期间禁止 Power-Down / Self-Refresh / 任何非 RD 命令(RESET 除外)。训练结束必须再发 MRS 把 A2 清 0。DLL 必须先锁定才能读 MPR。

4.6 写 MRS 的准则

  • 整寄存器重写:即使只改一个字段,也要把该 MR 全部地址位重新定义;保留位(RFU)必须写 0。
  • 间隔约束:相邻 MRS 之间 ≥tMRD;MRS 到非 MRS 命令 ≥tMOD;间隔中插 NOP / DES。
  • 顺序约束:MR2 → MR3 → MR1 → MR0(MR0 带 DLL Reset)。
  • 运行期改 MR:仅当所有 Bank 预充且 tRP 满足、数据突发完成、CKE 高时才能改;改 CL/CWL/WR 后要重新等待 tMOD。