打印
[应用相关]

【开源活动】-基于国民N32G45x的SD卡IAP升级开发

[复制链接]
68|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xdvca|  楼主 | 2025-5-30 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本项目实现了基于国民技术 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 状态变化、串口输出

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

451

帖子

0

粉丝