原文链接:http://docs.geeetech.com/ymodem.html

协议说明

YModem协议有几种常用版本,包括带文件大小信息的版本(官方版本、超级终端版本)以及不带文件大小信息的版本(SecureCRT版本)。就实现而言大同小异,并不需要太仔细地划分类型。

名称说明

在后续的协议说明中,将会用一些约定的标记来代表特殊的单字节十六进制数据

Symbol Hex
SOH \x01
STX \x02
EOT \x04
ACK \x06
NAK \x15
CAN \x18

协议格式

发送方

首个数据包结构

发送方开始正式发送数据的第一个包内部结构如下:

Type Seq Seq-OC File Data CRC-high8 CRC-low8
1 Byte 1 Byte 1 Byte n Bytes m Bytes 1 Byte 1 Byte
SOH / STX 00 FF NUL[m]
  • Type:YModem中传输的数据长度可以是128字节也可以是1024字节,当Type为SOH时表示本数据包携带的数据长度(File加Data的部分,即n+m==128或1024)为128字节,为STX时表示本数据包携带的数据长度(同前)为1024字节。
  • Seq:数据包的序列号,从00开始(即首个数据包的Seq部分为00)
  • Seq-OC:Seq的反码,由0xFF-Seq得出
  • File:传输文件的文件名
  • Data:首个数据包的Data部分为NUL,填充满除File部分外剩余的数据空间。在带文件大小信息的YModem版本中,在Data的头部会带上文件大小,然后再由NUL填充
  • CRC-high8:16位CRC校验的高字节
  • CRC-low8:16位CRC校验的低字节

文件数据包结构

发送方开始正式发送文件的第一个包内部结构如下:

Type Seq Seq-OC Data CRC-high8 CRC-low8
1 Byte 1 Byte 1 Byte n Bytes 1 Byte 1 Byte
SOH / STX

与首个数据包的结构有些微不同,正式传输文件内容时并不需要再带上File部分(文件名信息),数据部分的所有空间用来存放文件内容,CRC校验也是只校验数据部分。

协议流程

阶段一、接收方等待数据接收

接收方给发送方不断地发送字符'C',以期望收到发送方的ACK。 当收到发送方的ACK标记后立刻又发送字符'C',随后进入待接收状态。

接收方->>发送方: Char 'C'
发送方->>接收方: ACK
接收方->>发送方: Char 'C'

阶段二、首个数据包的发送及确认

发送方收到接收方发来的第二个'C'字符,开始发送首个数据包。等待接收方响应ACK标记,发送方收到ACK标记后则开始正式传输文件内容。

发送方->>接收方: Packet 0
接收方->>发送方: ACK

阶段三、文件内容的传输及确认

发送方每发一个文件内容数据包,就期待接收方响应一个ACK标记,以继续发送下一个包。

发送方->>接收方: Packet 1
接收方->>发送方: ACK
发送方->>接收方: Packet 2
接收方->>发送方: ACK

传输过程中的异常处理

若发送方发完数据包后收到了接收方NAK标记的响应,则重发此包,直到收到ACK响应或者超时退出。

发送方->>接收方: Packet 1
接收方->>发送方: NAK
发送方->>接收方: Packet 1
接收方->>发送方: ACK
发送方->>接收方: Packet 2

若发送方发完数据包后收到了接收方CAN标记的响应,则停止数据包发送,结束传输。

发送方->>接收方: Packet 1
接收方->>发送方: CAN

阶段四、数据传输结束

若发送方已将数据包全部发完,则发送EOT标记等待接收方的NAK响应,当发送方收到NAK后立刻再次发送EOT等待接收方的ACK响应,接收到ACK标记则表示本次传输完全成功

发送方->>接收方: EOT
接收方->>发送方: NAK
发送方->>接收方: EOT
接收方->>发送方: ACK
接收方->>发送方: Char 'C'

YModem协议详细文档(用于下位机主板升级)相关推荐

  1. SpringCloud从入门到精通(超详细文档二)

    上一篇文档(SpringCloud从入门到精通之超详细文档一)已经对Springboot/SpringCloud做了简单的介绍以及应用讲解,下面将继续为大家介绍SpringCloud后续应用. 第12 ...

  2. Docker详细文档

    docker详细文档 1.什么是docker 解决了什么难点 在开发中,经常会遇到本地环境与生产环境不一致,然后开发和运维言语沟通或者武力沟通的情况,相互甩锅,程序员最常说的一句话就是:"为 ...

  3. promethues+alertmanager+grafana监控docker容器和报警—基于手动配置和文件自动发现—详细文档

    promethues+alertmanager+grafana监控docker容器和报警-基于手动配置和文件自动发现-详细文档 相关配套软件包网盘下载链接如下: 网盘地址: https://url28 ...

  4. Java学习笔记整理-知识梳理+JDK1.8详细文档

    链接:java开发手册 提取码:kes8 链接:JDK1.8详细文档 提取码:n9zo JavaSE 面向对象编程(Object-oriented programming) 封装 类(class) 类 ...

  5. Oracle单实例通过DG迁移至RAC集群(Oracle 11g 超详细文档)

    实验:Oracle单实例通过DG迁移至RAC集群(Oracle 11g 超详细文档) 步骤1:Oracle单实例搭建 1. 系统环境检查 2. 创建用户.组,配置环境变量.安装目录 3. 安装Orac ...

  6. CalendarView使用详细文档(一个很不错的日历控件)

    github地址:https://github.com/huanghaibin-dev/CalendarView CalendarView使用详细文档 日历控件定制是移动开发平台上比较常见的而且比较难 ...

  7. socks5协议RFC文档

    socks5协议RFC文档 « Xiaoxia[PG] socks5协议RFC文档 Network Working Group M. Leech Request for Comments: 1928 ...

  8. 在Linux 安装Python3.5.6详细文档!!!!

    在Linux 安装Python3.5.6详细文档!!!! 1.安装相关依赖库(工具包) yum install gcc patch libffi-devel python-devel  zlib-de ...

  9. 不写代码建博客!在浏览器完成博客搭建,有超详细文档,小白轻松搞定

    文档地址:Daymd. 仓库地址:inannan423/Daymd: 个人站点生成器,可以在浏览器完成全部操作!从搭建到部署都可以在浏览器中完成,不需要本地环境.附详细文档. (github.com) ...

最新文章

  1. 教育部:住宿费可以退!你的学校退了吗?
  2. Day 23 面向对象进阶
  3. Mac 安装HomeBrew 出错
  4. osgearth入门图解-用VC++做一个地球出来
  5. eclipse 启动后maven插件报错
  6. 如何判断文本文件的编码格式?
  7. 收集、报告或保存系统活动信息:sar命令
  8. python list转dict_python中将list转为dict
  9. Python中文全攻略
  10. 【Gym - 101915D】Largest Group(二分图最大团,状压dp)
  11. 渗透测试入门4之内网跨边界应用
  12. vue ----vue-cli
  13. 蓝桥杯泊松分酒java_【蓝桥杯】泊松分酒
  14. 笨办法学Python(第三版)pdf
  15. linux资源限制函数getrlimit,setrlimit(转载)【转】
  16. Git版本管理工具Tower for Mac
  17. 【Git】Git提交代码详细步骤
  18. HDU2157 How many ways??(可达矩阵+矩阵快速幂)
  19. 利用python爬取飞猪信息_Python实战:飞猪IP池爬虫(8)
  20. python自动聊天机器人_Python实现微信聊天机器人

热门文章

  1. md解密 vue_vue项目用sha256、md5、base64加密密码
  2. 鸿蒙之始什么意思,《战佛》快速升级小意思
  3. 强大的中间人攻击工具(Bettercap)
  4. Java虚拟机:什么是Java
  5. 网站禁用鼠标右键php代码,JS实现禁止鼠标右键的功能
  6. Matlab实验(六)
  7. Interbrand《2022中国最佳品牌排行榜》:腾讯、阿里巴巴和建行蝉联前三名 | 美通社头条...
  8. java处理苹果浏览器safari无法播放视频流(Accept-Ranges)
  9. 2021年中国女性内衣行业发展现状分析:女性内衣市场消费不断升级[图]
  10. Altium Designer v23.2.1.34 PCB板设计软件中文特别版