IMX6ULL EIM synchronous write Address

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

IMX6ULL EIM synchronous write Address

跳至解决方案
1,278 次查看
Levear
Contributor III

Hello everyone,
I am using the EIM interface of IMX6ULL and FPGA communication, using synchronous transmission (read write),       0x50000000 to 0x50000100 are the addresses corresponding to control commands, 0x50000200 to 0x50001000 are the addresses used for large amounts of data (DMA), the bus used is 16 bits (0-15), burst len=32.
1. In synchronous mode
At present, I have no problem writing control commands to 0x50000000, but when I write data to the address of 0x50000002, the FPGA still receives the address of 0x50000000.
But when I increase the address to 0x50000040 (32 * 2), I can write data again and the address is normal. Is this phenomenon related to burst len=32?
But I want to use the address 0x50000002, how can I solve this problem?

Levear_0-1698734594638.png


2 In asynchronous mode
I have no problem writing control commands to 0x50000000, and I can also write data to 0x50000002, but it will continue to be written to 0x50000004...... 0x5000000E, the written value is the same as 0x50000000, which affects the data in other addresses.

Levear_1-1698734635937.png

The following is in Chinese

大家好,

我使用的是IMX6ULL的EIM接口和FPGA通信,使用的是同步传输(读写).

0x50000000至0x50000100为控制命令对应的地址,0x50000200至0x50001000为大量数据(DMA)使用的地址,使用的总线为16位(0-15),burst len = 32.

1.在同步模式下

目前我往0x50000000写入控制命令没有问题,但是我往0x50000002的地址写入数据时,FPGA收到的地址仍然为0x50000000。
但是我将地址增在到0x50000040时(32*2),又可以写入数据了,地址也正常了。这个现象和burst len = 32有关系吗?
但是我想使用0x50000002这个地址,该如何解决这个问题?


2在异步模式下

我往0x50000000写入控制命令没有问题,也可以往0x50000002写入数据,但是会连续写入到0x50000004。。。。。。0x5000000E,写入的值和0x50000000一样,这样影响到其他的地址内的数据。

 

0 项奖励
回复
1 解答
1,226 次查看
Levear
Contributor III

As with the previous question, the memory type setting is incorrect and should be set to

s_mmuDevAttr。

As shown in the following figure

Levear_0-1698823966582.png

还是内存初始化时的内存类型设置的不对,应该设置为

s_mmuDevAttr.

for (i = 0; i < 32; i++)
{
MMU_ConfigSection(MMU_L1Table, (const void *)(0x0C000000U + (i << 20)), (0x0C000000U + (i << 20)),
&s_mmuDevAttr); /* QSPI Rx Buf */
}

for (i = 0; i < 256; i++)
{
MMU_ConfigSection(MMU_L1Table, (const void *)(0x50000000U + (i << 20)), (0x50000000U + (i << 20)),
&s_mmuDevAttr); /* EIM */
}

for (i = 0; i < 256; i++)
{
MMU_ConfigSection(MMU_L1Table, (const void *)(0x60000000U + (i << 20)), (0x60000000U + (i << 20)),
&s_mmuRomAttr); /* QSPI */
}

for (i = 0; i < 2048; i++)
{
MMU_ConfigSection(MMU_L1Table, (const void *)(0x80000000U + (i << 20)), (0x80000000U + (i << 20)),
&s_mmuRamAttr); /* DDR */
}

在原帖中查看解决方案

0 项奖励
回复
5 回复数
1,227 次查看
Levear
Contributor III

As with the previous question, the memory type setting is incorrect and should be set to

s_mmuDevAttr。

As shown in the following figure

Levear_0-1698823966582.png

还是内存初始化时的内存类型设置的不对,应该设置为

s_mmuDevAttr.

for (i = 0; i < 32; i++)
{
MMU_ConfigSection(MMU_L1Table, (const void *)(0x0C000000U + (i << 20)), (0x0C000000U + (i << 20)),
&s_mmuDevAttr); /* QSPI Rx Buf */
}

for (i = 0; i < 256; i++)
{
MMU_ConfigSection(MMU_L1Table, (const void *)(0x50000000U + (i << 20)), (0x50000000U + (i << 20)),
&s_mmuDevAttr); /* EIM */
}

for (i = 0; i < 256; i++)
{
MMU_ConfigSection(MMU_L1Table, (const void *)(0x60000000U + (i << 20)), (0x60000000U + (i << 20)),
&s_mmuRomAttr); /* QSPI */
}

for (i = 0; i < 2048; i++)
{
MMU_ConfigSection(MMU_L1Table, (const void *)(0x80000000U + (i << 20)), (0x80000000U + (i << 20)),
&s_mmuRamAttr); /* DDR */
}

0 项奖励
回复
1,238 次查看
Sanket_Parekh
NXP TechSupport
NXP TechSupport

Hi @Levear,

I hope you are doing well.
 
'Is this phenomenon related to burst len=32?'
- When considering EIM bursts (performance, burst length, etc) we should take into account that some parameters (maximum burst length, which defines length in clocks of back-to-back EIM access) depend on the master, which performs the access (EIM always serves as slave).
- The EIM can split a master burst in order to meet its own settings, but the EIM cannot join two master accesses.
- So, the maximum  burst length is defined by the master.
- Usually three options are applied for EIM burst accesses :
  • ARM (LDM / STM)
  • ARM (VLDM / VSTM)
  • i.MX SDMA.
Kindly refer to Chapter 21: 'EIM' in the reference manual.
 
Thanks and Regards,
Sanket Parekh
0 项奖励
回复
1,224 次查看
Levear
Contributor III
It's not a problem here,thanks anyway
0 项奖励
回复
1,213 次查看
Sanket_Parekh
NXP TechSupport
NXP TechSupport

Hello @Levear,

I hope you are doing well.

If there are no further queries from your side, Can I mark this case as closed?

Thanks & Regards,
Sanket Parekh

0 项奖励
回复
1,206 次查看
Levear
Contributor III
OK
0 项奖励
回复