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.

[参考译文] TMS570LC4357:通过 EMIF 从 TMS570读取/写入 NOR 闪存 S29GL128P

Guru**** 2538950 points
Other Parts Discussed in Thread: HALCOGEN

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1212675/tms570lc4357-read-write-to-nor-flash-s29gl128p-from-tms570-via-emif

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

尝试 使用 EMIF 写入/读取 NOR 闪存 S29GL128P、但只能读取0xFFFF 而不是写入的实际数据、以下是我的步骤

  1. Halcogen 设置
    1. 使能 EMIF 接口、但   由于冲突而禁用了引脚 EMIF_NOE、EMIF_nDQM[0]和 EMIF_RNW
    2. 已选择 ASYNC1、已选择 NOR 闪存
    3. 将时序字段保留为默认值
  2. 将以下行添加到链接器文件 HL_sys_link.c 中

    /*用户代码开始(3)*/
    EMIF_1 (RX):origin=0x60000000 length=0x00000100
    /*用户代码结束*/

  3. 这是主代码

    int main (空)

    /*用户代码开始(3)*/

    _enable_IRQ_interrupt_();

    _mpuInit_();
    _mpuEnable_();
    EMIF_ASYNC1Init ();

    uint16_t * base_addr =(uint16_t *) 0x60000000;
    uint16_t data1 = 0x1234;
    uint16_t READ_BACK_DATA = 1947;

    *((uint16_t *) base_addr + 0x555)= 0x00AA;/*写入解锁周期1 */
    *((uint16_t *) base_addr + 0x2AA)= 0x0055;/*写入解锁周期2 */
    *((uint16_t *) base_addr + 0x555)= 0x00A0;/*写入程序设置命令*/
    *((uint16_t *) 0x60000000)= data1;/*写入要编程的数据*/
    __delay_cycles (150000);

    READ_BACK_DATA =*((uint16_t *) 0x60000000);

    /*用户代码结束*/

    返回0;
    }

Question:

  1. 是否有遗漏的代码/HALCOGEN 设置需要添加?
  2. 根据 NOR 闪存 S29GL128P 的产品说明书、应在写入程序数据后执行轮询算法。  该轮询算法涉及对 DQ 引脚的监控。 但在 HL_EMIF.c、HL_emif.h 或 HL_reg_EMIF.h 中找不到 DQ 引脚 在用户空间中从何处访问这些 DQ 引脚?

提前感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Rachana、您好!

    为了连接 NOR 闪存、是使用8位模式还是16位模式?  

    如果使用16位模式、则 EMIF BA[1]应映射到 NOR Addr[0]

    对于8位接口模式、应将 EMIF BA[1]:0连接到 NOR Addr[1]:0

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Unknown 说:
    在哪里可以访问用户空间中的这些 DQ 引脚?

    DQ[x]是 NOR 闪存的数据引脚。 EMIF 没有 DQ 引脚、但它有 DQM 引脚、即字节使能引脚。

    您可以尝试以下操作吗:

    *((uint16_t *) base_addr + 0xAAA)= 0x00AA;/*写入解锁周期1 */
    *((uint16_t *) base_addr + 0x554)= 0x0055;/*写入解锁周期2 */
    *((uint16_t *) base_addr + 0xaaa)= 0x00A0;/*写入程序设置命令*/

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、QJ:

     使用16位模式、并且是的、 EMIF BA[1] 被 映射到 NOR Addr[0]。 我已经在板上仔细检查了它。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    啊、是的、我是说 TMS570无线上的 EMIF_DATA[x]引脚映射到 NOR 闪存上的 DQ[x]引脚。

    我已经更新了您建议的行、READ_BACK_DATA 仍显示为0xFFFF。

     在以下行之后是否要执行任何其他步骤:

    *((uint16_t *) 0x60000000)= data1;/*写入要编程的数据*/

    此外、您能否确认 添加到链接器文件  HL_sys_link.c 中的行是否足够?

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Rachana、您好!

    请尝试我的代码。 我多年前开发了此代码、并在 TMS570板上进行了测试。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、Wang、感谢您编写代码。 您能再说明一点吗:

    在"TRM48L950FlashLnk.cmd"文件中、我看到 NOR 闪存的起始地址和结束地址未在存储器映射或段配置下列出。 是否没有必要?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们不必将 NOR 闪存地址添加到链接器命令文件中。

    代码对您有用吗? 我10年前开发过这种代码。