前言:工作过程中对于这块的记录,方便自己查看。在此感谢前辈们输出的精彩博文!!!

一、概述

Ymodem协议主要包括ISP和IAP两大协议。STM32在线升级 (IAP)不需要拆机就能够对产品进行升级,通过Bootloader就可以完成这项工作。

ISP和IAP的区别:

(1)ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编程写入最终用户代码, 而不需要从电路板上取下器件,已经编程的器件也可以用ISP方式擦除或再编程。其主要任务是通过一种可用的串行外设( USART、 CAN、USB、 I2C 等)将应用程序下载到内部 Flash 中。

(2)IAP(In-Application Programming) 指嵌入式MCU主控可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。

(3)ISP技术是单片机芯片可以直接焊接到电路板上,调试结束即成成品,免去了调试时由于频繁地插入取出芯片对芯片和电路板带来的不便。

IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将程序从一个存储体转向另一个。

IAP的编写流程:
      由Bootloader负责检测SD卡中是否有固件更新所需的BIN文件,或者通过SPI、CAN、以太网等方式获取BIN文件。
      如果获取到所需要的BIN文件,则开始复制文件更新固件,更新结束后跳转到指定的地址开始执行最新的程序。

二、协议解析

学习链接:【安卓相关】蓝牙基于Ymodem协议发送bin文件,对硬件设备进行升级。 - 简书

先看看一张流程图:

大概流程呢就是 :

手机 --------------[我要传东西给你,听到了,你就答复一下]------------------------>硬件

手机 <--------------[好的,我听到了,但是你再确定一下]------------------------硬件

手机 --------------[我确定发送]------------------------>硬件

手机 <--------------[给你响应一个 C,表示你可以传东西过来了]------------------------硬件

手机 --------------[接收到C,我要开始发包头给你了,也就是文件名称和文件大小]------------------------>硬件

手机 <--------------[我收到了你的包头,给你发ack 0x06 表示确认,我收到了你的包头]------------------------硬件

手机 --------------[上面发送完了包头,现在发的是包数据流,也就是bin文件]------------------------>硬件

手机 <--------------[这个数据流我收到了,给你响应ack 0x06 确认]------------------------硬件

手机 --------------[继续发送剩下的包数据流]------------------------>硬件

手机 <--------------[继续给你响应ack 0x06确认]------------------------硬件

...

手机 --------------[检查到文件读完了,发送0x04,告诉你我要发送最后一个包了]------------------------>硬件

手机 <--------------[知道了,给你ack 0x06 响应]------------------------硬件

手机 --------------[ok,这是我最后一个包,给你了]------------------------>硬件

手机 <--------------[ok,最后一个包没有问题,检查通过,给你响应0x05]------------------------硬件

手机显示传输成功

Ymodem支持128字节和1024字节一个数据包。128字节以(SOH)开始,1024字节以(STX)开始。

private static final byte SOH = 0x01;
private static final byte STX = 0x02;
private static final byte EOT = 0x04;
......

数据 (参考数据都是经过16进制转换输出的):

一般包头和包尾为128字节,中间包为1024字节,也就是每次发送的包数据流为1kb。

包头数据参考,包头128字节,开始信号为 SOH ,也就是0x01开始 ,接着就是 00 FF,再接着就是文件名称和文件大小,

0100ff 70776d2832292e62696e  00  3332393336  00
0000000000000000000000000000000000000000
0000000000000000000000000000000000000000
00000000000000000000006a5d

包数据流参考,开始信号为STX,也就是0x02开头的,09为帧数。

包尾数据参考,开始信号为 SOH,也就是0x01,紧接着00FF (下面的参考是通过转16进制输出的

0100ff  0000000000000000000000000000000000
0000000000000000000000000000000000000000
0000000000000000000000000000000000000000
0000000000000000000000000000000000000000
0000000000000000000000000000000000000000
0000000000000000000000000000000000000000
00000000000000000000000000

三、实战

说明:Android基于Ymodem协议升级嵌入式MCU主控。Android端通过ISP协议将数据发送给stm32嵌入式板,另外嵌入式板的MCU主控通过IAP进行升级flash。

1、基于串口的IAP在线升级详解与实战

说明:安卓APP移植Ymodem远程升级嵌入式固件。这块主要在arm单片机端做。涉及嵌入式开发。

博文链接:

博文1:【嵌入式】基于串口的IAP在线升级详解与实战3----安卓APP移植Ymodem远程升级嵌入式固件_公子无缘的博客-CSDN博客

博文2:【嵌入式】基于串口的IAP在线升级详解与实战1----IAP功能设计_公子无缘的博客-CSDN博客_iap在线升级

博文3:【嵌入式】基于串口的IAP在线升级详解与实战2----移植Ymodem协议_公子无缘的博客-CSDN博客

博文:4:

STM32在线升级 (IAP)_elikang的博客-CSDN博客_stm32iap在线升级

最近有个需求是,使用专用的手机APP,通过蓝牙模块的通信,实现嵌入式芯片上程序的在线升级,流程如下所示:

这个需求的核心要点在于MCU的串口IAP在线升级功能。

IAP即为In Application Programming,解释为在应用中编程,用户自己的程序在运行过程中对User Flash的部分区域进行烧写。即是一种对单片机flash擦写的一种编程方案。通常情况下,一片flash只有一个用户程序,而IAP编程则是将单片机的flash分成至少两大区域,一部分叫做bootloader区,一部分叫做app用户代码区,还可留出一部分区域为代码备份区。

2、基于STM32的ISP协议传输升级文件

ISP(在系统可编程)协议是可编程设备可以编程写入用户代码,而不需要从电路板上取下来,已经编程的器件也可以用 ISP 方式擦除或再编程。常用的 ISP 协议是基于 USART、USB、I2C 等。由于使用 ISP 上位机升级程序需要借助电脑,在实际生产过程中会带来不便。因此实现了一种嵌入式 ISP 主机用于对目标 MCU 的程序进行升级。嵌入式主机根据 ISP 协议通过串口与 BootLoader 进行通信,从而实现对目标 MCU 程序的升级

说明:STM32与android板通过串口连接,安卓端通过ISP协议王STM32单片机传输bin升级文件数据。

博文1:Android rom开发:STM32 ISP升级_forlan_csdn的博客-CSDN博客

博文1形式:java+JNI,java对串口节点(/dev/ttyS1,具体节点依据项目而定)进行读写,jni执行真正的串口通信,将数据给到MCU。

优秀博文2:Stm32串口isp - 生命不息 折腾不止

博文2形式:Stm32串口isp,基于c语言demo(包括波特率匹配、读写固件等)

Demo程序下载:GitHub - nicekwell/stm32ISP: stm32串口ISP

Android基于Ymodem协议升级嵌入式MCU主控相关推荐

  1. ymodem android,【安卓相关】蓝牙基于Ymodem协议发送bin文件,对硬件设备进行升级。...

    最近做的一个安卓项目是使用蓝牙基于Ymodem协议传输bin文件,实现对硬件设备进行升级. 做的过程中遇到了不少困难,用我这半吊子的语文水平,记录一下吧 怎么办,平时对各种文件传输协议真的是知之甚少啊 ...

  2. 基于Ymodem协议的stm32f405rgt6+CubeMx+IAP在线升级

    基于Ymodem协议的stm32f405rgt6+CubeMx+IAP在线升级 目录 一.CubeMX的配置 1.IAP 2.APP 二.移植Ymodem官方代码 1.文件移植 2.MDK文件.路径添 ...

  3. STM32F103代码远程升级(三)基于YModem协议串口升级程序的实现

    文章目录 一.YModem协议简介 二.YModem的数据格式 1.起始帧的数据格式 2.数据帧的数据格式 3.结束帧的数据格式 4.文件传输过程 三.基于Ymodem协议串口升级程序的实现过程 1. ...

  4. 【科研论文】基于HTTP协议的嵌入式远程监控系统的研究

    内容简介: 利用网络实现局域乃至全球范围内的监测与控制,是信息与控制系统的主要发展趋势.嵌入式系统因其体积小.功能强.可靠性高.灵活方便等优点,已渗透到工业.农业.国防.教育.科研以及消费等各个领域, ...

  5. 基于AOA协议的android USB通信

    摘 要:AOA协议是Google公司推出的用于实现Android设备与外围设备之间USB通信的协议.该协议拓展了Android设备USB接口的功能,为基于Android系统的智能设备应用于数据采集和设 ...

  6. 打印服务器协议,基于TCP/IP协议的嵌入式网络打印服务器设计

    摘要: 随着电子技术和计算机网络技术的发展,嵌入式系统在家庭和工业的各个领域都得到了广泛的应用,各种信息家电,网络设备以及工业控制领域都出现了嵌入式系统的身影,其数量已经远远超过了各种通用计算机.但是 ...

  7. Android 模块 -- 基于XMPP协议的手机多方多端即时通讯方案

    目   录 基于XMPP协议的手机多方多端即时通讯方案................................................................. 1 目   录 ...

  8. android http 网关,安卓平台上实现基于HTTP协议数据网关的方法

    摘要:文章介绍了一种在安卓平台上实现基于HTTP协议数据网关的方法,并详细阐述了数据网关与终端网络设备之间数据传输的实现过程. 关键词:安卓平台: 服务器: 应用开发: Abstract:This p ...

  9. STM32F103代码远程升级(五)基于MQTT协议WiFi远程升级代码的实现

    文章目录 一.WiFi模块的选用与介绍 二.ESP8266的固件擦除与烧写 1.ESP8266 Flash擦除工具的安装与使用. 2.ESP8266固件烧写 (1)在线获取固件文件 (2)获取SDK ...

  10. STM32的升级--ICP/ISP/IAP以及Ymodem协议分析

    资料下载 Ymodem协议传输过程分析 ICP/ISP/IAP 区别 ICP(In-Circuit Programing): 通过J-Link/SWD等下载器烧写程序,上位机需要借助其他硬件的参与才能 ...

最新文章

  1. SQL SERVER数据页checksum校验算法
  2. crc16modbus查表法_查表法计算CRC16校验值
  3. java 断点续传组件_chunkupload 文件上传断点续传组件(java) - 正式发布
  4. PHP中操作MySQL的一些要注意的问题
  5. python中内置的集成开发工具_python应用(3):启用集成开发工具pycharm
  6. 查出数字字符字段中非数字字符的记录
  7. c++初学者如何学好基础?
  8. 如何关闭rsyslog服务?_Linux日志服务器设置过程
  9. AOP和IOC个人理解
  10. 【ubuntu】给新装好的UBUNTU系统配置静态IP
  11. 8000401a 因为配置标识不正确,系统无法开始服务器进程。请检查用户名和密码
  12. 告别飘云!飘云QQ核心技术人员正式声明退出开发[含全文]
  13. 沙加在沙罗双树下临死前的一段对白
  14. 第十三届蓝桥杯大赛软件赛决赛(Java 大学B组)
  15. Excel使用技巧:合并单元格如何分组排序
  16. QT——http协议(大华摄像头保活,根据Id获取大华摄像头播放地址rtsp流)
  17. 猫影视TV 2.0.8 附稳定源地址
  18. spring mvc 学习指南二
  19. CF633C Spy Syndrome 2 ACA+DP
  20. 基于C++实现平台类对战游戏

热门文章

  1. java rgb565转rgb888_RGB565 与 RGB888的相互转换 | 学步园
  2. drozer的安装与模拟器连接
  3. 后缀树系列三:后缀树的应用
  4. 智哪儿头条  萤石网络冲刺科创板  深圳购买全屋智能有补贴
  5. oracle8i odac for c,ODAC for delphi
  6. Java项目集成海康威视门禁,NVR
  7. 服务器驱动文件丢失恢复教程,服务器驱动丢失。
  8. Java生成二维码QRCode(亲测可通过扫码枪扫出)
  9. 2008年上半年程序员考试上午真题自我汇总
  10. 无线电通信天线的种类