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 实现单片机固件升级相关推荐

  1. ymodem协议c语言,STC单片机ISP-Demo-使用Y-Modem协议源码与库函数分享

    #define MAIN_Fosc                22118400L        //定义主时钟 #define Baudrate0                115200UL  ...

  2. iOS蓝牙开发(三):iOS中蓝牙模块OTA升级(YModem协议)

    上一篇简单介绍了蓝牙4.0的iOS实现代码,详细的东西大家可以去github上搜babyBluetooth,里面有一些学习资料,接下来分享的是OTA升级的东西,我们假定看这篇文章的时候,关于iOS和外 ...

  3. Ymodem协议学习笔记

    介绍   Xmodem.Ymodem和Zmodem协议是最常用的三种通信协议.   Xmodem协议是最早的,支持传输128字节信息块.   Ymodem是Xmodem的改进版协议,具有传输快速稳定的 ...

  4. stm32 Bootloader设计(YModem协议)

    相信很多人都希望,不开盖就可以对固件进行升级吧,就像手机那些.下文中的bootload就来实现这样的功能. 前段时间有项目关于Bootload设计.所以就仔细的去了研究了一翻.以前都是用的stm32官 ...

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

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

  6. YModem协议简介

    百度百科对Ymodem 协议描述 (Ymodem) Ymodem 协议.Ymodem是一种错误纠正协议.使用较大数据块的调制解调采用这种协议,以获得更高的工作效率.采用Ymodem协议的调制解调器以1 ...

  7. STM32 Ymodem 协议及代码解析

    点击左上角的"关注",定期更新 STM32 最新资讯,总有你想要的信息! STM32 Ymodem 协议及代码解析 文章导图: 1. Ymodem 协议传输效果 1.1 发送端软件 ...

  8. java Ymodem协议上位机程序

    本文代码传入文件地址返回如代码块:  为了更好的拓展,我把foo.c这个文件名拓展成了6个字节用来表示版本号如1.2.66.c 后四个字节用来存储文件长度 也就是说第0帧数据为 SOH 00 FF 1 ...

  9. STM32BootLoader引导SecureCRT串口固件升级(YModem协议)

    STM32+BootLoader+SecureCRT(Y) @Eric_Jarsionge 一.BootLoader bootloader其实就是一段启动程序,它在芯片启动的时候首先被执行,它可以用来 ...

最新文章

  1. java把图片写入excel_使用POI向excel中写入图片的java代码
  2. java任务分解_Spark如何将切片分解为任务/执行者/工作者?
  3. c++代码转为go_Go调用C/C++
  4. Java 面试题经典 77 问
  5. LeetCode - Easy - 169. Majority Element
  6. Linux驱动开发流程四步走
  7. MySQL MVCC原理
  8. Jupyter notebook内使用(添加)虚拟环境
  9. net core mysql 组件记录
  10. Base64压缩UUID长度替换Hibernate原有UUID生成器
  11. mac无法验证您网络上的打印机,怎么解决?
  12. 降压稳压器LM2596SX-ADJ技术参考
  13. 【网络资源学习笔记】ShellCode相关内容学习
  14. cf div2 #444 (ABC)(D已补)
  15. uni-app 中英文切换
  16. mysql表analyze,ANALYZE TABLE语句如何帮助维护MySQL表?
  17. 10-Ubuntu-ftp客户端
  18. 【BZOJ4327】[JSOI2012] 玄武密码(AC自动机的小应用)
  19. 被“现实”打败的3D打印
  20. 3dmax软件的制作木桶过程:三步流程

热门文章

  1. FCN(全卷积网络)详解
  2. 回归预测 | MATLAB实现SVR(支持向量机回归)多输入单输出
  3. 解决戴尔电脑win10无法正常关机现象
  4. 数据库 SQL 语言 基础CRUD操作
  5. SSM常见的CRUD操作
  6. 如何选择骨传导耳机、2022不伤耳骨传导耳机推荐
  7. 2022 SDC | 第六届安全开发者峰会于上海圆满落幕!
  8. 关系数据库基础:关系代数运算知识笔记
  9. Arch图形界面安装
  10. FZU 1492 地震预测(模拟链表)(技巧题)