You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cyclone V SoC 从SDRAM运行裸机应用调试异常问题求助

问题根因与解决方案

根因定位

你遇到的复位问题由多个已知的Cyclone V SoC调试适配问题共同导致:

  • Ubuntu源安装的OpenOCD 0.10.0版本过旧,缺少Cyclone V SoC的复位、USB Blaster II驱动的适配补丁
  • 未手动关闭HPS默认开启的看门狗,程序运行后未喂狗触发自动复位
  • 调试初始状态下MMU、Cache处于开启状态,与裸机程序的地址映射预期不匹配
  • 缺少SDRAM、HPS时钟的初始化流程,直接访问未初始化的SDRAM触发数据异常导致CPU复位

修复步骤

1. 替换OpenOCD版本

弃用Ubuntu 18源自带的OpenOCD 0.10.0,使用以下两种方案二选一:

  • 直接使用SoC EDS 20.1自带的OpenOCD,路径默认位于intelFPGA_lite/20.1/embedded/openocd/bin/openocd,该版本已经集成Altera官方的Cyclone V适配补丁
  • 自行编译OpenOCD 0.12及以上版本,编译时开启USB Blaster II驱动支持

2. 修正OpenOCD配置

修改altera_fpgasoc.cfg配置:

  • 删除adapter_khz 1000配置项,USB Blaster II不支持动态调节速率,该配置会导致速率适配报错
  • 新增复位配置:reset_config srst_only srst_pulls_trst,解决日志中how to reset的复位逻辑报错
  • 在cycv_dbginit函数中新增关闭看门狗的操作,避免看门狗自动复位:
proc cycv_dbginit {target} {
        # 关闭HPS看门狗
        mww 0xFFD02008 0x00000000
        # General Cortex-A8/A9 debug initialisation
        cortex_a dbginit
}

3. 增加调试启动初始化流程

GDB连接到OpenOCD之后、加载程序之前,先执行以下操作关闭MMU、Cache,避免地址映射异常:

# 关中断、切换到管理模式
set $cpsr = 0x1D3
# 关MMU、ICache、DCache
mcr p15, 0, $r0, c1, c0, 0
# 清空TLB
mcr p15, 0, $r0, c8, c7, 0

也可以将上述逻辑加到OpenOCD的gdb-attach事件中,attach后自动执行。

4. 裸机程序添加初始化代码

如果需要跳过U-Boot预启动步骤直接调试,将U-Boot中HPS时钟初始化、SDRAM控制器初始化、I/O引脚配置的汇编代码,添加到裸机程序的启动头文件中,在进入应用逻辑前完成所有硬件初始化,避免访问未就绪的硬件模块触发异常。

内容的提问来源于stack exchange,提问作者Jake549

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 00:09:00