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.
大家好、
我收到了客户的以下询问:
他们正在尝试设置 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本身进行以下更改?
以前: