NXP MCU 技术论坛
直播中

李玲

7年用户 1242经验值
私信 关注
[问答]

imx7d使用dma传输eim数据,总是会有多余的写信号如何解决?

大家好
我的开发板是IMX7DSABRE。Linux内核版本为4.9.88。
我在imx7d上用dma传输EIM数据到FPGA时,往EIM总线写数据的时候,出现了一些问题。我的EIM总线数据宽度配置为16bit,我每次向总线写入16个字节的数据:
0x1234 0x1235 0x12346 0x1237 0x1238 0x1239 0x123a 0x123b
我的FPGA可以接收到这16个字节的数据,但是它还额外接收到16个字节的0数据。收到 0 数据是因为 EIM 总线产生了 8 个以上的写信号。
通常情况下,根据我的数据线宽的配置,当出现16个字节时,只需要产生8个写信号,但实际上产生了16个写信号。波形图如下:


我的dma代码配置如下:
dma_m2m_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
dma_m2m_config.src_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
dma_m2m_config.src_maxburst = EIM_WRITE_SIZE/2;
dma_m2m_config.dst_maxburst = EIM_WRITE_SIZE/2;
dmaengine_slave_config(dma_m2m_chan, &dma_m2m_config);
dma_m2m_desc = dma_m2m_chan->device->device_prep_dma_memcpy(dma_m2m_chan, dma_dst, dma_src, 长度, DMA_MEM_TO_MEM);

我想知道为什么有16个写信号?
同时我尝试给dst_addr_width和src_addr_width配置不同的值,但是不管我怎么配置,总是会有多余的写信号。我应该如何解决这个问题?

同时我尝试了dst_addr_width和src_addr_width配置不同的值,如:
dma_m2m_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
dma_m2m_config.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;

dma_m2m_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
dma_m2m_config.src_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;

dma_m2m_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
dma_m2m_config.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;

dma_m2m_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
dma_m2m_config.src_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;

dma_m2m_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
dma_m2m_config.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;

dma_m2m_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
dma_m2m_config.src_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;

dma_m2m_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
dma_m2m_config.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
但是不管我怎么配置,总是会有多余的写信号。我应该如何解决这个问题?

更多回帖

发帖
×
20
完善资料,
赚取积分