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.

OMAPL138 EMIF 与FPGA通信的问题



参考OMAPL138k开发板,自己做的板子。通过EMIF实现OMAPL138与FPGA(EP4CE6F17C8)通信,OMAPL138 与FPGA的连接方式见EMIF.png。EMIF配置为异步正常模式,16bit 数据,EMIF时钟为150M 。

EMIF.png

现象:

1) EMIF读操作,每读一次CS信号有限期间OE信号出现16个下降沿。

CEnCFG 配置结果为:

EMIFA_CE2CFG 0x08224111 

EMIFA_CE3CFG 0x08224111

2) 片选信号正常,看手册上有附件cache.png表述

个人理解EMIF 对应的cache大小为256bit ,当有一个读请求时(16bit),一次填充了16个读请求。

cache.png

3) 当同一个地址读多次(8次)的时候CS和OE信号只出现了一次

4) 在每次读之后添加sync();函数后,CS和OE都正常,不过CS信号有效期间 OE信号还是出现16个下降沿

问题:

1) 请问这是什么原因导致的,有什么方法可以解决

2) 是否是因为cache导致,EMIF是否有对应的cache, 如果有是否可以关闭EMIF对应的cache 

  • 建议先把EMIFA地址CACHE对应的MAR寄存器关掉测试一下。

    http://www.ti.com/lit/ug/sprufk5a/sprufk5a.pdf

  • @Denny Yang 开发板上跑的Linux 系统,该怎么操作? 是在U-boot 中关闭  还是在Kernel 中关闭

  • 我尝试的操作,是在内核中板子初始化时对MAR 赋值,具体操作如下:

    操作的结果是 读出来是0 ,写完之后再读还是0。不知这样操作是否可以,如果不可以,应该怎么操作,多谢!

  • 你可以通过DSP来访问EMIF,关闭DSP的CACHE,如果还有这个问题,基本可以排除CACHE的影响

  • 在DSP上关闭,DSP上是否运行实时系统。我之前测试时DSP上没有运行实时系统,直接访问EMIF Cache对应MAR的物理地址,赋值为零。没有起到作用,多次读操作只有一个片选信号和OE信号。如果不是CACHE的问题,那问题可能会是什么原因引起的?
    测试代码如下:

    int main(void)
    {
    int i = 0;
    int count = 0x11;
    unsigned int *addr;
    unsigned int *ui_p_mar;

    addr = (unsigned int *)0x8001ff70;
    ui_p_mar = (unsigned int *)0x01848188;
    *ui_p_mar = 0;


    for(i = 0 ; i < 30 ;i++)
    {
    if(i == 0 )
    *(addr + i) = *ui_p_mar;
    else
    *(addr + i) = (count + i);
    }

    return 0;
    }

    读取的结果如下:

    0x00000000 0x00000012 0x00000013 0x00000014 0x00000015 0x00000016
    0x00000017 0x00000018 0x00000019 0x0000001a 0x0000001b 0x0000001c
    0x0000001d 0x0000001e 0x0000001f 0x00000020 0x00000021 0x00000022
    0x00000023 0x00000024 0x00000025 0x00000026 0x00000027 0x00000028
    0x00000029 0x0000002a 0x0000002b 0x0000002c 0x0000002d 0x0000002e


     

  • 我们是在ARM上通过EMIF访问FPGA的 

  • @Denny Yang 多谢回复,根据你的提示

    关闭DSP的cache之后  用DSP访问EMIF,每次读操作过程中,一个片选信号有效期间OE信号只出现一次。如果把CACHE打开一个片选信号有效期间OE信号出现16次。

    EMIF的配置与之前通过ARM访问EMIF时一样。是否可以断定是CHACHE的问题。ARM上是否也有关闭EMIF对应CACHE的寄存器?