特点 描述
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);
}

https://download.csdn.net/download/qq_29246181/86405238

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

  1. 设计一个健壮的大型文件下载系统

    转至简书作者:http://mp.weixin.qq.com/s?__biz=MzAxMzE2Mjc2Ng==&mid=2652156080&idx=1&sn=1dce4290 ...

  2. 微信小程序并发服务器架构,「系统架构」如何设计一个健壮高效的微信小程序登录方案...

    登录涉及的面比较多:触发场景上,各种页面各种交互路径都可能触发登录:交互过程上,既需要用户提供/证明id,也需要后端记录维护,还需要保证安全性:复用场景上,既是通用功能,需要多场景多页面甚至多小程序复 ...

  3. 工控设备 如何将数据发送到串口_嵌入式无风扇工控机在水质监测系统中的应用...

    行业背景: 随着城市人口的增加和工农业生产的发展,污水排放量也日益增加,水体污染相当严重,大量生活污水和生产废水对生态环境造成破坏,在未来很长一段时间内保护生态环境治理水污染仍是我国实现经济社会可持续 ...

  4. 【联合方案】神州信息 - 新一代分布式网贷系统

    作者:xuecy 原文来源: https://tidb.net/blog/59ded91b 近年来互联网银行.P2P 平台如雨后春笋般地涌现,随着其规模不断扩大,已经开始威胁到商业银行传统个人信贷业务 ...

  5. 【原创】黑夜路人:如何构建更健壮的在线系统

    [原创]如何构建更健壮的在线系统 作者: 黑夜路人(heiyeluren) 时间:2020年11月 说明:本文主要面对PHP为主要开发语言的业务系统,Golang.Java等语言可以学习参考. 0.  ...

  6. [原创] Easy SysLite V1.2 (2016.5.29更新,新增加WIN10支持,一个程序适配所有系统减肥)...

    [原创] Easy SysLite V1.2 (2016.5.29更新,新增加WIN10支持,一个程序适配所有系统减肥) nohacks 发表于 2016-5-29 17:12:51 https:// ...

  7. 嵌入式基础篇 - 第2章 Systick系统定时器

    2.1 STM32 的时钟系统 STM32 芯片为了实现低功耗,设计了一个功能完善但却非常复杂的时钟系统.普通的MCU 一般只要配置好 GPIO 的寄存器就可以使用了,但 STM32 还有一个步骤,就 ...

  8. 搭建一个redis高可用系统

    一.单个实例 当系统中只有一台redis运行时,一旦该redis挂了,会导致整个系统无法运行. 单个实例 二.备份 由于单台redis出现单点故障,就会导致整个系统不可用,所以想到的办法自然就是备份( ...

  9. 理论 | 优雅的构建一个健壮的API接口

    小小工作繁忙,不过还好,这次学习的内容是接口幂等性相关的内容, 幂等性 这里使用的是幂等性相关的内容进行学习.针对幂等性实现构建一个健壮的API接口的第一步,即,幂等性的构建 定义 小小对接口的幂等性 ...

  10. 一个典型的语音识别系统

    一.语音识别技术 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空)     语音识别技术,广泛来说是指语意识别和声纹识别:从狭义上来说指语音语义的理 ...

最新文章

  1. 项目管理深入理解08--成本管理
  2. mac电脑Git提交代码到Github提示git-credential-osxkeychain 验证解决方案
  3. boost::geometry::sectionalize用法的测试程序
  4. python读txt文件报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode
  5. 对软件工程这门课的期望
  6. cant find python executable_gyp ERR! stack Error: Can't find Python executable 'python'
  7. linux 开机自动运行命令_Linux内核分析-启动顺序、运行级别及开机启动(七)
  8. coreldraw的线条怎么变成圆头_CDR将照片变线条的三种方法
  9. 微信授权文件放到域名根目录下
  10. 四、vue 项目使用高德地图画面(多边形)
  11. 有理样条曲线学习笔记(一)
  12. 用python实现成绩录入
  13. 看完李宏毅的视频我决定学好英语了
  14. 阅读 《图解密码技术 第三版》的归纳和总结
  15. C# 实现WinForm窗口最小化到系统托盘代码
  16. 使用python操作excel的xls文件和xlsx文件之间的批量导出和填充数据
  17. 6.openCV调整图像大小新思路(cv2.resize和imutils.resize)
  18. 钉钉自定义机器人无法指定正向代理问题解决
  19. 《Verilog数字系统设计教程》夏宇闻 第四版思考题答案(第3章)
  20. java字符串转义反转义,把lt; gt;转换成大于小于字符

热门文章

  1. mysql表设计ppt_PPT表格太丑?这3个设计细节,你一定要收藏!
  2. 2000级2班同学聚会邀请函
  3. 希腊自助游 - 米岛圣岛,迷失在蓝白之间
  4. 圣诞老人python代码_用Python画圣诞老人的N种方法
  5. word 目录格式的设置
  6. phpstudy mysql局域网访问_phpstudy 局域网访问
  7. 选择排序为什么是不稳定的?
  8. 微信表情包 php,教你用PS给你的室友做一套动态微信豪华表情包
  9. 戴尔电脑网卡远程唤醒wake on lan
  10. php如何取视频缩略图,视频提取缩略图