N32G43x Flash 驱动移植与封装实践
在嵌入式 Bootloader 和固件升级中,Flash 的读写擦操作是必不可少的底层能力。本文基于 N32G43x MCU,实现了一个跨平台的 Flash 驱动封装,并总结了移植过程中的关键点和注意事项。
一、设计目标
移植的 Flash 驱动主要目标如下:
-
跨平台封装
通过统一的 API (remo_flash_xxx
),让上层应用代码不需要关心底层硬件差异。 -
提供常见的 Flash 操作
-
读操作:读取 Flash 存储数据。
-
写操作:写入半字(2 字节)和字(4 字节)。
-
擦除操作:包括擦除单个扇区和整个 Flash 芯片。
-
-
增强的可靠性
-
地址合法性检查,确保 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_