【问题标题】:Why are flash sectors of ROM smaller at the starting address?为什么ROM的闪存扇区在起始地址处较小?
【发布时间】:2019-12-14 12:37:36
【问题描述】:

最近一直在使用闪存 ROM,我发现无论是在芯片的内部闪存中还是在外部 SPI 闪存设备中,扇区的大小通常都是这样的:

我很好奇为什么起始地址空间的扇区比后面的地址小。我怀疑使用引导加载程序之类的东西会更方便。由于引导加载程序通常小于 128k,这将允许引导加载程序写入前 2 或 3 个扇区。这使主要的空间应用程序有更多的扩展空间,因为要对其进行编程,我们需要从一个新领域的开始。如果我们只有 128k 大小的扇区,那么我们基本上会在空间中浪费 128k - bootloader_size

我的怀疑正确吗?或者这样做有其他原因吗?真的很想知道这里的设计决策是什么。

【问题讨论】:

  • @drescherjm 刚刚发现那些开发人员也很有可能遇到这种情况。如果您认为不合适,我会删除标签
  • 这对electronics.stackexchange.com来说可能是一个更好的问题
  • 绝对介于两者之间。如果我一天内什么都得不到,我会在那里发帖!
  • 顺便说一句,我强烈建议删除 C++ 和 C 标记,因为您的问题与这些语言无关。
  • @ThomasMatthews 已删除,现在可能不得不在电子 SE 中发布此内容,因为这里没有流量,哈哈

标签: embedded bootloader firmware flash-memory rom


【解决方案1】:

因为并非所有 STM32F40x/41x 器件都具有此表中描述的完整 1 MB 闪存。有些,如STM32F410C8,只有 64 KB,也就是说,只有前四个 16 KB 扇区。在内存开始时减少扇区大小允许这些设备仍然有多个扇区可供使用,而不会导致较大设备上的扇区数量过多。它还在所有设备上为EEPROM emulation 等应用程序提供了一些小扇区,这需要分配两个不同的闪存扇区供其专用。

【讨论】:

  • 您的回答很好地指出了 为什么 较小的扇区在 ROM 很少的设备上很重要。但它没有提到为什么较大的设备在开始时仍然具有小扇区。因为 STM32F410C8 属于同一个 F4 家族,有没有某种扇区布局结构是这个家族的所有孩子都必须遵守的?我还不明白为什么你所说的 STM32F410C8 芯片是相关的
  • "是否有某种扇形布局结构是家里所有孩子都必须遵守的?"您的问题中的表格 的结构——较小的设备只是从最后离开扇区。设备系列的全部意义在于尽量减少其中设备之间的差异——更改某些设备中的闪存布局将相当于拆分系列。
  • “设备系列的全部意义在于尽量减少其中设备之间的差异——改变某些设备中的闪存布局将等于分裂系列”这对我来说是缺失的。我现在明白了,谢谢。我觉得这是实际的答案,我的观察只是一个很好的便利。
【解决方案2】:

通常,引导加载程序代码执行:
1. 处理器初始化。
2. 跳转到应用代码。

引导加载程序代码通常比应用程序代码小很多。小段允许更快地对 Flash 进行编程,因为许多 Flash 具有可以擦除和编程的最小扇区大小。段大小越小,擦除和重新编程的速度就越快。

一些 Flash 制造商将 Bootloader 段放置在低端或高端(或允许您随意设置)。

【讨论】:

    猜你喜欢
    • 2016-03-10
    • 2012-10-07
    • 2019-11-15
    • 2022-01-03
    • 2021-02-12
    • 2012-09-20
    • 2021-06-06
    • 1970-01-01
    • 2020-07-17
    相关资源
    最近更新 更多