ZYNQ_SDK报错解决_"AP transaction error, DAP status f0000021"

ZYNQ_SDK报错解决_"AP transaction error, DAP status f0000021"

  • 前言
  • 思路
  • 定位
  • 解决
  • 总结

前言

最近调试时反复遇到的一个问题,开发板是PYNQ_Z2,win10系统下Vivado2018.2环境,现象是FPGA的bit文件可以通过jtag接口烧录,但是PS在运行至99%的时候给出错误告警:

 ERROR	: AP transaction error, DAP status f0000021

有时还会同时出现write 0x00100000 error,反复重启掉电也没有用,也就是说故障必现,但是,有的工程却不会出现这种问题。
我基本在xilinx官方论坛和CSDN论坛上看完了网上这个问题的所有帖子,也询问了开发板的产品支持工程师(非常令人遗憾的支持服务),上述虽然没能直接解决我的问题,但是我了解到了一些定位的方向,并最终解决。

思路

这个问题最本质的意思是逻辑工程与软件工程不匹配,导致软件不能正常访问硬件资源,这里的不匹配是一个广义的不匹配:
1、硬件上,检查跳帽有没有切换正确
不过,pynq z2比较特殊,它的供电、串口和jtag都走USB,所以逻辑能正常通过jtag烧录,软件也应没问题
2、PL资源有没有改动、hdf文件是否匹配
如果PL有改动但是没有将最新的hdf文件export到SDK,也会出现这种情况(我一般会确认PL没有问题才会进入SDK,如果有改动我会先把根目录.sdk文件删除,所以排除)
3、开发板与器件设置不匹配
我采用的是开发板厂商提供的board file,选中后,在后续开发它会自动加载一些配置。(然而,问题就是出在这里)
ZYNQ_SDK报错解决_
4、AXI访问DDR与OCM冲突
Zynq-7000 AP SoC、AXI — AXI_HP 访问 OCM 和 DDR 时,就会出现锁死这篇比较理论的分析内存访问冲突引起程序挂起的问题,我觉得 //软件程序占用一部分内存,这时候如果地址没有合理分配,PL通过AHP也去访问那一部分内存,报错 // 可以用上述分析去解释

定位

在排除前两项可能后,定位的方向就是检查开发板、器件的配置和地址映射,于是就发现了问题:
先看正常运行的工程:
ZYNQ_SDK报错解决_
打开这两个,DDR的地址是到0x1fff_ffff,包括OCM即512M(byte)
ZYNQ_SDK报错解决_
再看看报错的工程:
ZYNQ_SDK报错解决_
1G!
ZYNQ_SDK报错解决_
首先肯定的是Z2的DDR只有512M,但是型号呢?从原理图上看看
ZYNQ_SDK报错解决_
这就很难理解了,因为这个型号在zynq的DDR设置里是找不到的,而且,添加zynq ps后,我发现首次去配置,DDR的配置内容不是固定的,如果不保存,再次打开的时候,上一次配置内容也会发生变化,但是1、和原理图都不匹配的、而且2、选项中显示256但实际是512M的问题我还不能解释,我对开发板FAE已经基本失望,所以知道的同学欢迎留言解答。

解决

更改并make sure DDR的设置,并且注意dma hp 的地址分配,问题解决

总结

这种非技术问题,我觉得芯片厂商和开发板商是应该对此进行支持的,因为对于用户来说,需要花费时间去理解报错和定位,这是意义不大的工作。

你可能感兴趣的:(pynq,zynq)