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

请问有什么排查方向
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)。尽管前置测试(GetChipIdcode、BypassChannelTest)成功,但问题出在编程执行阶段。以下是综合分析与排查方向。
问题现象总结
- 前置检测成功:
GetChipIdcode 成功获取到芯片ID(0x0200CC3F),证明JTAG链物理连接与基本通信正常。
BypassChannelTest 返回成功,表明JTAG通道的基础通断无问题。
- 失败阶段明确:
- 升级进度达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)。
这表明数据传输链路在高强度编程时变得不稳定,而低负载的探测阶段尚能通过。
关键排查方向
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编程时可能会以更高或全速运行,导致时序裕量不足。
- 排查方法:
- 查找配置:在您的升级脚本、固件管理软件或系统SR(Configuration and Service Repository)文件中,查找与JTAG时钟频率相关的配置项。
- 手动降频:尝试将JTAG时钟手动降低至一个较低的值(例如,从10MHz或更高降低到1-2MHz)再进行升级。如果降频后升级成功,则证实是时钟速率导致的信号完整性问题。
- 对比案列:知识库中关于
CPLD固件更新失败问题咨询的案例指出,通过核对BMC与主板连接方式并修正拓扑配置解决了问题,这与信号路径正确性直接相关。
3. 目标CPLD设备ID与SR配置不匹配
系统可能加载了错误的编程算法或流程。
- 问题:
GetChipIdcode返回0x0200CC3F,但升级框架可能预期另一个ID,或SR文件中的设备定义与实际硬件不符。
- 排查方法:
- 核对SR配置:检查系统中
SR(配置文件)或CSR(Configuration and Service Repository)里,关于该CPLD (Cpld_1_0101) 的定义。
- 验证ID映射:确认SR中定义的设备ID、JTAG位置是否与
GetChipIdcode实际读取到的0x0200CC3F完全一致。
- 案例参考:知识库中的成功案例明确指出:“BMC直连主板CPLD,因此不存在jtag switch切换的情况,主板SR中的FirmwareRoute需为0”。拓扑和SR配置错误是导致升级失败的关键原因。
4. JTAG链上存在其他干扰设备
多个设备共用JTAG链可能导致地址冲突或驱动能力不足。
- 检查:
- 确认该JTAG链上是否还有其他CPLD、FPGA或MCU?
- 升级时是否正确地使用了
BYPASS模式?BYPASS模式可以确保指令和数据流只发送给目标设备,旁路其他设备。知识库中bmc.kepler.Chip.JtagTarget的SetBypassMode方法正是为此设计。
- 检查
BypassChannelTest的成功是否意味着整个链路被正确旁路。
5. CPLD供电稳定性
编程时CPLD功耗可能瞬时增大。
- 检查:
- 在升级过程中,使用万用表或示波器监测CPLD的核心电压(如VCCINT)和IO电压(如VCCIO)。
- 观察电压是否有跌落(droop)或毛刺(glitch),尤其是在编程开始的瞬间。
关联知识库信息验证
综合分析您提供的日志和知识库信息,可以佐证上述方向:
JtagOverLocalBus_1 接口负责与CPLD通信(如Cpld_1_0101),其配置的正确性至关重要。
GetChipIdcode 和 BypassChannelTest 是通过 bmc.kepler.Chip.JtagTarget 接口执行的,这些测试成功说明D-Bus和hwproxy服务层面是通的,问题大概率在物理层或固件层配置。
- 关键线索:知识库中的成功解决案例直接指出,SR文件中的
FirmwareRoute 和 JTAG_0 接口配置错误是根源。这强烈建议您优先检查硬件连接拓扑与SR/CSR配置是否一致。
总结与建议排查步骤
- 优先检查配置:立即核对硬件连接(BMC->CPLD)和系统SR/CSR文件中的JTAG拓扑、设备ID、FirmwareRoute等配置。这是“最快找到问题”的路径,参考知识库成功案例。
- 尝试降频升级:如果配置无误,立刻修改JTAG时钟频率,尝试在低速下(如1-2MHz)进行升级。
- 测量供电与信号:
- 监测CPLD供电电压稳定性。
- 若条件允许,用示波器抓取编程过程中的TDO信号,与期望值(
0xFE)比较。
- 审查JTAG链:确认链上无冲突,
BYPASS模式已正确应用。
结论:问题极可能源于JTAG信号完整性不足(主因:时钟频率过高或PCB设计/连接问题)或系统配置文件(SR/CSR)与实际硬件拓扑不匹配。建议按上述步骤优先排查配置与降频。
Tim
(宝德计算_杨铤)
3
Tim
(宝德计算_杨铤)
4
根据报错信息,升级的svf文件中预期expect是0xfe,实际上cpld链路读到的TDO值是0x0。请确认以下这些排查点:
- BMC中CSR配置的链路是否符合预期(如用jtag0还是jtag1)
- 如果当前svf文件能在其他环境上升级成功,在当前环境上升级失败,可以排除是svf升级文件的内容(未使用过的svf升级包比较容易由于硬件出包有问题导致),如果从cpld链路读到的sample值非0,优先排查是否svf文件有问题,否则则是链路问题
- 如果从cpld链路读到的sample值为0,基本都是链路读不到值,需要cpld逻辑的人帮忙量一下TDO波形
carroll
(软通华方_尹晓钢)
6
你们通过CPLD 烧录器把persist_bit改成1试试,JTAG烧录应该是1。