工具/软件:
您好、
器件时、会遇到一些问题 S25HL512T 或 S28HS512T 将会遇到统一模式与混合模式。
本常见问题解答涵盖的要点如下:
- 什么是闪存的统一模式与混合模式。
- MCU 和 SDK AM6xx 闪存驱动程序以哪种模式工作。
- 如何从一种模式切换到另一种模式。
注意:此常见问题解答适用于 AM64x、AM62x、AM243x、AM62Dx
此致、
Vaibhav
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.
工具/软件:
您好、
器件时、会遇到一些问题 S25HL512T 或 S28HS512T 将会遇到统一模式与混合模式。
本常见问题解答涵盖的要点如下:
注意:此常见问题解答适用于 AM64x、AM62x、AM243x、AM62Dx
此致、
Vaibhav
Unknown 说:什么是闪存的统一模式与混合模式。
可在两种模式/配置中设置闪存器件。
在提到的两个闪烁的背景下、这些配置 为混合模式和统一模式。
请注意、写入和读取操作与上述两种配置无关。
但区别在于擦除的工作方式。
在统一模式下:
在混合模式下:
统一模式的一种组合是:
混合模式的所有可能组合为:
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
下面是一个可以启用的代码片段:
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, ®Data); 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, ®Data); /* Set TB4KBS Bit */ regData |= (1 << 2); status = Flash_norOspiRegWrite(config, 0x71, 0x02, regData); return status; }