【开源活动】-基于国民N32G45x的SD卡IAP升级开发
本项目实现了基于国民技术 N32G45x 系列 MCU 的 SD 卡 IAP 升级功能,支持以下两种方式:插入 SD 卡后自动检测并升级
通过按键手动触发升级
升级过程通过 LED 灯闪烁状态 和 串口打印日志 来反馈当前升级进度与结果。
三、系统原理与流程图
1. 系统原理图(可配图说明):
主控芯片:N32G45x 系列
外设:
SD 卡模块(SPI 模式)
串口(用于日志输出)
LED 灯(升级状态指示)
用户按键(手动升级触发)
2. 升级流程图:
arduino
复制
编辑
上电/复位
↓
检测SD卡是否存在
↓
是否存在升级文件 FW.BIN?
↓ ↓
否 是
↓ ↓
正常运行 检查文件校验和
↓
校验成功?
↓ ↓
否 是
↓ ↓
升级失败 擦除APP区
↓
写入新固件
↓
校验写入数据
↓
写入成功?
↓ ↓
否 是
↓ ↓
升级失败 设置标志位跳转APP
四、测试环境
项目 参数/型号
MCU 国民技术 N32G45x 系列
开发板 官方N32G45x开发板
SD 卡模块 SPI 接口模块
SD 卡格式 FAT32
串口调试工具 USB转TTL,串口助手
软件环境 Keil MDK / IAR / VSCode + GCC
烧录工具 J-Link / DAP-Link
五、操作流程
使用 Keil 编译出主程序(BootLoader 和 App 分开)
将生成的 FW.BIN 固件文件拷贝至 SD 卡根目录
插入 SD 卡到开发板
上电后 MCU 自动检测是否需要升级
升级成功后跳转到新的应用程序运行
用户也可以通过按键手动触发升级
六、关键代码讲解(BootLoader 部分)
1. SD 卡初始化(使用 SPI)
c
复制
编辑
FRESULT res;
res = f_mount(&fs, "", 1);
if (res != FR_OK) {
printf("SD 卡挂载失败\n");
}
2. 固件读取并写入 Flash
c
复制
编辑
UINT br;
f_open(&file, "FW.BIN", FA_READ);
while (f_read(&file, buffer, 1024, &br) == FR_OK && br > 0) {
Flash_Write(destAddr, buffer, br);
destAddr += br;
}
f_close(&file);
3. Flash 擦除 + 校验逻辑
c
复制
编辑
FLASH_Unlock();
FLASH_ErasePage(APP_START_ADDR);
// 写入过程...
if (memcmp(app_addr, fw_bin_data, length) == 0) {
printf("校验成功\n");
}
4. 跳转至 APP
c
复制
编辑
typedef void (*pFunction)(void);
pFunction JumpToApplication;
JumpToApplication = (pFunction) *(__IO uint32_t*)(APP_START_ADDR + 4);
__set_MSP(*(__IO uint32_t*) APP_START_ADDR);
JumpToApplication();
七、应用场景
物联网设备 OTA 升级
工业控制现场维护
教育类项目演示
消费类产品如玩具、MP3 的固件升级
八、项目目录结构
arduino
复制
编辑
N32_SD_IAP/
├── Bootloader/
│ └── main.c
├── Application/
│ └── app_main.c
├── SD_FW/
│ └── FW.BIN(放到 SD 卡中)
├── Docs/
│ ├── 项目说明文档.pdf
│ └── 测试报告.docx
├── 视频演示.mp4
九、提交资料建议
**代码:**上传 Bootloader 与 Application 两部分源码
**文档:**PDF 格式,含原理、流程图、测试过程与效果
**视频:**简短演示 SD 卡插入、升级过程、LED 状态变化、串口输出
嘿嘿文本格式的流程图。真是有创意啊 插入SD卡自动检测有无新版本固件,如果有可以自动升级或者提示用户选择升级。 基于国民N32G45x的SD卡IAP升级系统开发,一般需要完成BootLoader与APP分区、SD卡驱动与文件系统移植、触发升级机制设计以及固件校验与跳转等关键步骤 确定系统需实现的功能,如插入储存固件的SD卡后,支持自动或手动完成固件升级,并通过LED灯或串口打印反馈升级结果。 准备好国民N32G45x开发板、SD卡模块、SD卡以及相应的开发软件(如Keil等)。同时,获取国民技术提供的库文件和相关资料,以便参考和调用。 划分BootLoader和APP在MCU内部闪存(FLASH)中的地址范围。例如,BootLoader地址可设为0x08000000~0x08007FFF,APP起始地址设为0x08008000。 BootLoader程序负责检测SD卡、读取固件文件、校验固件、擦除Flash、写入新固件以及跳转到APP等操作;APP程序则是实际的应用程序 根据所使用的SD卡模块接口(如SPI接口或SDIO接口),编写相应的驱动代码。例如,若使用SPI接口的SD卡模块,需初始化MCU的SPI外设,配置好相关引脚,并实现SD卡的读写操作。 移植常用的FATFS文件系统,以便对SD卡内的文件进行操作。通过文件系统,可以更方便地打开、读取和写入固件文件。 系统启动后,BootLoader程序首先检测SD卡是否插入。若插入,则检查SD卡根目录下是否存在指定的固件文件(如“FW.BIN”)。 对读取到的固件文件进行校验,以确保固件的完整性和正确性。可采用校验和、CRC校验等方法。 若固件校验通过,BootLoader程序先擦除APP程序所在的Flash区域,然后将新固件写入到该区域。写入过程中需注意数据的正确性和完整性,可分页或分块进行写入。
页:
[1]