【问题标题】:Stuck in API XAxiDma_BdRingFromHw, why doesn't the S2MM Block descriptor's Completed bit Set?卡在 API XAxiDma_BdRingFromHw 中,为什么 S2MM 块描述符的 Completed 位没有设置?
【发布时间】:2019-04-05 14:46:25
【问题描述】:

我正在开发 Zynq 7z030,我正在尝试从 PL 端接收 DDR 上的数据。我正在使用 xilinx 在 SDK 上作为示例提供的 AXI DMA SG 轮询代码。 (xaxidma_example_sg_poll.c)

配置 DMA 后 -> 设置 RX 通道 -> 启动 DMA -> 我进入 API CheckDmaResult。 这里我调用 XAxiDma_BdRingFromHw API。

while ((ProcessedBdCount = XAxiDma_BdRingFromHw(RxRingPtr,
                               XAXIDMA_ALL_BDS,
                               &BdPtr)) == 0) {
    }

此 API 调用 Xil_DCacheInvalidateRange 返回,然后块描述符状态始终保持为 0。因此导致 XAxiDma_BdRingFromHw 永远循环。完整的位永远不会设置。 即使我看到 S2MM 的 TREADY 变高并在 ILA(FPGA 端/PL 端的集成逻辑分析仪)中接收数据,也会发生这种情况

main
     ....
        Status1 = CheckDmaResult(&AxiDma);
     .....
-> static int CheckDmaResult(XAxiDma * AxiDmaInstPtr)  
....             
 while ((ProcessedBdCount = 
XAxiDma_BdRingFromHw(RxRingPtr,
                               XAXIDMA_ALL_BDS,
                               &BdPtr)) == 0) {
    } 
....
-> XAxiDma_BdRingFromHw(XAxiDma_BdRing * RingPtr, int BdLimit,
                 XAxiDma_Bd ** BdSetPtr)

   ....
      while (BdCount < BdLimit) {
        /* Read the status */
        XAXIDMA_CACHE_INVALIDATE(CurBdPtr);
        BdSts = XAxiDma_BdRead(CurBdPtr, XAXIDMA_BD_STS_OFFSET);
        BdCr = XAxiDma_BdRead(CurBdPtr, XAXIDMA_BD_CTRL_LEN_OFFSET);

        /* If the hardware still hasn't processed this BD then we are
         * done
         */
        if (!(BdSts & XAXIDMA_BD_STS_COMPLETE_MASK)) {
            break;
        }
.....

有人可以建议我应该考虑解决此问题的可能原因或方向。任何建议都会有很大帮助。 提前致谢!

【问题讨论】:

    标签: vivado zynq cortex-a xilinx-edk


    【解决方案1】:

    问题出在电路板上(ESD 损坏)。 换板后DDR就开始接收数据,观察到以下情况

    在调试配置设置中,需要在目标设置下勾选以下内容

    • 重置整个系统

    • FPGA 编程

    在应用程序选项卡下

    • 下载应用程序

    • 停在'main'

    • 通过在“应用程序”字段中指定正确的对应 .elf 文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 2015-12-08
      • 1970-01-01
      • 2017-10-30
      • 2016-10-27
      相关资源
      最近更新 更多