硬盘背板在线升级cpld失败

问题描述

硬盘背板在线升级cpld,在升级进度95%的时候出现失败
1、 通过GetChipIdcode可以成功获取Id为0x0200CC3F
2、 BypassChannelTest 返回成功
3、 升级Cpld时失败了,Linux kernel log 报错 verify TDO [5] expect:0xfe, sample:0x0,随后 svf execute error(0x15)。

image

请问有什么排查方向

dump_info/RTOSDump/sysinfo/journalctl.log

2026-03-19T02:44:08.733419+0000 2102315QRVD9RC100007 kernel: [I2C-11-RT<-5|-5>] M<0x4e|0x1|0x0|1|10> L<1|2|0> C<1|0|2> E<0x801|0x0|0x0|0x1> I<0x0|0x710|0x0>
2026-03-19T02:44:11.203438+0000 2102315QRVD9RC100007 kernel: [I2C-03-RT<-5|-5>] M<0x71|0x0|0x0|3|10> L<1|0|0> C<1|0|0> E<0x1|0x0|0x0|0x1> I<0x0|0x710|0x0>
2026-03-19T02:44:11.223419+0000 2102315QRVD9RC100007 kernel: [I2C-03-RT<-5|-5>] M<0x71|0x0|0x0|3|10> L<1|0|0> C<1|0|0> E<0x1|0x0|0x0|0x1> I<0x0|0x710|0x0>
2026-03-19T02:44:39.822975+0000 2102315QRVD9RC100007 systemd[1]: dev-shm-firmware_mgmt-cgroup.mount: Deactivated successfully.
2026-03-19T02:45:08.223410+0000 2102315QRVD9RC100007 kernel: [I2C-08-RT<-5|-5>] M<0x47|0x1|0x0|1|10> L<1|1|0> C<1|0|1> E<0x801|0x0|0x0|0x1> I<0x0|0x510|0x0>
2026-03-19T02:45:08.623446+0000 2102315QRVD9RC100007 kernel: [I2C-08-RT<-5|-5>] M<0x21|0x1|0x0|1|10> L<1|1|0> C<1|0|1> E<0x801|0x0|0x0|0x1> I<0x0|0x710|0x0>
2026-03-19T02:45:08.823448+0000 2102315QRVD9RC100007 kernel: [I2C-11-RT<-5|-5>] M<0x4e|0x1|0x0|1|10> L<1|2|0> C<1|0|2> E<0x801|0x0|0x0|0x1> I<0x0|0x710|0x0>
2026-03-19T02:45:54.969758+0000 2102315QRVD9RC100007 kernel: 60,2026-03-19 02:45:54,5049,svf_sr_verify_tdo,1432,verify TDO [5] expect:0xfe, mask: 0xfe, sample:0x0
2026-03-19T02:45:54.970489+0000 2102315QRVD9RC100007 kernel: 61,2026-03-19 02:45:54,5049,svf_scan_register,1487,[SVF] scan register verify tdo, recv_len:262
2026-03-19T02:45:54.970845+0000 2102315QRVD9RC100007 kernel: 62,2026-03-19 02:45:54,5049,svf_do_scan_register,1555,[SVF] scan register err:0x15
2026-03-19T02:45:54.990455+0000 2102315QRVD9RC100007 kernel: 63,2026-03-19 02:45:54,5049,cpld_jtag_svf_exec,1727,svf execute error(0x15), line 5034 pos 917220 keyword 254 word(;)
2026-03-19T02:45:54.990964+0000 2102315QRVD9RC100007 kernel: 64,2026-03-19 02:45:54,5049,cpld_jtag_load_logic,151, svf exec failed(0x15)
2026-03-19T02:45:55.007304+0000 2102315QRVD9RC100007 kernel: 65,2026-03-19 02:45:54,5049,cpld_process,937,cpld std load failed(21)!
2026-03-19T02:46:08.293460+0000 2102315QRVD9RC100007 kernel: [I2C-08-RT<-5|-5>] M<0x47|0x1|0x0|1|10> L<1|1|0> C<1|0|1> E<0x801|0x0|0x0|0x1> I<0x0|0x710|0x0>
2026-03-19T02:46:08.693419+0000 2102315QRVD9RC100007 kernel: [I2C-08-RT<-5|-5>] M<0x21|0x1|0x0|1|10> L<1|1|0> C<1|0|1> E<0x801|0x0|0x0|0x1> I<0x0|0x710|0x0>
2026-03-19T02:46:08.853418+0000 2102315QRVD9RC100007 kernel: [I2C-11-RT<-5|-5>] M<0x4e|0x1|0x0|1|10> L<1|2|0> C<1|0|2> E<0x801|0x0|0x0|0x1> I<0x0|0x710|0x0>
2026-03-19T02:47:08.483429+0000 2102315QRVD9RC100007 kernel: [I2C-08-RT<-5|-5>] M<0x47|0x1|0x0|1|10> L<1|1|0> C<1|0|1> E<0x801|0x0|0x0|0x1> I<0x0|0x710|0x0>
2026-03-19T02:47:08.883418+0000 2102315QRVD9RC100007 kernel: [I2C-08-RT<-5|-5>] M<0x21|0x1|0x0|1|10> L<1|1|0> C<1|0|1> E<0x801|0x0|0x0|0x1> I<0x0|0x710|0x0>
2026-03-19T02:47:08.974825+0000 2102315QRVD9RC100007 kernel: [I2C-11-RT<-5|-5>] M<0x4e|0x1|0x0|1|10> L<1|2|0> C<1|0|2> E<0x801|0x0|0x0|0x1> I<0x0|0x710|0x0>

答案内容由AI生成,仅供参考:
结论:问题极可能源于JTAG信号完整性不足(主因:时钟频率过高或PCB设计/连接问题)或系统配置文件(SR/CSR)与实际硬件拓扑不匹配。建议按上述步骤优先排查配置与降频。

点击此处查看详细分析解答

硬盘背板CPLD在线升级失败问题分析与排查方向

根据您提供的详细信息,CPLD升级在95%进度时失败,内核日志显示 svf_sr_verify_tdo 校验失败svf execute error(0x15)。尽管前置测试(GetChipIdcodeBypassChannelTest)成功,但问题出在编程执行阶段。以下是综合分析与排查方向。


:magnifying_glass_tilted_left: 问题现象总结

  1. 前置检测成功
    • GetChipIdcode 成功获取到芯片ID(0x0200CC3F),证明JTAG链物理连接与基本通信正常。
    • BypassChannelTest 返回成功,表明JTAG通道的基础通断无问题。
  2. 失败阶段明确
    • 升级进度达95%,说明已进入最核心的 SVF(Serial Vector Format)文件执行阶段
    • 内核日志报错:
      • verify TDO [5] expect:0xfe, sample:0x0:在执行TDO(Test Data Out)校验时,期望收到数据0xFE,但实际采样值为0x00
      • svf execute error(0x15):SVF执行出错,错误代码0x15通常指向 数据采样校验失败 (data mismatch)

这表明数据传输链路在高强度编程时变得不稳定,而低负载的探测阶段尚能通过。


:hammer_and_wrench: 关键排查方向

1. JTAG信号完整性与硬件连接

这是最核心的怀疑点。TDO采样失败直接指向信号问题。

  • 信号质量检查
    • 工具:使用示波器逻辑分析仪,在芯片管脚处测量JTAG的TCK、TMS、TDI、TDO信号。
    • 关注点
      • 信号完整性:是否有严重过冲、下冲、振铃?波形是否干净?
      • 电平标准:信号高/低电平是否符合CPLD的IO标准(如3.3V/1.8V)?
      • 匹配阻抗:PCB走线是否过长?是否有串接47Ω/100Ω电阻进行阻抗匹配?长走线或未匹配易导致信号反射。
      • 信号干扰:JTAG信号线是否紧邻高速信号线(如时钟、DDR)?是否与其他强干扰线平行走线过长?
  • 物理连接检查
    • 接插件:检查连接器(如IO扩展座)是否松动、氧化或接触不良。
    • 飞线/转接板:如果使用了转接板或飞线,检查是否有虚焊、短路。

2. JTAG时钟频率(TCK)过高

过高的时钟频率会降低信号的建立和保持时间,是高速数据传输失败的常见原因。

  • 问题:虽然GetChipIdcode在低速下能成功,但SVF编程时可能会以更高或全速运行,导致时序裕量不足。
  • 排查方法
    1. 查找配置:在您的升级脚本、固件管理软件或系统SR(Configuration and Service Repository)文件中,查找与JTAG时钟频率相关的配置项。
    2. 手动降频:尝试将JTAG时钟手动降低至一个较低的值(例如,从10MHz或更高降低到1-2MHz)再进行升级。如果降频后升级成功,则证实是时钟速率导致的信号完整性问题。
    3. 对比案列:知识库中关于CPLD固件更新失败问题咨询的案例指出,通过核对BMC与主板连接方式并修正拓扑配置解决了问题,这与信号路径正确性直接相关。

3. 目标CPLD设备ID与SR配置不匹配

系统可能加载了错误的编程算法或流程。

  • 问题GetChipIdcode返回0x0200CC3F,但升级框架可能预期另一个ID,或SR文件中的设备定义与实际硬件不符。
  • 排查方法
    1. 核对SR配置:检查系统中SR(配置文件)或CSR(Configuration and Service Repository)里,关于该CPLD (Cpld_1_0101) 的定义。
    2. 验证ID映射:确认SR中定义的设备ID、JTAG位置是否与GetChipIdcode实际读取到的0x0200CC3F完全一致。
    3. 案例参考:知识库中的成功案例明确指出:“BMC直连主板CPLD,因此不存在jtag switch切换的情况,主板SR中的FirmwareRoute需为0”。拓扑和SR配置错误是导致升级失败的关键原因。

4. JTAG链上存在其他干扰设备

多个设备共用JTAG链可能导致地址冲突或驱动能力不足。

  • 检查
    • 确认该JTAG链上是否还有其他CPLD、FPGA或MCU
    • 升级时是否正确地使用了 BYPASS模式BYPASS模式可以确保指令和数据流只发送给目标设备,旁路其他设备。知识库中bmc.kepler.Chip.JtagTargetSetBypassMode方法正是为此设计。
    • 检查BypassChannelTest的成功是否意味着整个链路被正确旁路。

5. CPLD供电稳定性

编程时CPLD功耗可能瞬时增大。

  • 检查
    • 在升级过程中,使用万用表或示波器监测CPLD的核心电压(如VCCINT)和IO电压(如VCCIO)。
    • 观察电压是否有跌落(droop)或毛刺(glitch),尤其是在编程开始的瞬间。

:books: 关联知识库信息验证

综合分析您提供的日志和知识库信息,可以佐证上述方向:

  • JtagOverLocalBus_1 接口负责与CPLD通信(如Cpld_1_0101),其配置的正确性至关重要。
  • GetChipIdcodeBypassChannelTest 是通过 bmc.kepler.Chip.JtagTarget 接口执行的,这些测试成功说明D-Bus和hwproxy服务层面是通的,问题大概率在物理层或固件层配置
  • 关键线索:知识库中的成功解决案例直接指出,SR文件中的 FirmwareRouteJTAG_0 接口配置错误是根源。这强烈建议您优先检查硬件连接拓扑与SR/CSR配置是否一致

:white_check_mark: 总结与建议排查步骤

  1. 优先检查配置:立即核对硬件连接(BMC->CPLD)和系统SR/CSR文件中的JTAG拓扑、设备ID、FirmwareRoute等配置。这是“最快找到问题”的路径,参考知识库成功案例。
  2. 尝试降频升级:如果配置无误,立刻修改JTAG时钟频率,尝试在低速下(如1-2MHz)进行升级。
  3. 测量供电与信号
    • 监测CPLD供电电压稳定性。
    • 若条件允许,用示波器抓取编程过程中的TDO信号,与期望值(0xFE)比较。
  4. 审查JTAG链:确认链上无冲突,BYPASS模式已正确应用。

结论:问题极可能源于JTAG信号完整性不足(主因:时钟频率过高或PCB设计/连接问题)或系统配置文件(SR/CSR)与实际硬件拓扑不匹配。建议按上述步骤优先排查配置与降频。

1 个赞

PR610KI_PRO-12LFF_HSBP02003.tar (155.5 KB)

S920S20_2102315PFYD9RC100004_20260319-0246.tar.gz (9.4 MB)

根据报错信息,升级的svf文件中预期expect是0xfe,实际上cpld链路读到的TDO值是0x0。请确认以下这些排查点:

  1. BMC中CSR配置的链路是否符合预期(如用jtag0还是jtag1)
  2. 如果当前svf文件能在其他环境上升级成功,在当前环境上升级失败,可以排除是svf升级文件的内容(未使用过的svf升级包比较容易由于硬件出包有问题导致),如果从cpld链路读到的sample值非0,优先排查是否svf文件有问题,否则则是链路问题
  3. 如果从cpld链路读到的sample值为0,基本都是链路读不到值,需要cpld逻辑的人帮忙量一下TDO波形