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.

[FAQ] [参考译文] [常见问题解答] AM62x、AM62Px、AM62D-Q1、AM64x、AM243x:4KB 扇区擦除失败

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1492859/faq-am62x-am62px-am62d-q1-am64x-am243x-4kb-sector-erase-fails

器件型号:PROCESSOR-SDK-AM62X

工具/软件:

您好、

器件时、会遇到一些问题 S25HL512T 或 S28HS512T 将会遇到统一模式与混合模式。

本常见问题解答涵盖的要点如下:

  1. 什么是闪存的统一模式与混合模式。
  2. MCU 和 SDK AM6xx 闪存驱动程序以哪种模式工作。
  3. 如何从一种模式切换到另一种模式。

注意:此常见问题解答适用于 AM64x、AM62x、AM243x、AM62Dx

此致、

Vaibhav

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

    闪存数据表、您可以参考:  

    S28HS512T: 数据表

    S25HL512T: 数据表

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Unknown 说:
    什么是闪存的统一模式与混合模式。

    可在两种模式/配置中设置闪存器件。

    在提到的两个闪烁的背景下、这些配置 为混合模式和统一模式。

    请注意、写入和读取操作与上述两种配置无关。

    但区别在于擦除的工作方式。

    在统一模式下:

    1. 扇区大小为256KB、因此我们将其称为块。 因此、可以将其理解为块大小>扇区大小。
    2. 当我们执行扇区擦除时、我们基本上要执行256KB 的块擦除。
    3. 因此、一次将擦除一个256KB 块、因此您可以看到已擦除的256KB 区域中的所有值均设置为0xFF。

    在混合模式下:

    1. 扇区大小是256KB 和4KB 的组合。 因此、256KB 可被称为块、4KB 空间可被视为扇区。
    2. 在执行扇区擦除时、我们可以执行以下任一操作:
      1. 256KB 的块擦除、或、
      2. 4KB 扇区擦除。

    统一模式的一种组合是:

    混合模式的所有可能组合为:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Unknown 说:
    MCU 和 SDK AM6xx 闪存驱动程序在哪种模式下工作。

    MCU PLUS SDK 闪存驱动程序在被设置为统一模式的闪存上运行。

    在我们了解如何从一种模式切换到另一种模式之前、了解我们为什么要这样做非常重要。

    一个主要原因如下:

    假设对于写入操作、要编程或写入闪存的字节数略低于4KB。 然后在这种情况下、我们首先要在写入之前擦除要写入的空间。 假设闪存处于统一模式、因此每次编程的数据略低于4KB 时、我们都需要擦除256KB 的数据、这毫无意义。

    因此、切换到混合模式允许少量大小为4KB 的空间。 因此、假设我们要对3KB 数据进行编程、因此、擦除一个大小为4KB 的扇区在这里更有意义。


    让我们看看如何在下一个响应中从一个切换到另一个。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Unknown 说:
    如何从一种模式切换到另一种模式。

    取决于所使用的闪存器件。

    如果使用 S25HL512T、请参阅:  https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1433720/am62a3-norflash-s28hs512t-sector-erase-failed/5677911#5677911

    如果使用 S28HS512T、请参阅:  https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1433720/am62a3-norflash-s28hs512t-sector-erase-failed/5687747#5687747

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

    请注意:

    有时在闪存上电/断电期间、TB4KBS 位可能会从1设置回0。

    最好考虑保护位、即 PLPROT。

    当 PLPROT 设置为1时、可以保护下表说明中突出显示的位不会被擦除或编程。

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

    下面是一个可以启用的代码片段:

    1.混合配置、将 UNHYSA 设置为0。

    2. TB4KBS 设置为1、表示启用了前32 * 4KB 扇区。

    int32_t Flash_quirkSpansionUNHYSAEnable(Flash_Config *config)
    {
        int32_t status = SystemP_SUCCESS;
        uint8_t regData = 0x00;
        uint32_t write = 0;
    
        /* Hybrid Sector Enable */
        status = Flash_norOspiRegRead(config, 0x65, 0x00800004, &regData);
    
        if(status == SystemP_SUCCESS)
        {
            if((regData & ((uint8_t)(1 << 3))) == 1)
            {
                /* Clear UNHYSA bit */
                regData &= ~(1 << 3);
                write = 1U;
            }
            else
            {
                /* No action */
            }
        }
    
        if(write)
        {
            status = Flash_norOspiRegWrite(config, 0x71, 0x04, regData);
        }
        /* Top Address Range selection for 4KB Sector Block */
        regData = 0x0;
        status = Flash_norOspiRegRead(config, 0x65, 0x00800002, &regData);
    
        /* Set TB4KBS Bit */
        regData |= (1 << 2);
        status = Flash_norOspiRegWrite(config, 0x71, 0x02, regData);
    
        return status;
    }