ST意法半导体
直播中

efwedfd

9年用户 1144经验值
擅长:EMC/EMI设计
私信 关注
[问答]

STM32H750内部flash读写的疑问求解

请教下,STM32H750XBHx我看资料内置flash为128K,并且flash擦除的最小单元也是128K。这样的话我有数据要保存应该怎样处理好呢?写数据时是要将程序部分一起擦除再写回去吗?这样会不会有风险?

回帖(2)

王璐

2025-3-12 10:55:14
既然你都知道H750内部FLASH就一个整块扇区,想着对它在程序运行中进行内容改写


不太可行、或者说很不方便。因为写了一次再去写第二次意味着要对整个扇区先做擦除。


现有程序这么办嗯?或许可以考虑放在别的地方,即使可行,也不方便。


你可以考虑外扩存储芯片或者换个多扇区的H7系列芯片。 [/td]

[td]我看手册说有个2K的用户配置,这个是不是可以用来存储数据?
2 KB(64 个 Flash 字)的用户选项字节,用于进行用户配置:此区域仅在存储区 1 中可用。与用户 Flash 和系统 Flash 不同,该区域并未映射到任何存储器地址,并且仅可通过 Flash 寄存器接口进行访问
举报

爱与友人

2025-3-13 17:13:20

在STM32H750XBHx微控制器中,内置Flash的大小为128KB,并且Flash的擦除最小单元也是128KB。这意味着每次擦除操作都会清除整个128KB的Flash块。对于需要保存数据的情况,确实需要考虑如何有效地管理Flash的读写操作,以避免不必要的擦除和写入操作,从而减少风险。


以下是一些处理建议:


1. 使用外部存储器



  • 外部Flash或EEPROM:如果数据量较大或需要频繁写入,建议使用外部Flash或EEPROM来存储数据。这样可以避免对内部Flash的频繁擦写,延长内部Flash的寿命。

  • 外部SRAM:如果需要快速读写且数据不需要长期保存,可以使用外部SRAM。


2. 内部Flash数据管理



  • 数据分区:将Flash分为程序区和数据区。程序区用于存储固件代码,数据区用于存储需要保存的数据。由于擦除单元为128KB,可以将整个128KB作为数据区,或者将程序区和数据区分别放在不同的128KB块中。

  • 写操作优化:在写入数据时,尽量避免频繁擦除整个128KB块。可以使用以下策略:

    • 写前检查:在写入数据之前,先检查Flash中的内容是否已经为空(0xFF),如果是,则可以直接写入,无需擦除。

    • 增量写入:将数据分多次写入,每次写入前检查Flash是否为空,避免频繁擦除。


  • 数据备份:在擦除和写入数据之前,先将Flash中的数据备份到RAM中,擦除后再将数据写回Flash。这样可以避免数据丢失。


3. 擦除和写入的风险



  • 程序中断风险:在擦除和写入Flash时,如果程序被中断(如电源掉电、复位等),可能会导致数据损坏或程序崩溃。因此,建议在擦除和写入操作时,确保系统稳定性,并尽可能减少中断发生的可能性。

  • 写保护:在写入数据时,可以考虑启用写保护功能,以防止意外写入或擦除。


4. 使用文件系统



  • 小型文件系统:如果数据量较大且需要频繁更新,可以考虑使用小型文件系统(如LittleFS、SPIFFS等)来管理Flash中的数据。这些文件系统可以优化Flash的擦写操作,减少擦除次数。


5. 固件更新



  • OTA更新:如果应用程序支持OTA(Over-The-Air)更新,可以将新固件写入另一个Flash块中,更新完成后再切换到新固件。这样可以避免在更新过程中擦除当前运行的固件。


总结


在STM32H750XBHx中,由于Flash的擦除单元较大,建议合理规划Flash的使用,尽量避免频繁擦除和写入操作。如果数据量较大或需要频繁更新,建议使用外部存储器或文件系统来管理数据。在写入数据时,确保系统的稳定性,并采取适当的备份和写保护措施,以降低风险。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分