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.

[参考译文] AM62A3:NorFlash S28HS512T 扇区擦除失败

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1433720/am62a3-norflash-s28hs512t-sector-erase-failed

器件型号:AM62A3
Thread 中讨论的其他器件: SYSCONFIG、UNIFLASH

工具/软件:

尊敬的 TI 专家

     现在、我们使用 norflash 存储器 S28HS512T       、通过定制电路板中的 AM62A3 OSPI 接口访问     、如果使用" int32_t Flash_eraseBlk (Flash_Handle handle、uint32_t blockNum)"  函数(ERASE 256k) 、 所用 闪  存块可以成功擦除且用户数据可正确写入 NOR 闪存器件;

      但如果 使用 "int32_t Flash_eraseSector (Flash_Handle 句柄、uint32_t sectorNum)(擦除4K)"  函数、则擦 除和 写入操作 将失败。

      实际上, 大多数时候我们只 修改  一个扇区中的几个字节数据; 在擦除闪存之前, 我们可以将一个扇区数据复制到全局缓冲区中, 然后 根据 数据修改一些字节数据

 在缓冲区中的位置偏移,最后 将存储 在缓冲区中的数据写入指定的扇   区区域,无需每次擦除块区;

    所以为什么 调用   "Flash_eraseSector ()" 函数  不能n`t   按预期擦除数据;

  

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

    你好、  Vaibhav

      您可以   在 日期 2/27中返回查看 E2E 回复、 我已 通过 屏幕截图上传这些寄存器值。

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

    您好、

    我想知道 Desay SV 使用的所有文件中使用的工作时钟频率、时钟分频器和协议。

    请告诉我以下内容。

    另外、我知道您已经将这些值放在前面、但是该值在所有文件和应用程序中都是相同的吗? 例如、您是否也看到 SBL 阶段1、阶段2和应用程序的值相同?

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:

    您能告诉客户您需要客户提供哪个文件吗、我认为客户不能清楚您想要获得什么。

    我想知道 Desay SV 使用的所有文件中使用的工作时钟频率、时钟分频器和协议。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    例如、您是否看到 SBL stage 1、stage 2和 application 的值相同?

    尊敬的 Vaibhav:

    我认为您提供的更改只会在 SBL 阶段1打印、对吧? 客户如何在其他阶段获得价值?

    BR、

    Biao  

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

    尊敬的 Vaibhav:

    我想确认客户使用的是8D-8D-8D 模式、时钟频率到166 MHz 且时钟分频器4与您相同。

    我想知道 Desay SV 使用的所有文件中使用的工作时钟频率、时钟分频器和协议。

    BR、

    Biao  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="529940" url="~/support/processors-group/processors/f/processors-forum/1433720/am62a3-norflash-s28hs512t-sector-erase-failed/5733702 #5733702"]我只是确认客户使用的是8D-8D-8D 模式、时钟频率到166 MHz、时钟分频器到4与您相同。[/报价]

    非常感谢您的确认。

    查看寄存器值:

    配置寄存器编号 客户看到的价值
    1. 4. 0
    2. 8. 11.
    3. 8. 8.
    4. 8. 168.
    5. 43 67

    配置寄存器编号 客户看到的价值 这意味着什么
    1. 4. TB4KBS 设置为1 ->这意味着4KB 扇区空间位于存储器地址空间的顶部。
    2. 8. MEMLAT 设置为"1000b"= 8。
    3. 8. UNHYSA 设置为1、这意味着当前处于统一模式。
    4. 8. ECC12S 设置为1
    5. 43 OPI-T 设置为1、DDR 启用、因为 SDRDDR 设置为1、我还看到保留位2:5设置为1010b

    配置寄存器编号 客户看到的价值 这意味着什么
    1. 0 TB4KBS 设置为0 ->意味着4KB 扇区空间位于存储器地址空间的底部。 是预期值、因为这是默认复位值。
    2. 11. MEMLAT 设置为"1011b"= 11。
    3. 8. UNHYSA 设置为1、这意味着当前处于统一模式。
    4. 168. ECC12S 设置为1、驱动强度为30 Ω(出厂默认设置) 这在客户的案例中看不到 )
    5. 67 OPI-T 设置为1、DDR 启用、因为 SDRDDR 设置为1、我还看到保留位7设置为1。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Vaibhav:

    关于 RES 1、这是通过 Cypress 技术支持在产品线上手动设置、 TB4KBS 设置为1 ->这意味着4KB 扇区空间位于存储器地址空间的顶部、这是客户的预期、您能否帮助您找到在 SDK 中将其设置回0的位置?  

    BR、

    Biao

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

    您好、

    您能帮助您找到在 SDK 中将其设置回0的位置吗?  [/报价]

    该位在 SDK 中保持不变。

    所以,这是我的想法。

    如果客户可以进行以下配置、则会有所帮助、原因在于检查我的图表:

    您能否确认是否根据客户的这些配置正确执行了闪存读取和写入操作?

    此致、

    Vaibhav

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

    您看到的前128KB、我很确定不会为任何类型的应用程序映像或引导加载程序映像保留。  

    因此、在顶部模式下的设置应照常良好。

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

    尊敬的 Vaibhav:  

    是的、Set top 正常、但您的设置是底部的、  这意味着4KB 范围将从0x0开始、这将影响 SBL 负载、如果客户将模式更  改为 Hybrid (尽管客户默认设置为1)、但如果客户将模式更改为混合模式、TB4KBS 将更改为0 (我猜)、甚至客户将其设置为1。   这可能是客户在 SBL 阶段无法访问或未更改模式的原因。

    BR、

    Biao

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

    尊敬的 Biao:

    请根据我对通话的解释在此处阅读我的回答。

    是的、设置顶部可以、但您的设置是底部的、

    在我之前的建议中、设置不在底部、 它是在顶部本身 请参阅屏幕截图。

     如果客户将模式更 改为混合模式、TB4KBS 将更改为0 (我猜)、

    如果看到的行为更像是闪存行为、因为在我们的 SDK 中、我们根本不会触摸 TB4KBS 位。 我们既不会单独写入或读取该位的配置寄存器1 (这个位位于此处)。

    我们唯一提到这个位的时候是我之前分享的修改,我首先通过将 UNHYSA 设置为0然后将 TB4KBS 设置为1来设置混合模式,如上面的屏幕截图中突出显示的那样。

    希望客户可以缩小 TB4KBS 设置为0的原因、即使 TB4KBS 设置为1。 我已经建议换行,最好直接与英飞凌联系,了解客户端的 TB4KBS 钻头的行为 我已经在我的最后检查了这个,它根本不会被修改。

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:

    您能否帮助自己试一下、在 SBL 阶段更改该寄存器、还可以在 AM24 EVM 上试用、我认为没关系、但我仍然想强调这种风险、这可能会导致 Norflash 只是一块石头。 但是、如果我们可以成功更改它、我们可以关闭此主题、我允许客户询问 NOR 闪存供应商以寻求帮助。

    BR、

    Biao

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

    尊敬的 Biao Li:

    基本上在 AM243上、我将提供以下流程、用于假设 SBL OSPI:

    我将编译 SBL UART Uniflash 和 SBL OSPI、从而将具有切换到混合模式的逻辑(将 UNHYSA 位设置为0、将 TB4KBS 设置为1)、应用程序不会有此逻辑、因此这意味着闪存之前已更改为在混合模式下工作、无需在应用级别执行此操作。

    请允许我在某个时候准备好并与您分享结果。

    此致、

    Vaibhav

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

    从仅运行 DM 应用程序的角度来看:

    第一个变化:

    启用混合模式后、请注意 UNHYSA 位如何从1变为0、但 TB4KBS 的值保留为1、并且在配置寄存器1 (位2)中不变为0。

    连续操作、我们无需将 UNHYSA 设置回0、因为它现在已设置好、但您可以看到 TB4KBS 未设置回0。

    通过 在引导加载程序中进行更改:

    这里显示失败、因此目前我正在调试 SBL OSPI 以查看失败的位置。

    此致、

    Vaibhav

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

    不确定 TB4KBS 是否设置为1、但无法读取配置寄存器、出于某种原因会将所有值设为0。

    此外、仍然可以正确读取器件 ID 和制造商 ID。

    当我尝试查看闪存发生了什么时、我将对此进行更多更新。

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

    您好、

    我还看到了 TB4KBS 从1恢复到0的行为、没有明确更改该位。

    其修复方法是启用 PLPROT 位。

    这将确保保护 TB4KBS 位不受进一步编程的影响。

    因此、我们需要将配置寄存器值从4 (即100b)更新为10100b。 新值10100b 都是十进制20、在这里 PLPROT 和 TB4KBS 都设置为1。

    这应该适用于您的设置、请让我知道具体情况。

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:

    你能先试一下吗?  

    BR、

    Biao   

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

    尊敬的 Vaibhav:

    如果客户想要尝试、他们需要更改以下函数或其他函数中的值? 请再次确认。

    int32_t Flash_quirkSpansionUNHYSADDisable (Flash_Config *配置)

    int32_t 状态= SystemP_Success;

    //首先更改为混合模式、方法是将 UNHYSA 位(位3)从配置寄存器3设置为0。 因此、regData = 0
    状态= Flash_norOspiRegWrite (CONFIG、0x71、0x04、0);

    //现在将 TB4KBSbit 更改为1、因此在 Configuration 寄存器1中将第2位设置为1、regData = 4写入 config reg 1 (0x02)
    //status = Flash_norOspiRegWrite (config、0x71、0x02、4);

    状态= Flash_norOspiRegWrite (CONFIG、0x71、0x02、20);


    uint8_t regData = 0x00;

    状态|= Flash_norOspiRegRead (CONFIG、0x65、0x00800002、&regData);
    DebugP_LOG ("配置寄存器1的值:%u \r\n"、regData);

    regData = 0x00;
    状态|= Flash_norOspiRegRead (CONFIG、0x65、0x00800004、&regData);
    DebugP_LOG ("配置寄存器3的值:%u \r\n"、regData);

    返回状态;
    }

    BR、

    Biao

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

    尊敬的 Biao:

    我已经在我的设置中测试过它、运行正常。

    请注意、由于 PLPROT 设置为1、配置寄存器1的 TB4KBS 没有设回0、因此配置寄存器1的值为20:10100b

    修改如下:

    1. 使用默认 SDK 流程正常引导、然后在应用程序级别引导、在运行应用程序时、按如下方式对 UNHYSA 驱动程序进行更改
      • int32_t Flash_quirkSpansionUNHYSADDisable (Flash_Config *配置)

        int32_t 状态= SystemP_Success;

        //首先更改为混合模式、方法是将 UNHYSA 位(位3)从配置寄存器3设置为0。 因此、regData = 0
        状态= Flash_norOspiRegWrite (CONFIG、0x71、0x04、0);

        //现在将 TB4KBSbit 更改为1、因此在 Configuration 寄存器1中将第2位设置为1、regData = 4写入 config reg 1 (0x02)
        //status = Flash_norOspiRegWrite (config、0x71、0x02、4);

        状态= Flash_norOspiRegWrite (CONFIG、0x71、0x02、20);


        uint8_t regData = 0x00;

        状态|= Flash_norOspiRegRead (CONFIG、0x65、0x00800002、&regData);
        DebugP_LOG ("配置寄存器1的值:%u \r\n"、regData);

        regData = 0x00;
        状态|= Flash_norOspiRegRead (CONFIG、0x65、0x00800004、&regData);
        DebugP_LOG ("配置寄存器3的值:%u \r\n"、regData);

        返回状态;
        }

        [/报价]
    2. 进行更改后、您应该会看到 UNHYSA 为0、TB4KBS 为1、PLPROT 为1。
    3. 现在在其他文件中、您只需确保已启用混合模式。 因此、在所有文件/SBL 阶段1、2中、您可以得到如下定义:
      int32_t Flash_quirkSpansionUNHYSADisable(Flash_Config *config)
      {
          int32_t status = SystemP_SUCCESS;
      
          // Firstly change to hybrid mode, by setting UNHYSA bit(bit 3) from configuration register 3 to 0. So, regData = 0
          status = Flash_norOspiRegWrite(config, 0x71, 0x04, 0);
      
          uint8_t regData = 0x00;
      
          status |= Flash_norOspiRegRead(config, 0x65, 0x00800002, &regData);
          DebugP_log("Value of Configuration Register 1: %u \r\n", regData);
      
          regData = 0x00;
          status |= Flash_norOspiRegRead(config, 0x65, 0x00800004, &regData);
          DebugP_log("Value of Configuration Register 3: %u \r\n", regData);
      
          return status;
      }


    4. 现在、您将遇到的情况是:所有文件都只是从第4点开始进行更改、因此完全不需要触碰 TB$KBS、因为它已在第2步中进行了修改、无需再次触碰。

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:

      我目前正在验证擦除4K 的功能、想确认我的操作步骤是否有任何问题。 我希望尽快收到你的答复。
    第一种方法:ECU 无法正常工作
    按照您提供的方式修改 SDK 中的函数。 修改 SDK ->编译 SDK ->编译 SBL 阶段1、2。

    int32_t Flash_quirkSpansionUNHYSADisable(Flash_Config *config)
    {
    int32_t status = SystemP_SUCCESS;
    
    // Firstly change to hybrid mode, by setting UNHYSA bit(bit 3) from configuration register 3 to 0. So, regData = 0
    status = Flash_norOspiRegWrite(config, 0x71, 0x04, 0);
    
    uint8_t regData = 0x00;
    
    status |= Flash_norOspiRegRead(config, 0x65, 0x00800002, &regData);
    DebugP_log("Value of Configuration Register 1: %u \r\n", regData);
    
    regData = 0x00;
    status |= Flash_norOspiRegRead(config, 0x65, 0x00800004, &regData);
    DebugP_log("Value of Configuration Register 3: %u \r\n", regData);
    
    return status;
    }

    2.按照您提供的方式修改 SDK 中的函数。 修改 SDK ->编译 SDK ->编译应用代码。

    int32_t Flash_quirkSpansionUNHYSADisable(Flash_Config *config)
    {
    int32_t status = SystemP_SUCCESS;
    
    // Firstly change to hybrid mode, by setting UNHYSA bit(bit 3) from configuration register 3 to 0. So, regData = 0
    status = Flash_norOspiRegWrite(config, 0x71, 0x04, 0);
    
    // Now change the TB4KBSbit to 1, so in Configuration register 1 set the 2nd bit to 1, regData = 4 written to config reg 1(0x02)
    //status = Flash_norOspiRegWrite(config, 0x71, 0x02, 4);
    
    status = Flash_norOspiRegWrite(config, 0x71, 0x02, 20);
    
    
    uint8_t regData = 0x00;
    
    status |= Flash_norOspiRegRead(config, 0x65, 0x00800002, &regData);
    DebugP_log("Value of Configuration Register 1: %u \r\n", regData);
    
    regData = 0x00;
    status |= Flash_norOspiRegRead(config, 0x65, 0x00800004, &regData);
    DebugP_log("Value of Configuration Register 3: %u \r\n", regData);
    
    return status;
    }

    3.将修改内容刻录到我的芯片上。 开机后、您可以看到以下打印内容。

    2025年09月05日16:42:15.100]配置寄存器1的值:4
    2025年09月05日16:42:15.100]配置寄存器3的值:0
    [ 2025年09月05日16:42:15.100]
    [SYSFW 2025年09月05日 固件版本9.2.7--v09.02.07 (Kool Koala)
    [SYSFW 16:42:15.100] 2025年09月05日 固件版本0x9
    [SYSFW 2025年09月05日16:42:15.100] SYSFW ABI 修订版3.1
    [ 2025年09月05日16:42:15.100]
    [ 2025年09月05日16:42:15.100]闪存驱动程序 rd test: fefefefefe !!!
    2025年09月05日16:42:15.100]从区域进行闪存引导
    2025年09月05日16:42:15.100]有些测试失败了!!
    2025年09月05日16:42:17.677]配置寄存器1的值:4
    2025年09月05日16:42:17.677]配置寄存器3的值:0
    2025年09月05日16:42:17.709]
    [SYSFW 固件版本9.2.7--v09.02.07 (2025年09月05日16:42:17.709])
    [SYSFW 16:42:17.709] 2025年09月05日 固件版本0x9
    [SYSFW ABI 修订版3.1:42:17.709] 2025年09月05日
    2025年09月05日16:42:17.709]
    2025年09月05日16:42:17.709]闪存驱动程序 rd test: fefefefefefe !!!
    2025年09月05日16:42:17.709]从区域进行闪存引导
    2025年09月05日16:42:17.709]有些测试失败了!!
    2025年09月05日16:42:19.731]配置寄存器1的值:4
    2025年09月05日16:42:19.731]配置寄存器3的值:0
    [ 2025年09月05日16:42:19.731]
    [SYSFW 固件版本9.2.7--v09.02.07 (2025年09月05日16:42:19.731])
    [SYSFW 16:42:19.731] 2025年09月05日 固件版本0x9
    [SYSFW 2025年09月05日16:42:19.731] SYSFW ABI 修订版3.1
    [ 2025年09月05日16:42:19.731]
    [ 2025年09月05日16:42:19.731]闪存驱动程序 rd test: fefefefefefe !!!
    2025年09月05日16:42:19.731]从某个区域进行闪存引导
    2025年09月05日16:42:19.731]有些测试失败了!!
    2025年09月05日16:42:21.792]配置寄存器1的值:4
    2025年09月05日16:42:21.792]配置寄存器3的值:0
    [ 2025年09月05日16:42:21.792]
    [SYSFW 2025年09月05日 固件版本9.2.7--v09.02.07 (Kool Koala)
    [SYSFW 16:42:21.792] 2025年09月05日 固件版本0x9.
    [SYSFW 2025年09月05日16:42:21.792] SYSFW ABI 修订版3.1
    [ 2025年09月05日16:42:21.792]
    2025年09月05日16:42:21.792]闪存驱动程序 rd test: fefefefefefe !!!
    2025年09月05日16:42:21.792]从一个区域进行闪存引导
    2025年09月05日16:42:21.792]一些测试失败了!!

    第二种方法:寄存器值与配置不同。  
      1、仅修改 SDK 中的函数 Flash_quirkSpansionUNHYSADisable。


    int32_t Flash_quirkSpansionUNHYSADisable(Flash_Config *config)
    {
    int32_t status = SystemP_SUCCESS;
    
    // Firstly change to hybrid mode, by setting UNHYSA bit(bit 3) from configuration register 3 to 0. So, regData = 0
    status = Flash_norOspiRegWrite(config, 0x71, 0x04, 0);
    
    // Now change the TB4KBSbit to 1, so in Configuration register 1 set the 2nd bit to 1, regData = 4 written to config reg 1(0x02)
    //status = Flash_norOspiRegWrite(config, 0x71, 0x02, 4);
    
    status = Flash_norOspiRegWrite(config, 0x71, 0x02, 20);
    
    
    uint8_t regData = 0x00;
    
    status |= Flash_norOspiRegRead(config, 0x65, 0x00800002, &regData);
    DebugP_log("Value of Configuration Register 1: %u \r\n", regData);
    
    regData = 0x00;
    status |= Flash_norOspiRegRead(config, 0x65, 0x00800004, &regData);
    DebugP_log("Value of Configuration Register 3: %u \r\n", regData);
    
    return status;
    }

    1. 运行步骤:修改 SDK ->编译 SDK ->编译 SBL ->编译我们的应用程序代码。 寄存器值与配置不同。 按以下方式打印:


    [Configuration 2025年09月05日17:21:56.128] root@am62axx-EVM:/run/media/boot-mmcblk1p1/124/MCU Configuration Register 1:4的值
    2025年09月05日17:22:00.474]配置寄存器3的值:0
    [ 2025年09月05日17:22:00.474]
    [SYSFW 2025年09月05日 固件版本9.2.7--v09.02.07 (Kool Koala)
    [SYSFW 17:22:00.474] 2025年09月05日 固件版本0x9
    [SYSFW ABI 修订版3.1:22:00.474] 2025年09月05日17:22:00.474]
    [ 2025年09月05日17:22:00.474]
    [FFFFFFFF 17:22:00.474]闪存驱动程序 rd test: 2025年09月05日!!!
    2025年09月05日17:22:00.474]从某个区域进行闪存引导
    [bootloader_profile] 2025年09月05日[bootloader_profile]引导介质:闪存
    [bootloader_profile] 2025年09月05日[bootloader_profile]引导介质时钟:200.000 MHz
    2025年09月05日17:22:00.474][bootloader_profile]引导映像大小:138KB
    [bootloader_profile] 2025年09月05日[bootloader_profile]存在的磁芯数:
    2025年09月05日17:22:00.474] r5f0-0
    [ 2025年09月05日17:22:00.474][引导加载程序配置文件] System_init : 23864us
    [bootloader 2025年09月05日 profile][bootloader profile] Board_init:0us
    [ 2025年09月05日17:22:00.474][引导加载程序配置文件] Drivers_open : 192us
    [ 2025年09月05日17:22:00.474][引导加载程序配置文件] Board_drivers 打开: 69896us
    [ 2025年09月05日17:22:00.474][引导加载程序配置文件] Sciclient 获取版本: 10164us
    [ 2025年09月05日17:22:00.474][引导加载程序配置文件] App_waitForMcuPbist : 5489us
    [ 2025年09月05日17:22:00.474][引导加载程序配置文件] App_loadSelfcoreImage_a : 4592us
    2025年09月05日17:22:00.474][bootloader_profile] SBL 总用时:114201us
    [ 2025年09月05日17:22:00.474]
    2025年09月05日17:22:00.474]图像加载完成,切换到应用程序...
    2025年09月05日17:22:00.474]启动 mcu-R5f 和第二阶段引导加载程序
    2025年09月05日17:22:00.522]配置寄存器1的值:4
    2025年09月05日17:22:00.558]配置寄存器3的值:0
    [ 2025年09月05日17:22:00.558]
    [SYSFW 2025年09月05日 固件版本9.2.7--v09.02.07 (Kool Koala)
    [SYSFW 17:22:00.558] 2025年09月05日 固件版本0x9
    [SYSFW ABI 修订版3.1:2025年09月05日17:22:00.558]
    [ 2025年09月05日17:22:00.558]
    [Bootloader_parseMultiCoreAppImage 0 2025年09月05日17:22:00.558]重试0
    [bootloader_profile][ 2025年09月05日17:22:00.677]引导介质:闪存
    [bootloader_profile][ 2025年09月05日17:22:00.677]引导介质时钟:200.000 MHz
    2025年09月05日17:22:00.677][bootloader_profile]引导映像大小:1552 KB
    [bootloader_profile] 2025年09月05日[bootloader_profile]当前的核心:

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

    您好、

    我将对第二种方法进行更多评论。

    因此、在不同 SBL 文件(使用我们正在修改的 API 的默认 SDK 定义正常编译所有文件)之间不进行任何更改、只需对应用程序代码进行以下更改(重新编译应用程序代码、确保更改仅对应用程序有效)。

    int32_t Flash_quirkSpansionUNHYSADisable(Flash_Config *config)
    {
    int32_t status = SystemP_SUCCESS;
    
    // Firstly change to hybrid mode, by setting UNHYSA bit(bit 3) from configuration register 3 to 0. So, regData = 0
    status = Flash_norOspiRegWrite(config, 0x71, 0x04, 0);
    
    // Now change the TB4KBSbit to 1, so in Configuration register 1 set the 2nd bit to 1, regData = 4 written to config reg 1(0x02)
    //status = Flash_norOspiRegWrite(config, 0x71, 0x02, 4);
    
    status = Flash_norOspiRegWrite(config, 0x71, 0x02, 20);
    
    
    uint8_t regData = 0x00;
    
    status |= Flash_norOspiRegRead(config, 0x65, 0x00800002, &regData);
    DebugP_log("Value of Configuration Register 1: %u \r\n", regData);
    
    regData = 0x00;
    status |= Flash_norOspiRegRead(config, 0x65, 0x00800004, &regData);
    DebugP_log("Value of Configuration Register 3: %u \r\n", regData);
    
    return status;
    }

    您应该能够仅在应用级别本身看到配置寄存器1和3的值分别为20和0。

    看到这一点后、请告诉我。

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:

    我已根据您的方法再次进行了验证。  未成功写入寄存器值、这是通过打印进行检查的结果。

    1.使用 SDK 中的默认 API 定义编译 SBL。

    int32_t Flash_quirkSpansionUNHYSADisable(Flash_Config *config)
    {
        int32_t status = SystemP_SUCCESS;
        uint8_t regData = 0x00;
        uint32_t write = 0;
    
        /* Hybrid Sector Disable */
        status = Flash_norOspiRegRead(config, 0x65, 0x00800004, &regData);
    
        if(status == SystemP_SUCCESS)
        {
            if((regData & ((uint8_t)(1 << 3))) == 0)
            {
                /* Set UNHYSA bit */
                regData |= (1 << 3);
                write = 1U;
            }
            else
            {
                /* No action */
            }
        }
    
        if(write)
        {
            status = Flash_norOspiRegWrite(config, 0x71, 0x04, regData);
        }
    
        return status;
    }


    2.修改 SDK、编译 SDK、然后编译应用程序代码。
    int32_t Flash_quirkSpansionUNHYSADisable(Flash_Config *config)
    {
        int32_t status = SystemP_SUCCESS;
        uint8_t regData = 0x00;
    
        
        // Firstly change to hybrid mode, by setting UNHYSA bit(bit 3) from configuration register 3 to 0. So, regData = 0
        status = Flash_norOspiRegWrite(config, 0x71, 0x04, 0);
        DebugP_log("Register_3_0x71_0x04_0_write_res: %d \r\n", status);
    
    
        status = Flash_norOspiRegWrite(config, 0x71, 0x02, 20);
        DebugP_log("Register_1_0x71_0x02_20write_res: %d \r\n", status);
    
        status |= Flash_norOspiRegRead(config, 0x65, 0x00800002, &regData);
        DebugP_log("Value of Configuration Register 1: %u \r\n", regData);
    
        status |= Flash_norOspiRegRead(config, 0x65, 0x00800004, &regData);
        DebugP_log("Value of Configuration Register 3: %u \r\n", regData);
    
        return status;
    }

    3. 打印如下:

    应用程序打印:

    此致

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

    您好、

    请安排一个调用来调试此问题、因为这不符合预期。 寄存器值应该已更改为20、我看到它保持在4。

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:

    我与 Cypress 团队和 DesaySV 团队就该问题进行了多次联机会议讨论、Cypress 团队不建议我们更改  PLPROT (电子保险丝位)、因为此位为 N -> R/1类型、这意味着一旦将该位设置为1、就无法清除。  LBPROT[2:0]、SP4KBS、TBPROT 和 TB4KBS 位无法再更改。 在客户测试中、一旦 将 PLPROT 设置为1、也无法访问闪存。  

    关于4K 擦除问题、我认为我们找到了根本原因、以前客户只更改了 UNHYSA 位(位3)、因为 TB4KBSbit 已经是来自寄存器读取的1、因此他们不会再次更改它、但是 在测试中、客户需要在将模式从统一模式更改为混合模式后再次将 TB4KBS 设置为1 、完成此操作后、4K 擦除功能将正常运行。  

    BR、

    Biao