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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Android基于Ymodem协议升级嵌入式MCU主控 -> 正文阅读

[嵌入式]Android基于Ymodem协议升级嵌入式MCU主控

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

一、概述

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

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-27 11:29:12  更:2022-04-27 11:29:14 
 
开发: 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 2:30:55-

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