问题描述:
在开发中,先使用黑金的 AXU3EGB 开发板进行初步验证,再自己设计了一套底板,核心板还是采用黑金的,在底板的设计中,剔除了用不到的接口(具体的是CAN,MIPI 接口以及 IIC 的 EEPROM、DP 接口、PL 串口)。使用为开发板准备的 Vitis 工程中,无法把程序通过自己设计的底板 JTAG 下载至黑金 3EG 核心板的 Flash中,报错如下图所示。但奇怪的是,直接在Vivado 或 Vitis 中使用 JTAG 都能直接以 JTAG 模式运行程序。
在 BlockDesign 中的 ZYNQ MPSoC 核中,IO 的设置是与黑金开发板保持一致的,因为认为就算加了没有用到的接口(如 CAN),但只要不使用就没有关系。
而问题就出在了这里。
问题的解决:
实际上,在 Block Design 中的所有 IO 设置,最后都会影响 FSBL,而错误的 FSBL 则会导致 QSPI Flash 的程序固化失败。
则问题的解决有两个思路。
一是在 Vivado 的Block Design 设计时就不要加入用不到的功能IO,但这意味着要重新修改 Vivado 的 Block Design ,再重新输出硬件描述文件,导入 Vitis 重新编译,由于我们的工程较为复杂,这一套流程下来哪怕使用16核电脑也需要将近一个小时。
二是在设计时,使用只保留核心功能(如 DDR、Flash、串口等最基本的配置)的 ZYNQ 核配置的 fsbl 进行下载,这里提供一个这样的fsbl(应该只适配 3EG),再在 Vitis 中的 Flash 下载中替换或者使用黑金提供的Flash下载批处理文件,这里也一起提供。使用时需要注意,需要对批处理文件进行编辑,把Vitis路径替换为自己电脑的 Vitis 安装路径。