2. Ryzen Embedded硬件架构与测试接口

Ryzen Embedded(以V1000/V2000系列为例)是一颗把CPU、GPU、内存控制器、I/O控制器和显示输出集成在同一封装内的SoC。量产测试要做的第一件事,不是急着写脚本,而是把“被测对象到底由哪些模块组成、它们各自挂在哪个电源域和时钟域、哪些接口可以被测试设备直接访问”这三件事理清楚。只有把SoC的物理结构映射成测试可触达的接口清单,后面的JTAG扫描、I2C读写、PCIe链路训练、USB枚举才有明确的落点。

SoC主要模块与测试可观测点

从测试视角看,V1000内部可以划分为几个关键块:Zen架构CPU核心(CCX,含L2/L3缓存)、Radeon Vega GPU(含显示控制器与显示PHY)、DDR4内存控制器(UMC)、系统管理单元(SMU)、平台安全处理器(PSP)、以及一组融合I/O控制器(FCH)。CPU和GPU通过Infinity Fabric互连,UMC直接挂在数据 Fabric 上,而FCH则承担PCIe、SATA、USB、LPC/eSPI、I2C、SMBus等低速与高速外设的汇聚。

这些模块在测试中的可观测性差异很大。CPU核心和缓存主要靠JTAG边界扫描与内建自测试(BIST)覆盖;DDR接口需要借助内存训练(Memory Training)后的寄存器回读和眼图测量;PCIe、USB、SATA属于高速串行接口,测试重点是链路训练状态、误码率和眼图;而I2C、SMBus、SPI这类低速管理接口,则常常作为“测试通道”本身,用来访问板上EEPROM、温度传感器、电源管理IC(PMIC)和时钟发生器。

Ryzen Embedded SoC 模块与测试接口映射 SoC 封装内部 Zen CPU CCX L2/L3 Cache · BIST JTAG 边界扫描 Radeon Vega GPU 显示控制器 · 显示PHY DP/HDMI 输出测试 DDR4 UMC 内存训练 · 眼图 寄存器回读 SMU / PSP 电源管理 · 安全启动 SMBus 从机访问 FCH 融合 I/O 控制器 PCIe · SATA · USB · LPC/eSPI · I2C · SMBus · SPI 高速链路训练 + 低速管理通道 IF IF 板级测试接口 / 测试设备 JTAG 边界扫描/调试 I2C / SMBus EEPROM/PMIC SPI / eSPI BIOS Flash PCIe / USB 链路/枚举 SATA 链路/读写 FCH 引出 电源域:VDDCR_SOC · VDDCR_GFX · VDDIO · VDD_MEM · VDD18 · VDD33 上电时序由 PMIC 控制,SMBus 可回读各域电压与电流 时钟树:25MHz 晶振 → PLL → CPU/GPU/DDR/PCIe/USB 各时钟域 时钟发生器通过 I2C 配置,输出频率可回读验证

电源域与上电时序的测试含义

V1000的电源域不是单一供电,而是按功能切分为多个域:VDDCR_SOC(SoC核心逻辑)、VDDCR_GFX(GPU核心)、VDDIO(I/O接口)、VDD_MEM(DDR4)、VDD18/VDD33(辅助与模拟)。量产测试中,电源域的意义在于两点:一是上电时序必须满足PMIC规定的先后顺序,否则PSP可能无法完成安全启动;二是每个域的电压、电流和纹波都可以通过SMBus访问PMIC寄存器回读,形成可量化的测试项。

一个典型的测试做法是:在板级测试治具上,先通过SMBus读取PMIC的VOUT寄存器,确认VDDCR_SOC稳定在1.1V±3%、VDD_MEM稳定在1.2V±3%;再读取各域电流,判断是否存在短路或漏电。如果某个域电流明显偏高,往往指向该域下的模块存在缺陷,比如VDDCR_GFX电流异常可能对应GPU内部短路。这种“电压—电流—模块”的对应关系,是电源域测试的核心价值。

时钟树与频率验证

SoC内部时钟由外部25MHz晶振经PLL倍频产生,再分配到CPU、GPU、DDR、PCIe、USB等时钟域。测试时并不需要直接测量每一路时钟,而是通过两个途径验证:一是读取时钟发生器(通常是一颗独立的I2C可编程时钟芯片)的配置寄存器,确认输出频率与预期一致;二是通过PCIe/USB链路训练是否成功,间接判断对应时钟域是否正常。如果PCIe链路训练失败,而电源和复位都正常,时钟问题就是首要排查方向。

JTAG/SWD与调试接口

JTAG是SoC测试中最底层的接口,支持边界扫描(Boundary Scan)和处理器调试。在量产测试中,JTAG主要用于三件事:扫描SoC引脚与PCB焊点的连通性、读取芯片ID和版本号、以及在早期样品上加载测试固件。SWD(Serial Wire Debug)是ARM调试接口,在Ryzen Embedded上通常与JTAG复用引脚,通过模式切换选择。测试脚本中需要先发送切换序列,再执行IDCODE读取,确认返回的ID与器件手册一致。

# 示例:通过OpenOCD读取JTAG IDCODE(教学示例,非实测)
openocd -f interface/ftdi/xxx.cfg -f target/amd_ryzen_embedded.cfg
> scan_chain
   TapName            Enabled  IdCode     Expected
   ryzen_embedded     Y        0x13821079 0x13821079

I2C/SPI/SMBus:低速管理通道

I2C、SMBus和SPI在测试中扮演“管理通道”的角色。I2C常用于访问板上EEPROM(存储MAC地址、序列号)、温度传感器和时钟发生器;SMBus与I2C电气兼容但协议更严格,主要用于PMIC和SMU通信;SPI则连接BIOS Flash,测试时需要验证读取ID、擦除、写入和校验的完整性。量产测试中,这些接口的测试重点是:总线是否被拉死、从机是否应答、读写数据是否一致。

一个实用的检查顺序是:先用I2C扫描总线,确认所有预期从机地址都有ACK;再对EEPROM执行“读—改—写—回读”验证;最后通过SPI读取BIOS Flash的JEDEC ID(如0xEF4018),确认Flash型号与BOM一致。如果I2C扫描不到某个从机,优先检查上拉电阻和电源域,而不是直接判定芯片损坏。

PCIe/USB/SATA:高速接口测试

高速接口的测试逻辑与低速接口不同,核心是“链路训练—枚举—数据传输”三级验证。PCIe方面,测试设备(如PCIe协议分析仪或回环卡)先确认链路训练到预期速率(Gen3 x4或Gen4 x4),再读取配置空间的Vendor ID和Device ID;USB方面,通过枚举过程确认设备描述符和端点配置;SATA方面,则验证链路速率(6Gbps)和读写命令的完成状态。

这些接口的测试结果通常以“通过/失败”加“训练速率/误码率”的形式记录。例如PCIe链路训练失败时,需要进一步读取LTSSM状态寄存器,判断是卡在Detect、Polling还是Configuration阶段,从而区分是物理层问题还是配置问题。USB枚举失败则要检查VBUS供电、D+/D-差分对和晶振时钟。SATA链路失败常见于参考时钟偏移或差分对阻抗不匹配。

测试接口的优先级建议:先JTAG确认芯片存活,再SMBus/I2C确认电源和时钟,最后PCIe/USB/SATA验证高速链路。这个顺序可以避免在电源异常时浪费时间去调试高速接口。

接口与测试项的对应关系

接口主要测试对象关键观测点典型失败原因
JTAGCPU/边界扫描IDCODE、扫描链长度引脚虚焊、TCK/TMS时序
SMBusPMIC/SMU电压、电流、上电时序上拉电阻、地址冲突
I2CEEPROM/时钟芯片ACK、读写一致性总线拉死、电源域未上电
SPIBIOS FlashJEDEC ID、校验和CS/CLK时序、Flash损坏
PCIe链路训练LTSSM状态、速率参考时钟、差分阻抗
USB枚举设备描述符、端点VBUS、D+/D-、晶振
SATA链路与读写速率、命令完成参考时钟偏移、阻抗

把这张表放在测试工位旁边,比记住一堆寄存器地址更实用。它告诉测试工程师:每个接口该看什么、失败时先查什么。量产测试的效率,往往就取决于这种“接口—观测点—排查方向”的映射是否清晰。