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.

[参考译文] TMDSCNCD28388D:C2000 SPI

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1017020/tmdscncd28388d-c2000-spi

器件型号:TMDSCNCD28388D

目前、NOR 闪存正在 DSP 的 SPI 接口之外进行扩展。

读取和写入的功能已经被执行、但是擦除功能没有工作。

您能否推荐适用于28388D 的擦除闪存功能?

期待收到公司的回复、谢谢!

谢谢!

Vince

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

    我的目的是:

    擦除闪存芯片上的地址范围。

    地址范围可扩展一个或多个擦除扇区。  

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

    以下程序是用于写入的擦除函数和读取/写入程序。
    数据写入后、即可读回。
    但是、如果下次地址未更改为新区域、则数据读回将在写入后出现错误。
    更改为新区域、读写数据正常。 原因是 NOR 闪存的整个区域在出厂时已被擦除。

    让专家来看看、我的擦除程序的问题在哪里?

    //*****  计划启动

    #define SUB_ERASE             0x2000

    存储区域首地址 EEPROM_ADDR 0x7024 //μ s
    #define NUM_Bytes 8

    uint16_t writeBuffer[8]={0x00、0x01、0x02、0x03、0x04、 0x05、0x06、0x07};
    uint16_t readBuffer[8]={0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x00};

    int main()

    enableWrite();

    擦除(EEPROM_ADDR、writeBuffer、NUM_Bytes);   

    while (readStatusRegister ()& MSG_STATUS_READY_M == MSG_STATUS_READY_M)//等待 EEPROM 准备好写入数据

    enableWrite();

    while (readStatusRegister ()& MSG_STATUS_WRITE_READY_M == MSG_STATUS_WRITE_READY_M)
    {//等待 EEPROM 准备好写入数据

    writeData (EEPROM_ADDR、writeBuffer、NUM_Bytes);//写入 EEPROM

    while (readStatusRegister ()& MSG_STATUS_READY_M == MSG_STATUS_READY_M)//等待 EEPROM 准备好写入数据


    ReadData (EEPROM_ADDR、readBuffer、NUM_Bytes);

    空擦除(uint16_t 地址、uint16_t *数据、uint16_t 长度)

    CS_LOW;
    SPI_writeDataBlockingNonFIFO (spic_BASE、SUB_ERASE);
    SPI_readDataBlockingNonFIFO (spic_BASE);//虚拟读取以清除 INT_flag。
    SPI_writeDataBlockingNonFIFO (spic_BASE、(地址和0xFF00);//发送 EEPROM 地址的 MSB。
    SPI_readDataBlockingNonFIFO (spic_BASE);//虚拟读取以清除 INT_flag。
    SPI_writeDataBlockingNonFIFO (spic_BASE、地址<< 8);//将地址的 LSB 发送到 EEPROM。
    SPI_readDataBlockingNonFIFO (spic_BASE);//虚拟读取以清除 INT_flag。
    CS_HIGH;

    void enableWrite (void)//函数发送 WREN 操作码

    CS_LOW;
    SPI_writeDataBlockingNonFIFO (spic_BASE、WREN);
    SPI_readDataBlockingNonFIFO (spic_BASE);//虚拟读取以清除 INT_flag。
    CS_HIGH;

    //***** 方案结束  

     

    期待您的回复。
    谢谢你

    Vince

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

    以下3张图片是关于 NOR 闪存的命令说明。

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

    e2e.ti.com/.../1106.example.c

    e2e.ti.com/.../MT25Q.ce2e.ti.com/.../MT25Q.h

    以上两个文件是 NOR 闪存提供的参考。

    如何使用上述文件中的擦除、读取和写入函数。
    NOR 闪存由重新写入28388D 的 SPI 驱动、情况如何?

    期待您的回复、谢谢!

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

    Vince、

    TI 不会为市场上提供的每个 NOR 闪存提供定制软件解决方案。

    您需要将帖子中附加的 MT25Q.h 和 MT25Q.C 调整为 F28388D SPI。 MT25Q.c 为不同的命令提供 NOR 闪存预期的数据格式、需要进行调整的 F28388D。

    此致、

    曼诺伊

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

    Vince、

    您是否尝试读取读取了读取 ID 寄存器? 如果我是您、我将从读取"Read ID"开始

    读取读取读取 ID 寄存器的伪代码:

    1) 1)将 CS 驱动为低电平

    2) 2)发送0x9F

    3) 3)通过在一个环路中发送虚拟字节从 NOR 闪存中读取20个字节

    4) 4)将 CS 驱动为高电平

    确保读取 ID 根据 NOR 闪存正确反映后、您可以继续执行其他闪存操作。

    此致、

    曼诺伊

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

    根据此操作、可以读回 ID。

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

    @Vince、

    如前所述、您需要使用 F28388D 实现等效函数(在 MT25Q.c 中提供)。

    如果您有特定的 SPI 问题、我可以回答该问题。 但是、如果任何特定的 NOR 闪存操作不起作用、则需要联系相应的半导体供应商。

    此致、

    曼诺伊

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

    谢谢、我现在已经了解了。