java ymodem协议,anroid ymodem 实现单片机固件升级
Android端对单片机升级其实Android端只需要实现文件传输并在界面上显示传输进度。
Android 端和单片机通信是串口进行通信的,通信数据协议基于Ymodem
由于Ymodem协议本身就是采用C语言实现,对于单片机端实现并不是很困难,Android 端也可以采用将C代码编译成so调用。
对于一个擅长java语言的人,调试C代码简直痛苦不堪。
经过github搜索一番,找到一个java语言实现的版本。
阅读了这个java版本的代码发现与需求还是有一定的差距,遂对这个项目改造一番终于顺利移植到项目中。
这个项目不能直接引用有如下问题:
1.Android 端不适合采用nio的方式读写文件,替换方案:线程+File
2.该项目采用的是io流的方式,需要用我们自己的串口通信方式替换(收发均为字节码)
3.去除接收单片机发送文件相关的方法
4.Ymodem协议是收数据方主动发起交互指令,而需求是用户在Android端点击一个按钮开始升级固件,我们只需要单片机和Android端增加一条自定义指令就可以实现。
5.界面上需要显示文件传输的进度,我们采用EventBus将各个过程和进度等信息post到Activity上做UI显示。
以下记录改造过程:
1.创建工程后将ru.sir.ymodem中的代码全部拷贝到项目中
2.由于我们只需要用到YModem协议部分,所以删除多余的无用类
CRC.java 保留
CRC16.java 保留
CRC8.java 保留
Modem.java 需要修改
TimeoutException.java 保留
Timer.java 保留
XModem.java 删除
XModem1K.java 删除
YModem.java 需要修改
3.打开Ymode和Modem类,将里面Path类替换成File,将Path相应的方法替换成File中同类型的方法。
4.将Ymode和Mode的构造方法中的IO流替换成我们自己的串口通信类,以便在Modem中通信发送和接受来自单片机的指令。
5.在MainActivity的按钮中开启一个线程,执行两个过程,1.发送开始升级指令给单片机 2.new YModem(mUartManager).send("/sdcard/firmware.bin");
MainActivity.jpg
java ymodem协议,anroid ymodem 实现单片机固件升级相关推荐
- ymodem协议c语言,STC单片机ISP-Demo-使用Y-Modem协议源码与库函数分享
#define MAIN_Fosc 22118400L //定义主时钟 #define Baudrate0 115200UL ...
- iOS蓝牙开发(三):iOS中蓝牙模块OTA升级(YModem协议)
上一篇简单介绍了蓝牙4.0的iOS实现代码,详细的东西大家可以去github上搜babyBluetooth,里面有一些学习资料,接下来分享的是OTA升级的东西,我们假定看这篇文章的时候,关于iOS和外 ...
- Ymodem协议学习笔记
介绍 Xmodem.Ymodem和Zmodem协议是最常用的三种通信协议. Xmodem协议是最早的,支持传输128字节信息块. Ymodem是Xmodem的改进版协议,具有传输快速稳定的 ...
- stm32 Bootloader设计(YModem协议)
相信很多人都希望,不开盖就可以对固件进行升级吧,就像手机那些.下文中的bootload就来实现这样的功能. 前段时间有项目关于Bootload设计.所以就仔细的去了研究了一翻.以前都是用的stm32官 ...
- STM32F103代码远程升级(三)基于YModem协议串口升级程序的实现
文章目录 一.YModem协议简介 二.YModem的数据格式 1.起始帧的数据格式 2.数据帧的数据格式 3.结束帧的数据格式 4.文件传输过程 三.基于Ymodem协议串口升级程序的实现过程 1. ...
- YModem协议简介
百度百科对Ymodem 协议描述 (Ymodem) Ymodem 协议.Ymodem是一种错误纠正协议.使用较大数据块的调制解调采用这种协议,以获得更高的工作效率.采用Ymodem协议的调制解调器以1 ...
- STM32 Ymodem 协议及代码解析
点击左上角的"关注",定期更新 STM32 最新资讯,总有你想要的信息! STM32 Ymodem 协议及代码解析 文章导图: 1. Ymodem 协议传输效果 1.1 发送端软件 ...
- java Ymodem协议上位机程序
本文代码传入文件地址返回如代码块: 为了更好的拓展,我把foo.c这个文件名拓展成了6个字节用来表示版本号如1.2.66.c 后四个字节用来存储文件长度 也就是说第0帧数据为 SOH 00 FF 1 ...
- STM32BootLoader引导SecureCRT串口固件升级(YModem协议)
STM32+BootLoader+SecureCRT(Y) @Eric_Jarsionge 一.BootLoader bootloader其实就是一段启动程序,它在芯片启动的时候首先被执行,它可以用来 ...
最新文章
- java把图片写入excel_使用POI向excel中写入图片的java代码
- java任务分解_Spark如何将切片分解为任务/执行者/工作者?
- c++代码转为go_Go调用C/C++
- Java 面试题经典 77 问
- LeetCode - Easy - 169. Majority Element
- Linux驱动开发流程四步走
- MySQL MVCC原理
- Jupyter notebook内使用(添加)虚拟环境
- net core mysql 组件记录
- Base64压缩UUID长度替换Hibernate原有UUID生成器
- mac无法验证您网络上的打印机,怎么解决?
- 降压稳压器LM2596SX-ADJ技术参考
- 【网络资源学习笔记】ShellCode相关内容学习
- cf div2 #444 (ABC)(D已补)
- uni-app 中英文切换
- mysql表analyze,ANALYZE TABLE语句如何帮助维护MySQL表?
- 10-Ubuntu-ftp客户端
- 【BZOJ4327】[JSOI2012] 玄武密码(AC自动机的小应用)
- 被“现实”打败的3D打印
- 3dmax软件的制作木桶过程:三步流程