YModem协议详细文档(用于下位机主板升级)
原文链接: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协议详细文档(用于下位机主板升级)相关推荐
- SpringCloud从入门到精通(超详细文档二)
上一篇文档(SpringCloud从入门到精通之超详细文档一)已经对Springboot/SpringCloud做了简单的介绍以及应用讲解,下面将继续为大家介绍SpringCloud后续应用. 第12 ...
- Docker详细文档
docker详细文档 1.什么是docker 解决了什么难点 在开发中,经常会遇到本地环境与生产环境不一致,然后开发和运维言语沟通或者武力沟通的情况,相互甩锅,程序员最常说的一句话就是:"为 ...
- promethues+alertmanager+grafana监控docker容器和报警—基于手动配置和文件自动发现—详细文档
promethues+alertmanager+grafana监控docker容器和报警-基于手动配置和文件自动发现-详细文档 相关配套软件包网盘下载链接如下: 网盘地址: https://url28 ...
- Java学习笔记整理-知识梳理+JDK1.8详细文档
链接:java开发手册 提取码:kes8 链接:JDK1.8详细文档 提取码:n9zo JavaSE 面向对象编程(Object-oriented programming) 封装 类(class) 类 ...
- Oracle单实例通过DG迁移至RAC集群(Oracle 11g 超详细文档)
实验:Oracle单实例通过DG迁移至RAC集群(Oracle 11g 超详细文档) 步骤1:Oracle单实例搭建 1. 系统环境检查 2. 创建用户.组,配置环境变量.安装目录 3. 安装Orac ...
- CalendarView使用详细文档(一个很不错的日历控件)
github地址:https://github.com/huanghaibin-dev/CalendarView CalendarView使用详细文档 日历控件定制是移动开发平台上比较常见的而且比较难 ...
- socks5协议RFC文档
socks5协议RFC文档 « Xiaoxia[PG] socks5协议RFC文档 Network Working Group M. Leech Request for Comments: 1928 ...
- 在Linux 安装Python3.5.6详细文档!!!!
在Linux 安装Python3.5.6详细文档!!!! 1.安装相关依赖库(工具包) yum install gcc patch libffi-devel python-devel zlib-de ...
- 不写代码建博客!在浏览器完成博客搭建,有超详细文档,小白轻松搞定
文档地址:Daymd. 仓库地址:inannan423/Daymd: 个人站点生成器,可以在浏览器完成全部操作!从搭建到部署都可以在浏览器中完成,不需要本地环境.附详细文档. (github.com) ...
最新文章
- 教育部:住宿费可以退!你的学校退了吗?
- Day 23 面向对象进阶
- Mac 安装HomeBrew 出错
- osgearth入门图解-用VC++做一个地球出来
- eclipse 启动后maven插件报错
- 如何判断文本文件的编码格式?
- 收集、报告或保存系统活动信息:sar命令
- python list转dict_python中将list转为dict
- Python中文全攻略
- 【Gym - 101915D】Largest Group(二分图最大团,状压dp)
- 渗透测试入门4之内网跨边界应用
- vue ----vue-cli
- 蓝桥杯泊松分酒java_【蓝桥杯】泊松分酒
- 笨办法学Python(第三版)pdf
- linux资源限制函数getrlimit,setrlimit(转载)【转】
- Git版本管理工具Tower for Mac
- 【Git】Git提交代码详细步骤
- HDU2157 How many ways??(可达矩阵+矩阵快速幂)
- 利用python爬取飞猪信息_Python实战:飞猪IP池爬虫(8)
- python自动聊天机器人_Python实现微信聊天机器人
热门文章
- md解密 vue_vue项目用sha256、md5、base64加密密码
- 鸿蒙之始什么意思,《战佛》快速升级小意思
- 强大的中间人攻击工具(Bettercap)
- Java虚拟机:什么是Java
- 网站禁用鼠标右键php代码,JS实现禁止鼠标右键的功能
- Matlab实验(六)
- Interbrand《2022中国最佳品牌排行榜》:腾讯、阿里巴巴和建行蝉联前三名 | 美通社头条...
- java处理苹果浏览器safari无法播放视频流(Accept-Ranges)
- 2021年中国女性内衣行业发展现状分析:女性内衣市场消费不断升级[图]
- Altium Designer v23.2.1.34 PCB板设计软件中文特别版