【K230 DDR 调试求助】自制核心板 NT6CL128M32CM-H1,LPDDR3 CA Training 全 FF,求确认官方 800 MT/s 配置及 uMCTL2 tRAS 编码

Viewed 34

问题描述


【K230 DDR 调试求助】自制核心板 NT6CL128M32CM-H1,LPDDR3 CA Training 全 FF,求确认官方 800 MT/s 配置及 uMCTL2 tRAS 编码

各位嘉楠工程师、K230 开发者好!

目前我自己设计并焊接了一块 K230 核心板,正在进行 SPL 启动和 LPDDR3 DDR bring-up,遇到了 CA Training 失败的问题。软件侧已经进行了较深入的审计,希望得到官方 DDR Controller、PHY 配置方面的帮助。

1. 硬件信息

  • SoC:Kendryte K230
  • DDR:Nanya NT6CL128M32CM-H1
  • 类型:LPDDR3
  • 容量:4Gb(512MiB)
  • 位宽:x32
  • Rank:1
  • 当前初始化速率:1600 MT/s
  • 计划验证的低速配置:800 MT/s
  • SDK commit:7e302f733311d284be255f0d81d3463b6ae6ee6d

原理图库最初使用了 NT6CL512T32AM 的封装符号,但板上实际焊接的是 NT6CL128M32CM-H1,现按 CM-H1 的 178-ball pinout 和 datasheet V1.4 进行适配。

2. 遇到的问题

历史 CA Training 日志中:

CAA0 ~ CAA9
每行 12 bytes
共 120 bytes
全部为 FF

通过 PMU IMEM 反汇编已经确认,CAA 是 CA training reject bitmap,不等于原始 DQ 全部为高电平。

软件流程已经确认存在:

MR63 RESET
    ↓
MR41 = 0xA4
    ↓
CA Training Phase 1
    ↓
MR48 = 0xC0
    ↓
CA4 / CA9 Training
    ↓
MR42 = 0xA8
    ↓
CAA bitmap / training result

MR41/MR48/MR42 编码与南亚 CM-H1 数据手册一致。

另一次带调试功能的镜像出现 Host receive timeout、CAA=0 bytes,但该日志无法与历史全 FF 的原始镜像建立完整的封装哈希绑定,因此没有把两者认定为同一次故障。

当前尚不能确认是 ACSM 超时、DRAM CA 反馈失败,还是其他 PHY/时序问题。

3. 已完成的软件排查

目前已经完成:

  • CA selector:10/10 核对
  • DQ selector:32/32 核对
  • DQS/DM mapping 核对
  • DBYTE map:[2,1,3,0]
  • CA feedback:DBYTE1/DBYTE2
  • PMU Streaming 协议、ACK、Fatal fail-stop 审计
  • PMU IMEM 完整性验证
  • SPL 固定地址 ELF 链接
  • PLL0 软件前置检查
  • Host/PMU 离线回归测试

已找到 SDK 官方参考文件:

board/canaan/k230_evb/lpddr3_swap_800.c

我以其作为完整的 800 MT/s 参考表,适配了自制板 DQ/CA mapping,生成了离线候选,RISC-V 编译及固定地址链接均通过。

目前没有正式烧录该候选。

4. 最希望官方帮助确认:DRAMTMG0 tRAS 编码

官方 800 MT/s 参考表:

0x98000100 = 0x070a0d08
0x98002100 = 0x070a0d08
0x98003100 = 0x070a0d08
0x98004100 = 0x070a0d08

现有 1600 MT/s 表:

0x98000100 = 0x0b141a11
0x98002100 = 0x0b141a11
0x98003100 = 0x0b141a11
0x98004100 = 0x0b141a11

K230 TRM V0.3.1 说明 DDR Controller 属于 DWC_ddr_umctl2/uMCTL2 family,使用 1:2 frequency ratio。

按照南亚 CM-H1 datasheet:

800 MT/s
CK = 400 MHz
tCK = 2.5 ns

tRAS(min) >= 42 ns
ceil(42 / 2.5) = 17 CK

官方 800 表 DRAMTMG0 低 6 bit 为 8;1600 表低 6 bit 为 17。

现有同系列 uMCTL2 参考资料中有 1:2 频率模式下不向上取整的字段编码规则,可以解释两个配置值,但目前缺少与 K230 当前 Controller RTL revision 直接绑定的定义。

希望确认:

  1. K230 使用的 DDRC/uMCTL2 IP revision 是哪个版本?
  2. DRAMTMG0.t_ras_min 在 1:2、1T 模式下如何编码?
  3. 官方 800 表中字段 8 如何保证 LPDDR3 所需的 17 CK ACT→PRE 最小间隔?
  4. DRAMTMG0.t_ras_max 和 DRAMTMG1.t_rc 的单位、取整规则是什么?
  5. 0x100、0x2100、0x3100、0x4100 四组 timing bank 的选择和生效机制是什么?

不要求公开受限的完整 RTL,如果能提供对应 SDK 版本的字段说明、配置生成方法或上述官方配置的适用性确认,也非常有帮助。

5. 800 MT/s 时钟配置问题

目前独立候选采用以下思路:

PLL0 预期输出:1.6 GHz
DDR core parent:PLL0/2
DDR divider:/4

Controller/core:200 MHz
目标外部 DRAM CK:400 MHz
PMU DRAMFreq:800

PLL0 前置检查已经在隔离 SPL 中实现,能够读取配置、bypass、gate 和 lock 状态并在异常时停止。

但还未确认:

  1. K230 Boot ROM 冷启动进入 SPL 时,PLL0 是否保证为 1.6 GHz 且已锁定?
  2. Controller/core=200 MHz 与 DFI、PHY 及 DRAM CK=400 MHz 的关系是否正确?
  3. 官方 lpddr3_swap_800.c 的 PLL/PllCtrl2/CalUclkInfo 是否适用于普通 K230 自制 LPDDR3 板?
  4. 是否有更完整的 LPDDR3 800 MT/s 初始化配置或推荐调试方法?

6. 关于 NT6CL128M32CM-H1

该型号 datasheet V1.4 列出的 speed bin 包含 1333、1600、1866 Mbps,并提示低于所列频点运行时应确认厂商说明。

希望了解 K230 官方 800 MT/s LPDDR3 profile 是否有适配过该型号或同类 4Gb x32 SDP 器件的经验。

7. 当前目标

我希望先使用可信的完整 800 MT/s 初始化配置,在自己的开发板上验证:

  • 是否能完成 CA Training;
  • 是否能进入后续 DQ Training;
  • 是否可以通过有限的 DDR 内存测试。

如果低速仍无法通过,再重点检查 VREFCA、DDR 电源、CK/CS/CKE 和 PCB 信号完整性。

目前还没有把软件问题或硬件问题认定为最终根因。

希望有使用过 K230 LPDDR3 800 MT/s、uMCTL2 或自行适配 DDR PHY 的工程师提供建议,非常感谢!

硬件板卡


定制版

软件版本


无,卡在ddr training部分

2 Answers

你好,可以邮件联系邮箱: salesAI@canaan-creative.com 寄2块板子过来我们看一下,以及提供一下原理图和PCB.