基于Ymodem协议的STM32串口IAP的实现(IAP + APP + 上位机)

2023-10-27

基于Ymodem协议的STM32串口IAP的实现(IAP + APP + 上位机)

HavenXie关注

0.1832017.06.05 00:35:09字数 1,373阅读 10,038

1.什么是IAP?

IAP:In Application Programming 是指在应用编程,即在程序运行中编程,就是片子提供一系列的机制(硬件/软件上的)当片子在运行程序的时候可以提供一种改变flash数据的方法。通俗点讲,也就是说程序自己可以往程序存储器里写数据或修改程序。这种方式的典型应用就是用一小段代码来实现程序的下载,实际上单片机的ISP功能就是通过IAP技术来实现的,即片子在出厂前就已经有一段小的bootloader程序在里面,片子上电后,开始运行这段程序,当检测到上位机有下载要求时,便和上位机通信,然后下载数据到存储区。

2.与ISP的区别

在线编程目前有两种实现方法:在系统编程(ISP)和在应用编程(IAP)。ISP一般是通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程,而IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。ISP的实现一般需要很少的外部电路辅助实现,而IAP的实现更加灵活,通常可利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器。

3.为什么要用IAP

STM32F1XX单片机在出厂前,固化了ISP自举程序,挺强悍的,至少我觉得,因为人家还自适应波特率呢,才2KByteROM+512ByteRAM。上位机下载软件现成的,也不用自己操心了。不过呢,需要boot0跳线进入,详见文档 RM0008芯片参考手册第2章 和 AN2606系统内存引导模式。那我就要在我明亮的壳子上打个白米粒大的洞,然后就像路由器那样,拿牙签捅啊捅的。还有,就是把HEX文件发布让客户自己升级,感觉不像回事,老板也会担心他们抄东西(其实没有什么是安全的啦)。所以,不需要拆机就能对产品进行固件升级是很多人想要的效果,不仅方便而且节省精力和成本。

4.如何设计IAP

经过上面的介绍我们知道完整的IAP应该包括三个部分:1.boot 2.user app 3.上位机控制端。

在做之前在网上查了很多资料,要不就是空空而谈如何如何实现要不就是只有一个boot代码,就是找不到整套的资料,这可能与整个电子行业的封闭有关。在这方面真的要学学互联网的开源精神。

当然啦,也有很多优秀的文章,这里给大家传送门:

基于Ymodem协议的IAP上位机(C#)

献丑之STM32F单片机IAP方法

所以我决定将这个项目开源出来,整个项目包括三套代码。

  1. boot部分:可用于stm32f1xx平台,几乎不需要修改代码,只需要根据你的MCU简单的配置一下工程文件就好了。(我的平台是stm32f103ze)

  2. app部分:其实就是你需要实现产品功能的部分。我这里采用了usmart框架,用它的原因主要是方便和boot部分以及上位机部分进行通信。这部分目前做的比较少,之后会将他抽象出来。

  3. 上位机部分:前面两个部分运行在MCU内部用的是C编程。这部分运行在windows平台用的是C#,基于 .net4.0。你可以很方便的将它移植到你的项目中。

5.干货在哪里

说了这么多,是时候show my code了。我把代码都托管在github上了(之后会放到csdn上面),每套代码都有说明文档(请按照下述编号看起)。但是文档不够详细,之后会丰富。目前测试的平台比较少,希望大家可以一起来测试提交bug,一起来完善。

  1. boot部分代码

  2. app部分代码(支持usmart的重量版)
    app部分代码(简洁的轻量版)

  3. 上位机代码

6.还需要去做什么

  • 实现aes文件加密

  • 实现一边接收数据一边写入数据

  • 实现可更改每包数据大小(目前每包是1024字节)

    • 已经实现32Byte、64Byte、128Byte、256Byte、512Byte、1KByte可选(2017.6.11更新)
  • 实现蓝牙串口iap

    • 我采用HC-08蓝牙透传模块(BLE类型),在32Byte和64Byte的情况下可以实现蓝牙串口iap(跟蓝牙模块有关,建议不要使用BLE类型的,它的延时较高。2017.6.11)
  • 增加spi接口和i2c接口的iap(目前是uart接口)

7.诚邀有兴趣的小伙伴一起来。。。

更新时间20170605

更新时间20170611

 

9人点赞

 

日记本

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Ymodem协议的STM32串口IAP的实现(IAP + APP + 上位机) 的相关文章

  • crmeb PRO v1.2用户隐私协议问题

    注意 行数仅供参考 为了快速找到修改的地方 1 文件地址 app controller admin v1 setting SystemGroupData php行数 308 获取用户协议内容 return mixed public func
  • React通过docx-preview预览Word文档

    前言 在基于React的Web应用中 我们经常遇到需要预览和展示Word文档的需求 而docx preview是一个优秀的React组件库 可以帮助我们实现在Web页面上预览Word文档的功能 本文将介绍如何使用docx preview组件
  • React 路由使用-详细介绍

    路由初使用 抽象路由模块 src page Article index js const Article gt return div p 文章页 p div export default Article src router index j
  • selenium框架解析

    seleium框架解析 文章目录 seleium框架解析 前言 一 selenium驱动浏览器原理 二 selenium常用操作 1 四大操作 2 三大切换 3 三大等待 4 下拉框操作 5 时间控件操作 6 滚动条操作 7 文件操作 前言
  • java类的静态成员和非静态成员_Java SE之[静态成员/类成员]与[非静态成员/实例成员]【static】...

    定义 静态成员 又称类成员 使用static修饰符的方法和变量 非静态成员 又称实例成员 未使用static修饰符的方法和变量 结论 注 jdk1 8 测试源码 public class Main private int x 34 非静态变
  • linux path 多个目录,Linux下多路径Multipath的简单配置

    Linux下多路径Multipath的简单配置 1 启用Multipath 1 启动multipathd服务 service multipathd start 或者 etc init d multipathd start 2 修改multi
  • python房价预测_Python——决策树实战:california房价预测

    Python 决策树实战 california房价预测 编译环境 Anaconda Jupyter Notebook 首先 导入模块 1 importpandas as pd2 importmatplotlib pyplot as plt3
  • 手写算法-python代码实现Kmeans

    手写算法 python代码实现Kmeans 原理解析 代码实现 实例演示 sklearn对比 总结 原理解析 今天 我们来讲一下Kmeans 一种无监督聚类算法 也是最为经典的基于划分的聚类方法 它的思想是 对于给定的样本集 按照样本之间的
  • java中的 Set转List

    构造Map数据 Map
  • Mysql详解

    一 数据库的基本概念 数据库的英文单词 DataBase DB 数据库 用来存储和管理数据的仓库 数据库的特点 持久化存储数据 其实数据库就是一个文件系统 方便存储和管理数据 使用了统一的方式操作数据库 SQL 常见的数据库软件 MySQL
  • 两阶段最小二乘法_最小二乘法(Least Squares)简介

    最小二乘法简介 最小二乘法 Least Squares 是回归分析中的一种标准方法 它是用来近似超定系统 Overdetermined System 答案的一种方法 超定系统是指数学中的一种概念 一组包含未知数的方程组中 如果方程的数量大于
  • arm平台编译adb

    参考github https github com bonnyfone adb arm 本来的目的是在arm平台编译以后能够使用adb shell获取shell权限 然后就可以避开其他权限无法执行su的问题 最开始 先修改了android源
  • kodi刮削器 中文_手把手教您设置KODI播放器,3分钟打造家庭影院级媒体库,流畅播放NAS里的原盘电影!...

    创作立场声明 此文为比较基础的KODI播放器的保姆级安装和配置教程 希望可以帮助一些初入家庭影音的值友们 关于KODI KODI是一款播放器 也是一款媒体库管理软件 不仅在电视上可以安装 还可以在windows电脑上进行安装 当下载高清 高
  • Vue3记录

    Vue3快速上手 1 Vue3简介 2020年9月18日 Vue js发布3 0版本 代号 One Piece 海贼王 耗时2年多 2600 次提交 30 个RFC 600 次PR 99位贡献者 github上的tags地址 https g
  • 【1】TypeScript入门——基本认知

    一 基本认知 1 优点 TypeScript 更加可靠 它与使用 JavaScript 相比 不仅支持在任何地方直观地获取组件的接口定义 还能对属性 状态中的值是否为空进行自动检测并给出提示 容错处理 甚至还支持对 React JSX元素接
  • Java创建数组的方法

    最近学Java 一点小心得 希望和大家分享一下 第一次写文章 写的不好希望大家谅解 当然我也会尽力写好这篇文章 Java创建数组的方法大致有三种 说明 这里以int为数据类型 以arr为数组名来演示 一 声明并赋值 int arr 1 2
  • 嵌入式学习——c语言数据的输入输出

    嵌入式学习 c语言数据的输入输出 一 输入输出概念 1 2C语言本身不提供输入输出语句 1 3 include头文件放在程序中 二 printf输出数据 2 2格式字符 三 scanf输入数据 3 1scanf一般格式 四 输入输出函数 4
  • Spring Boot之分离测试和生产环境的应用配置

    多环境应用配置 将默认不变的配置 设置在application properties文件中 新建开发环境下的属性文件application dev properties 将开发中的配置 设置在该文件中 新建生产环境下的属性文件applica
  • “点两下”就能开发一个AI应用!百度砸亿元基金、千万算力要搞插件生态

    金磊 发自 武汉量子位 公众号 QbitAI 这年头 要想开发一个AI应用 怎么搞 只需要简单的 点击 动作就可以了 例如你想开发一个AI作画的App 只需要先点击与之相匹配的能力 简笔成画 根据手绘草图和语言 生成符合要求的图片 言语之美
  • fiddler设置好代理后不能上网(方法二)

    1 打开fiddler在工具栏找到Tools gt options Connections选项如下图 将Allow remote computers to connect 勾选上 然后记住默认8888这个端口 可更改 设置手机代理时会用到

随机推荐

  • 2023高教社数学建模国赛A题 - 定日镜场的优化设计 - 思路

    问题1 计算年平均光学效率和输出热功率 建立模型的坐标系 以圆形区域中心为原点 正东方向为x轴 正北方向为y轴 垂直地面向上为z轴 计算吸收塔和定日镜的位置 吸收塔建于圆形定日镜场中心 根据给定的数据确定定日镜的位置 计算每个定日镜的光学效
  • 使用阿里云OSS实现文件的上传、下载、删除及修改功能

    一 配置OSS相关配置信息 1 要配置 OSS 相关配置信息 您可以按照以下步骤操作 登录阿里云控制台 进入 OSS 控制台 创建一个新的 OSS Bucket 并记录下以下信息 Bucket 名称 Bucket 所属地域 AccessKe
  • 如何解决git上传文件出错[rejected] master -> master (fetch first) error: failed to push some refs to '

    rejected master gt master fetch first error failed to push some refs to git gitee co 上传到码云的时候 报了这个错误 rejected master gt
  • 使用sklearn学习多项式回归(三)

    目录 1 什么是线性 1 1 变量之间的线性关系 1 2 数据间的线性与非线性 1 3 线性模型与非线性模型 1 4 使用分箱处理非线性问题 2 多项式回归PolynomialFeatures 2 1 什么是多项式回归 2 2 多项式回归处
  • 使用 Openssl 验证自签名证书

    原文地址 http blog csdn net kmyhy article details 6546072 iOS的 security framework 框架前面已经介绍 这个框架提供有限的功能 使用它能做到的 比你想象的要少 笔者一直想
  • html input 禁用缓存

    多数浏览器默认会缓存input的值 只有使用ctl F5强制刷新的才可以清除缓存记录 如果不想让浏览器缓存input的值 有2种方法 input 的属性autocomplete 默认为on 其含义代表是否让浏览器自动记录之前输入的值 很多时
  • word编辑公式简单方法

    安装Python包 pix2tex 在终端输入 pip install pix2tex gui i https pypi doubanio com simple 就可以安装 安装好以后 在终端输入pix2tex gui就可以启动 第一次启动
  • Android多级树形选择列表案例 - 手把手教你快速实现

    公司项目中有一个选择联系人的界面 一看里面关系极其复杂 最多时有5层关系嵌套 层数还不一定 有的是第五级是人员 有的是第四级是人员 崩溃中 原来的实现方式是分了三个Activity去分别加载 个人觉得太过臃肿麻烦 选个人要调四次页面 太繁琐
  • Vite原理学习之预编译

    前言 Vite是下一代的前端开发与构建工具 为什么称为下一代 根本原因在于其基于原生ES Module 在目前的前端工程化生态中 webpack rollup esbuild等非常流行 而Vite真是构建在一些流行的技术上 Vite的出现实
  • mysql按升序创建索引_MySQL中如何使用索引

    原标题 MySQL中如何使用索引 者 Airy 在数据分析之路狂奔 立志成为大咖级人物 前言 学完基础的MySQL知识 以及MySQL的增删改查 我们要学习一些性能方面的东西 今天来讲一下索引 Index 索引 在关系数据库中 索引是一种单
  • BUUCTF学习笔记-EasySQL

    BUUCTF学习笔记 EasySQL 时间 2020 03 14 考点 堆叠注入 SQL模式 打开是一个输入框 提交参数查询 随意提交几个参数 发现存在堆叠注入 输入1显示Array 0 gt 1 输入2显示Array 0 gt 1 输入2
  • SQL基础之增、删、改、查

    文章目录 SQL基础之增 删 改 查 SELECT INSERT UPDATE DELETE 参考 SQL基础之增 删 改 查 SQL Structured Query Language SELECT 查 SELECT FROM 整张表查询
  • ACwing算法基础课全程笔记(2021年8月12日开始重写+优化)

    更好的阅读体验 基础模板 2021年8月12日开始对基础课笔记进行重写 优化 请大家支持AcWing正版 购买网课能让自己获得更好的学习体验哦 链接 https www acwing com about 比赛常用技巧及库函数 1 快速读 快
  • win11 install wsl2

    在 Windows 11 上安装 WSL 2 的步骤如下 首先 确保你的 Windows 版本是 Windows 11 或者更新的版本 并且支持 WSL 2 然后 打开 设置 应用 在 更新与安全 页面的 开发人员选项 中 启用 Windo
  • 用200行C语言代码写出一个贪吃蛇——1.0(基本版)

    1 设计思路 总的来说 贪吃蛇这个小游戏涉及到的东西不多 但是对逻辑思维是比较吃基本功的 贪吃蛇 显示给我们看的有三部分 蛇 食物 地图边界 我们可以用一个二维数组来标记这些部分 例如这里我创建了一个 5 10 的二维数组 其中 1 表食物
  • 手写模拟Spring的底层原理2.1

    先来引入两个问题 第一个懒加载还是立即加载的问题 这个问题还是在于就是说 当我们xml配置了一个对象bean的时候 它在spring容器里面是什么时候开始会给我们创建这个对象 那如果我们想对某个对象启动懒加载 可以添加 lazy这个注解 这
  • Fiddler抓包工具保姆级使用教程(超详细)

    超文本传输协议 HTTP 是一个简单的请求 响应协议 其主要是基于TCP来实现的 可以通过Chrome开发者工具或者Wireshark或者Fiddler抓包 以便分析 HTTP 请求 响应的细节 本篇博客主要谈论如何使用Fiddler抓取H
  • vector 二维数组

    动态数组 int p p new int m 注意 int m 表示一个有m个元素的指针数组 p new int 8 表示分配一个int空间并初始化为8 for int i 0 i lt m i p i new int 5 利用Vector
  • OpenGL Shading language学习总结

    这篇文章是根据
  • 基于Ymodem协议的STM32串口IAP的实现(IAP + APP + 上位机)

    基于Ymodem协议的STM32串口IAP的实现 IAP APP 上位机 HavenXie关注 0 1832017 06 05 00 35 09字数 1 373阅读 10 038 1 什么是IAP IAP In Application Pr