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.

RM48L952: EMIF接异步FRAM铁电存储器,读写异常

Part Number: RM48L952
Other Parts Discussed in Thread: TMDSRM48HDK, HALCOGEN

在本应用中使用的是TI开发板TMDSRM48HDK。emif接了一个板载的sdram以及三个异步fram存储器,通过存储窗口观察sdram读写正常,但是异步访问不对,现在将配置和程序贴在下面

程序代码如下

在test_buffer1()中进行读写操作,在存储监测窗口看不到正确变化,用示波器监测写过程的ce 、we脚,发现we脚有异常。在一个写周期内,we脚反复变化,不知道这是什么原因,是不是造成写不进去的根源,希望能得到解答。或者是不是在异步存储配置方面有别的问题。

  • 我们会在确认后给您回复

  • 我们认为这是 HW 错误。 请您参考器件勘误表中的以下办法: EMIF#4 写入配置为 " 正常 " 的外部异步存储器,这会导致额外的 WE 脉冲。

    解决方法:必须使用 CPU 的 MPU 将外部异步内存配置为“设备”类型或“强排序”类型。希望以上解决方法对您有所帮助。

  • 我那么配置了,还是没有变化

    论坛上有朋友说需要使用下面的语句初始化mpu,这时候不再出现一次写操作,we反复翻转的情况。

    _mpuDisable_();
    _mpuInit_();
    _mpuEnable_();

    但是目前仍然没有写成功,目前猜测可能原因(1)ASYNC初始化配置不对,这是halcogen自动生成的。如下所示,因为我的sdram操作使用halcogen生成的代码也是不能读写成功,后来再论坛上找了一个初始代码之后,sdram读写就没有问题了。(2)引脚接线不对,按照下面图中所示接的,EMIF_nDQM[1:0]是必须接到fram的吗,对于fram端应用手册上说如果使用16bit数据方式,这两个byte enable引脚可以直接接地。期待您的回复,谢谢。

    void emif_ASYNC1Init(void)
    {
    /* USER CODE BEGIN (4) */
    /* USER CODE END */
    emifREG->CE2CFG = 0x00000000U;
    emifREG->CE2CFG = (uint32)((uint32)0U << 31U)|
    (uint32)((uint32)0U << 30U)|
    (uint32)((uint32)2U << 26U)|
    (uint32)((uint32)6U << 20U)|
    (uint32)((uint32)1U << 17U)|
    (uint32)((uint32)1U << 13U)|
    (uint32)((uint32)8U << 7U)|
    (uint32)((uint32)1U << 4U)|
    (uint32)((uint32)1U << 2U)|
    (uint32)((uint32)emif_16_bit_port);

    emifREG->AWCC = (emifREG->AWCC & 0xC0FF0000U)|
    (uint32)((uint32)emif_pin_high << 29U)|
    (uint32)((uint32)emif_pin_low << 28U)|
    (uint32)((uint32)emif_wait_pin0 << 16U)|
    (uint32)((uint32)0U);

    emifREG->PMCR = (emifREG->PMCR & 0xFFFFFF00U)|
    (uint32)((uint32)0U << 2U)|
    (uint32)((uint32)emif_4_words << 1U)|
    (uint32)((uint32)0U);
    /* USER CODE BEGIN (5) */
    /* USER CODE END */
    }

  • (1)ASYNC初始化配置不对,是halcogen自动生成的。如下图,您使用halcogen进行sdram操作生成的代码无法读写成功,参考论坛之前的初始代码,sdram读写没有问题。

    EMIF 异步时序参数应正确编程。这些参数是根据 FRAM spec中的时序参数确定的。

    (2)

    引脚接线不对

    请问您是否遵循图 17-8 ?

    EMIF_ADDR[x,0] --- FRAM_ADDR[x+1, 1]

    EMIF_BA[1] --- FRAM_ADDR[0]

  • (1) ASYNC初始化配置不对,是halcogen自动生成的。如图,您使用halcogen进行sdram操作生成的代码无法读写成功,参考论坛之前的初始代码,sdram读写没有问题。

    EMIF 异步时序参数应正确编程。这些参数是根据 FRAM spec规范中的时序参数确定的。

    2)引脚接线不对

    请问您是否遵循图 17-8?

    EMIF_ADDR[x,0] --- FRAM_ADDR[x+1, 1]

    EMIF_BA[1] --- FRAM_ADDR[0]

  • 地址和数据线都是按照图里说的接的。EMIF_nDQM[1:0]是必须接到fram的吗,对于fram端应用手册上说如果使用16bit数据方式,这两个byte enable引脚可以直接接地。我现在是没有接EMIF_nDQM[1:0], 两个BE[1:0]引脚接地,这样应该没问题吧

  • 排除了芯片固有bug之后,上面的配置都是可以的,现在问题解决了,因为我接线的一个细节疏忽,感谢给予帮助的各位。

  • 感谢您使用TI产品,如有其他问题请随时联系我们。