Skip to content

EasyFlash 在 CH32V203 上因 Flash 擦除态不是 0xFF 导致 ENV 无法正常工作 #178

Description

@Dailingxiang1

您好,感谢您维护 EasyFlash 这个项目。

我在将 EasyFlash(ENV 功能)移植到沁恒 CH32V203 MCU 时,
遇到了一个与 Flash 擦除行为相关的问题,想向您确认 EasyFlash 的设计假设和支持边界。

在 CH32V203 的片内 Flash 上,根据实际测试结果:

  • Flash 擦除后(无论是标准擦除还是快速擦除),
  • 读出的数据并不是 0xFF / 0xFFFFFFFF,
  • 而是固定的模式值(例如字读为 0xE339E339)。

在 EasyFlash 源码中(如 ef_env.c 的 continue_ff_addr 函数),
ENV 扫描空闲区域时是通过判断连续的 0xFF 来确定 Flash 的“空区”位置:

if (buf[i] == 0xFF) { ... }

由于 CH32V203 擦除后的 Flash 内容并不等于 0xFF,
导致 EasyFlash 在该 MCU 上无法正确识别空闲区域,
从而 ENV 保存和读取逻辑无法正常工作。

我理解 EasyFlash 是基于“标准 NOR Flash 擦除后为全 1(0xFF)”这一假设来设计的,
而 CH32V203 的 Flash 擦除行为并不完全符合这一模型。

因此想请教两个问题:

  1. EasyFlash 是否明确只支持擦除后为 0xFF 的标准 NOR Flash?
  2. 对于像 CH32V203 这种擦除态为固定 pattern(非 0xFF)的 Flash,
    是否被认为是不支持的使用场景,还是有推荐的适配方式?

以上只是对设计假设的确认,并非抱怨或指责。
如果 EasyFlash 当前不打算支持这类 Flash 行为,
也建议在文档中明确说明这一限制,方便后来使用者避免踩坑。

再次感谢您的开源贡献,期待您的回复。

下面是取自CH32参考手册的图片:

Image

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions