IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> [嵌入式方案][cx32l003] 一个健壮的BootLoader系统 -> 正文阅读

[嵌入式][嵌入式方案][cx32l003] 一个健壮的BootLoader系统

特点描述
DFU采用可靠的升级协议,文件crc16校验。串口模式。波特率115200,升级30kb文件约5秒
掉电保护备份升级时,遇到掉电重启的情况,会自动重新从BACK区搬运APP
防导出,防被盗boot上电启动会将SWO口禁用,防止他人导出程序。(在boot模式下,通过AT命令可以解锁,APP区域数据会擦除)
带备份升级会根据app大小自动计算自身空间剩余,如果APP小于剩余空间的一半,则采用备用升级方式。反之直接覆盖APP区域。
带简易KV键值系统存在数据到FLASH中,可以避免反复擦写降低寿命

文件大小:RAM 1.79KB ROM 9,96KB

协议流程:

  1. PC发送"bootloader",如果在APP区,则跳到boot。如果在boot中,则MCU应答UP^OK。(PC重发机制,直到收到应答)

  2. PC发送文件信息 “UP^FILE_INFO=文件CRC值(2字节),文件大小”,MCU应答
    UP^OK,串口缓存区大小

  3. PC通过MCU返回的串口缓存区大小,进行封包,例如返回256,则"UP^DATA=[240字节]"
    注:256-协议头尾16个字节

  4. 发送DFU文件检验,“UP^CHECK_FILE=1”,MCU会根据收到的文件进行CRC16计算,如果校验值于PC下发的一致,则应答
    “UP^OK”,(如果是备份升级,则开始搬运数据)
    反之"UP^FAIL"。

PC上位机

在这里插入图片描述

/*
 * main: initialize and start the system
 */
int main(void)
{
    bool dfu_mode = false;
    uint8_t *p;
    hardware_init();
    kv_gc_check();
    p = kv_get_env(BS_KV_KEY_BOOT_INFO);
    if (p != NULL)
    {
        memcpy((uint8_t *)&g_boot_info, p, sizeof(boot_info_t));
    }
    else
    {
        memset(&g_boot_info, 0, sizeof(boot_info_t));
    }
    chip_lock_check(g_boot_info.chip_lock);
    if (bsp_gpio_get_state(BOARD_BUTTON_SYS_PORT, BOARD_BUTTON_SYS_PIN) == BOARD_BUTTON_SYS_PRESS_LEVEL)
    {
boot:
        g_boot_info.boot_state = BOOT_STATE_IN_DFU;
        dfu_main();
    }
    else
    {
        if (g_boot_info.boot_carry_size == 0xFFFFFFFF)
        {
            g_boot_info.boot_carry_size = 0;
        }
        if (g_boot_info.boot_state == 0xFF)
        {
            g_boot_info.boot_state = BOOT_STATE_RUN_APP;
        }
        if (g_boot_info.boot_state == BOOT_STATE_MOVE_OTA_IN_APP)
        {
            // 搬运文件大小异常
            if (g_boot_info.boot_carry_size > BS_FLASH_APP_SIZE / 2)
            {
                dfu_mode = true;
                goto boot;
            }
            bool state = false;
            state = bsp_flash_carry(BS_FLASH_APP_ADDR, BS_FLASH_OTA_ADDR, g_boot_info.boot_carry_size);
            if (state == true)
            {
                sys_jump_app();
            }
        }
        else if (g_boot_info.boot_state == BOOT_STATE_IN_DFU)
        {
            dfu_mode = true;
        }

        g_boot_info.boot_run_tick++;

        if (dfu_mode)
        {
            goto boot;
        }

        goto_app();
        goto boot;
    }
    while(1);
}
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-15 16:02:04  更:2021-11-15 16:04:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:20:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码