Skip to content

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

@Dailingxiang1

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

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