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和FPGA的EMIFA连接读写错误的问题

Other Parts Discussed in Thread: OMAP-L138

本人参考广州创龙公司的工程范例,用DSP单核和FPGA通过EMIFA连接和读写都是正常的。但是若将ARM也加入进来,ARM跑linux3.3,由ARM通过slaveloader语句启动DSP,再次观察分析EMIFA的地址数据,发现有错误不正确的情况。反复看程序是没问题。EMIFA的频率也试着改低了,依然不正常。请问是否有标准的3核交互的范例程序可以参考呢?ARM和DSP是走SYSLINK通讯,DSP通过EMIFA和FPGA相连。

  • user5243180 说:
    ARM跑linux3.3,由ARM通过slaveloader语句启动DSP,再次观察分析EMIFA的地址数据,发现有错误不正确的情况。反复看程序是没问题。

    ARM文件系统是在NAND上吗?如果是,应该是FPGA对EMIFA时序的处理有问题。FPGA应该只对接在自己的EMIF_CS有效时才响应。

  • ARM文件系统是NAND上的。你说FPGA可能处理EMIFA时序有错误,但是单核DSP和FPGA相连通讯读写都是正确的。只有若由ARM引导DSP,之后分析DSP和FPGA连接情况,才发现EMIFA读写出错了
  • user5243180 说:
    之后分析DSP和FPGA连接情况,才发现EMIFA读写出错了

    是读出错了,还是写出错了?如何判断的?

  • 源程序部分如下:

    int i=0;

    /* 初始化数据缓冲区 */
    for (i = 0; i < EMIF_BUFFER_LENGTH; i++)
    {
    emif_wbuffer[i] = (short)(i);
    emif_rbuffer[i] = 0xDEAD;
    }

    /* 向FPGA写数据 */
    for (i = 0; i < EMIF_BUFFER_LENGTH; i++)
    {
    ((short *)SOC_EMIFA_CS2_ADDR)[i] = emif_wbuffer[i];
    }

    上面是测试案例,意思是往片选2地址写一堆数值(0,1,2,3,4,5,6......)。FPGA是设计成双口RAM结构,DSP写给FPGA,应该监控内存也是可以正常读取回来的。但是若单独DSP和FPGA相连,反馈结果是正确的。若ARM引导起来DSP,再监控内存情况,就发现读取回来的数值部分是错的。详细见图。图中还试着改了EMIFA的分频情况。

  • 你好!这个问题应该是在OMAP-L138里面ARM和DSP同时操作一个外设,但是本身的参数不一致造成的。排除问题的方法:

    1.使用ARM端跑linux时,EMIFA总线在u-boot里面被默认设置为91.2MHz,可以先确认下,是否频率正确,或者使用的u-boot版本是否比较旧;

    2.建议在dsp程序里面不要再修改emifa总线的频率,容易导致arm端的nand flash出错;

    3.使用CS2在创龙的内核v1.8及之前的版本,是默认在内核里面使能了CS2和创龙的FPGA板卡通信,如果使用ARM端和FPGA通信,该案例和配套硬件,可以直接测试;如果使用dsp和FPGA通信,可以参考文档,在内核里面将cs2对应的PHYSMAP FLASH(etc connect with FPGA)的功能disable,或更换成CS4~CS5。

    如果是v1.9及以后版本的内核,是以内核模块方式提供,只要不加载该模块,可以直接使用dsp和FPGA通信。

  • 感谢回答,已经解决。结合FPGA时序情况,改变EMIFA读写时序参数目前是好了。