This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM2434:使用 UDMA 将 GPMC 突发传输至 FPGA (TR 类型设置)

Guru**** 2524550 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1160716/am2434-gpmc-burst-transfer-to-fpga-using-udma-tr-type-settings

器件型号:AM2434

大家好、  

我收到了客户的以下询问:

他们正在尝试设置 GPMC、以便使用 UDMA 将其突发传输到 FPGA。 它们指的是 SDK 中的示例代码、DMA 传输本身有效、但数据不正确。

他们的 FPGA 规格假设有8次突发、因此如果示例代码中的 TR 类型为类型15、则数据将在16次突发中传输。 他们希望将 DMA 传输的类型更改为8次突发、但即使他们将 TR 设置中的 flag_type 更改为3、传输也不会执行。

下面是他们使用的代码:

static void App_udmaTrpdInit(Udma_ChHandle chHandle,
                             uint8_t *trpdMem,
                             const void *destBuf,
                             const void *srcBuf,
                             uint32_t length)
{
    CSL_UdmapTR15  *pTr;
    uint32_t        cqRingNum = Udma_chGetCqRingNum(chHandle);
 
    /* Make TRPD with TR15 TR type */
    UdmaUtils_makeTrpdTr15(trpdMem, 1U, cqRingNum);
 
    /* Setup TR */
    pTr = UdmaUtils_getTrpdTr15Pointer(trpdMem, 0U);
    pTr->flags    = CSL_FMK(UDMAP_TR_FLAGS_TYPE, CSL_UDMAP_TR_FLAGS_TYPE_4D_BLOCK_MOVE_REPACKING_INDIRECTION);
    pTr->flags   |= CSL_FMK(UDMAP_TR_FLAGS_STATIC, 0U);
    pTr->flags   |= CSL_FMK(UDMAP_TR_FLAGS_EOL, CSL_UDMAP_TR_FLAGS_EOL_MATCH_SOL_EOL);
    pTr->flags   |= CSL_FMK(UDMAP_TR_FLAGS_EVENT_SIZE, CSL_UDMAP_TR_FLAGS_EVENT_SIZE_COMPLETION);
    pTr->flags   |= CSL_FMK(UDMAP_TR_FLAGS_TRIGGER0, CSL_UDMAP_TR_FLAGS_TRIGGER_NONE);
    pTr->flags   |= CSL_FMK(UDMAP_TR_FLAGS_TRIGGER0_TYPE, CSL_UDMAP_TR_FLAGS_TRIGGER_TYPE_ALL);
    pTr->flags   |= CSL_FMK(UDMAP_TR_FLAGS_TRIGGER1, CSL_UDMAP_TR_FLAGS_TRIGGER_NONE);
    pTr->flags   |= CSL_FMK(UDMAP_TR_FLAGS_TRIGGER1_TYPE, CSL_UDMAP_TR_FLAGS_TRIGGER_TYPE_ALL);
    pTr->flags   |= CSL_FMK(UDMAP_TR_FLAGS_CMD_ID, 0x25U);  /* This will come back in TR response */
    pTr->flags   |= CSL_FMK(UDMAP_TR_FLAGS_SA_INDIRECT, 0U);
    pTr->flags   |= CSL_FMK(UDMAP_TR_FLAGS_DA_INDIRECT, 0U);
    pTr->flags   |= CSL_FMK(UDMAP_TR_FLAGS_EOP, 1U);
    pTr->icnt0    = length;
    pTr->icnt1    = 1U;
    pTr->icnt2    = 1U;
    pTr->icnt3    = 1U;
    pTr->dim1     = pTr->icnt0;
    pTr->dim2     = (pTr->icnt0 * pTr->icnt1);
    pTr->dim3     = (pTr->icnt0 * pTr->icnt1 * pTr->icnt2);
    pTr->addr     = (uint64_t) Udma_defaultVirtToPhyFxn(srcBuf, 0U, NULL);
    pTr->fmtflags = 0x00000000U;    /* Linear addressing, 1 byte per elem */
    pTr->dicnt0   = length;
    pTr->dicnt1   = 1U;
    pTr->dicnt2   = 1U;
    pTr->dicnt3   = 1U;
    pTr->ddim1    = pTr->dicnt0;
    pTr->ddim2    = (pTr->dicnt0 * pTr->dicnt1);
    pTr->ddim3    = (pTr->dicnt0 * pTr->dicnt1 * pTr->dicnt2);
    pTr->daddr    = (uint64_t) Udma_defaultVirtToPhyFxn(destBuf, 0U, NULL);
 
    /* Perform cache writeback */
    CacheP_wb(trpdMem, UDMA_TEST_TRPD_SIZE, CacheP_TYPE_ALLD);
 
    return;
}

设置是否正确? 他们如何解决此问题、以便接收正确的数据?

此致、

Mari Tsunoda

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mari、

    很抱歉、未及时回复。   请在今天结束前回复。 如果没有、请随意 ping。

    此致、

    Prasad

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mari、

    这些设置看起来像是从下面的 uDMA 示例中复制的、这是正确的吗?

    您是说他们这样更改了代码吗?

    原始:  PTR->flags   = CSL_FMK (UDMAP_TR_FLAGS_TYPE、CSL_UDMAP_TR_FLAGS_TYPE_4D_BLOCK_MOVE_REPLAKINDIRECTION);
    更新:    PTR->FLAGS   = CSL_FMK (UDMAP_TR_FLAGS_TYPE、CSL_UDMAP_TR_FLAGS_TYPE_4D_DATA_MOVE_MOVE_MOVE_TOL);

    此致、
    弗兰克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Frank、

    很抱歉、我看到它没有反映在我粘贴的代码中(可能是他们粘贴了错误的代码)、但他们按照您的指示调整了 TR 标志类型。

    此致、

    Mari

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mari、

    我就此咨询了内部专家、并获得了以下反馈:

    不清楚它们是什么意思的突发。 为什么他们认为 TR3会帮助将其减少为8?

    有关尺寸等的更多信息也会有所帮助。

    此致、
    弗兰克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Frank、

    改写-他们是否可以遵循一些示例代码、以便将其配置 为实现对 FPGA 进行读/写访问的8字突发访问?

    是否无需更改 TR 类型?  

    此致、

    Mari Tsunoda

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mari、

    感谢您的回答。 我们将对此进行研究、并将很快与您联系。

    此致、
    弗兰克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Mari、

    咨询内部专家、我获得了以下其他反馈:

    所需的数据长度和突发大小是多少。

    此致、
    弗兰克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Frank、

    根据数据长度、您是指 FPGA 器件尺寸吗? 它们连接一个16位 FPGA。

    我将使用它们确认突发大小。

    此致、

    Mari

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mari、

    我正在寻求其他人来帮助解决这个问题、并寻求内部专家的更直接的支持。

    此致、
    弗兰克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Frank、

    谢谢你。 请随时更新。

    此致、

    Mari

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mari、

    您现在应该从内部专家那里获得更多直接支持。

    感谢您对此问题的耐心等待。

    此致、
    弗兰克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Frank、Ashwin、

    您能告诉我数据长度是什么意思吗?

    此致、

    Mari Tsunoda

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mari、

    对延迟答复表示歉意。

    我认为块复制通道用于 GPMC 传输。

    我们在 SOC 上只有正常容量信道、且其突发大小固定为64字节。 客户正在寻找的突发大小是多少?

    此致、

    Ashwin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ashwin、

    它们正在寻找16字节的突发大小。

    此致、

    Mari

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mari、

    我正在咨询硬件专家、以了解 BCDMA 是否可以实现16字节突发。 很快就会回来。

    此外、我对传输参数还有一些疑问。 由于所需的突发次数为8、突发大小为16字节、我是否可以假设通过单个 DMA 触发器传输到 FPGA 的数据为128字节? 即,传递给 App_udmaTrpdInit()的参数"length"为128,对吧?

    此致、

    Ashwin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ashwin、

    它们可以看到8个脉冲、每个脉冲16位、每个 DMA 的总数据传输为16字节。

    此致、

    Mari

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mari、

    FPGA 使用哪种地址? 它是存储器映射 GPMC 地址作为 DMA 目标吗?

    此致、

    Ashwin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ashwin、

    [引用 userid="504368" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1160716/am2434-gpmc-burst-transfer-to-fpga-using-udma-tr-type-settings/4405421 #4405421"]是否是作为 DMA 目标的存储器映射 GPMC 地址?

    是的。

    最棒的

    Mari

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mari、

    您能否让客户尝试使用 TR15本身进行以下更改?

    以前:

      ptr ->icnt0  =长度
      PTR->icnt1  = 1U
      ptr -> dnt0 =长度
      ptr -> dnt1 = 1U
    之后:
       PTR->icnt0  =  2U
       ptr -> icnt1   = length/2
       ptr -> dnt0  = 2U
       ptr -> dnt1  = length/2
     
    如果长度为16字节,则将 icnt0设置为2,将 icnt1设置为8。 由于 icnt0设置为2、因此应以16位的突发发送数据。
    请尝试一下、并告知我们它是否起作用。
    此致、
    Ashwin