深入解析:N32G43x Flash 驱动移植与封装实践

在嵌入式 Bootloader 和固件升级中,Flash 的读写擦操作是必不可少的底层能力。本文基于 N32G43x MCU,实现了一个跨平台的 Flash 驱动封装,并总结了移植过程中的关键点和注意事项。

一、设计目标

移植的 Flash 驱动主要目标如下:

  1. 跨平台封装
    通过统一的 API (remo_flash_xxx),让上层应用代码不需要关心底层硬件差异。

  2. 提供常见的 Flash 操作

    • 读操作:读取 Flash 存储数据。

    • 写操作:写入半字(2 字节)和字(4 字节)。

    • 擦除操作:包括擦除单个扇区和整个 Flash 芯片。

  3. 增强的可靠性

    • 地址合法性检查,确保 Flash 操作在有效范围内。

    • 考虑到中断和非对齐写入等问题,确保操作的正确性和稳定性。

二、接口设计

对上层的统一接口,Flash 驱动提供了统一的 API,包含了读取、写入、擦除等常见操作:

// 读数据
AW_S32 remo_flash_read_bytes(AW_U32 address, AW_U32 length, AW_U8 *buf);
// 半字写入(2 Byte 对齐)
AW_S32 remo_flash_write_halfwords(AW_U32 address, AW_U32 length, AW_U16 *buf);
// 字写入(4 Byte 对齐)
AW_S32 remo_flash_write_words(AW_U32 address, AW_U32 length, AW_U32 *buf);
// 擦除扇区
AW_S32 remo_flash_erase_sector(AW_U32 sector);
// 地址 -> 扇区映射
AW_U32 remo_flash_get_sector(AW_U32 address, AW_U32* left_size);
// 整片擦除
AW_S32 remo_flash_erase_chip();

这些接口对上层应用提供了一致的使用方式,而底层具体的实现由 remo_flash_plat.c 完成。

底层平台相关接口

AW_S32 remo_flash_read_bytes_plat(AW_
posted on 2025-09-19 18:41  ljbguanli  阅读(15)  评论(0)    收藏  举报