YModem协议总结

《YModem协议总结》


目录

第1章 YModem协议简介 4

1.1 基本介绍 4
1.2 YModem基本介绍 4

第2章 YModem传输协议 5

2.1 起始帧的数据格式 5
2.2 数据帧的数据格式 5
2.3 结束帧数据结构 6
2.4 文件传输过程 6
2.5 CRC的计算 7

附录A 附录 8

A.1 附录 8


第1章 YModem协议简介

1.1基本介绍

最常用的几种通信传输协议有:XModem、YModem、ZModem等。
XModem是最早的协议之一,几乎所有的通讯程序支持的文件传输协议,它传输128字节信息块。
YModem协议是XModem的改进协议,它最用于调制解调器之间的文件传输的协议,具有快速,稳定传输的优点。它的传输速度比XModem快,这是由于它可以一次传输1024字节的信息块,同时它还支持传输多个文件,也就是常说的批文件传输。
ZModem速度快于XModem和YModem,而且可以更好地断开后恢复传输。
如今,XModem基本已经被淘汰,最常用的就是YModem与ZModem。

1.2YModem基本介绍

YModem分成YModem-1K与YModem-g。
YModem-1K用1024字节信息块传输取代标准的128字节传输,数据的发送回使用CRC校验,保证数据传输的正确性。它每传输一个信息块数据时,就会等待接收端回应ACK信号,接收到回应后,才会继续传输下一个信息块,保证数据已经全部接收。
YModem-g传输形式与YModem-1K差不多,但是它去掉了数据的CRC校验码,同时在发送完一个数据块信息后,它不会等待接收端的ACK信号,而直接传输下一个数据块。正是它没有涉及错误校验,才使得它的传输速度比YModem-1K来得快。一般都会选择YModem-1K传输,平时所说的YModem也是指的是YModem-1K。


第2章 YModem传输协议

2.1起始帧的数据格式

YModem的起始帧并不直接传输文件的数据,而是将文件名与文件的大小放在数据帧中传输,它的帧长=3字节数据首部+128字节数据+2字节CRC16校验码=33字节。它的数据结构如下:
SOH 00 FF filename[ ] filezise[ ] NUL[ ] CRCH CRCL

其中SOH=0x01,表示这个数据帧中包含着128字节的数据部分;
在SOH后面的00 FF,00表示数据帧序号,因为是起始帧,所以它的帧序为00,至于FF,它是帧序的取反;
filename[ ]就是文件名,如文件名foo.c,它在数据帧中存放格式为:66 6F 6F 2E 63 00,一定要在文件名最后跟上一个00,表示文件名结束;
filesize[ ]就是文件大小,如上面的foo.c的大小为1KByte,即1024Byte,需要先将它转化成16进制,即0x400,所以它在数据帧的存放格式 为:34 30 30 00,即“400”,同样的文件大小最后需要跟上00,表示结束;
NUL[ ]表示剩下的字节都用00填充,数据部分大小为128字节,除去文件名与文件大小占用的空间外,剩余的字节全部用00填充;
CRCH CRCL分别表示16位CRC校验码的高8位与低8位。

2.2数据帧的数据格式

YModem的数据帧中会预留1024字节空间用来传输文件数据,它跟起始帧接收差不多,如下:
STX 01 FE data[1024] CRCH CRCL

其中STX=0x02,表示这帧数据帧后面包含着1024字节的数据部分;
STX后面的01 FE,01表示第一帧数据帧,FE则是它的取反;
data[1024]表示存放着1024字节的文件数据;
CRCH与CRCL是CRC16检验码的高8位与低8位。

如果文件数据的最后剩余的数据在128~1024之前,则还是使用STX的1024字节传输,但是剩余空间全部用0x1A填充,如下结构:
STX [num] [~num] data[ ] 1A …1A CRCH CRCL
有一种特殊的情况:如果文件大小小于等于128字节或者文件数据最后剩余的数据小于128字节,则YModem会选择SOH数据帧用128字节来传输数据,如果数据不满128字节,剩余的数据用0x1A填充这是数据正的结构就变成了:
文件大小小于128字节:
SOH 01 FE data[ ] 1A …1A CRCH CRCL
文件最后剩余数据小于128字节:
SOH [num] [~~num] data[ ] 1A…1A CRCH CRCL

2.3结束帧数据结构

YModem的结束帧数据也采用SOH的128字节数据帧,它的结构如下:
SOH 00 FF NUL[128] CRCH CRCL

结束帧同样以SOH开头,表示后面跟着128字节大小的数据;
结束帧的帧序也认为是00 FF;
结束帧的128字节的数据部分不存放任何信息,即NUL[128]全部用00填充。

2.4文件传输过程

文件的传输过程,以具体的例子说明。把foo.c,大小为4196Byte(0x1064)的文件作为传输的对象,则它的传输过程如下:

发送端                                        接收端<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    C
SOH 00 FF "foo.c" "1064'' NUL[118] CRC CRC >>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    ACK
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<     C
STX 01 FE data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    ACK
STX 02 FD data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    ACK
STX 03 FC data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    ACK
STX 04 FB data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    ACK
SOH 05 FA data[100]  1A[28] CRC CRC>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    ACK
EOT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    NAK
EOT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    ACK
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    C
SOH 00 FF NUL[128] CRC CRC >>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    ACK

YModem的传输过程就是上面所示。但是上面传输过程中存在许多通信信号,它们的数值与意义如下表所示:

符号数值含义
SOH0x01128字节数据包
STX0x021024字节数据包
EOT0x04结束传输
ACK0x06回应
NAK0x15不回应
CA0x18传输中止
C0x43请求数据包

还是有几点需要说明下:
1)EOT信号由发送端发送
2)CA中止传输信号也有发送端发送
3)C的含义:开始传输时发送C请求起始帧数据,然后再发送C请求文件数据帧,最后有发送一次C请求结束帧!

2.5CRC的计算

YModem的采用的是CRC16-CCITT欧洲版本的CRC校验,它的生成多项式为:x16+x12+x5+1。


附录A 附录

A.1附录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/119650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【嵌入式项目应用】__cJSON在单片机的使用

目录 前言 一、JSON和cJson 二、cJSON是如何表示JSON数据的 三、如何封装完整的JSON数据 1. 先将串口打通&#xff0c;方便电脑查看log日志。 2. 增加cjson.c文件&#xff0c;已经在main.c中 3. 准备打包如下的JSON包 4. 代码部分&#xff0c;先将几个部分初始化指针 …

web - Tomcat服务器

文章目录 目录 文章目录 前言 一 . CS和BS的异同 二 . 什么是Tomcat 二 . Tomcat安装 四 . Tomcat目录结构 bin目录: 用于存放二进制的可执行文件 config目录 server.xml&#xff1a;配置整个服务器信息。例如修改端口号。默认HTTP请求的端口号是&#xff1a;8080 lib目录 log…

VSCode 开发 Vue 语法提示

一. 打开应用商店&#xff0c;搜索 vetur &#xff0c;选择第一个&#xff0c;点击安装。 二. 安装完成后&#xff0c;还可以下载 Vue Language Features 解决代码警告的问题。 最后重启 VSCode 就可以使用啦。另外输入 按回车键还可以自动生成 vue 代码格式哦。 原创作者&…

【机器学习】KNN算法-鸢尾花种类预测

KNN算法-鸢尾花种类预测 文章目录 KNN算法-鸢尾花种类预测1. 数据集介绍2. KNN优缺点&#xff1a; K最近邻&#xff08;K-Nearest Neighbors&#xff0c;KNN&#xff09;算法是一种用于模式识别和分类的简单但强大的机器学习算法。它的工作原理非常直观&#xff1a;给定一个新数…

HTTP请求参数的区别-- Body、Query、Params的区别

在路由中&#xff0c;参数可以通过不同的方式传递&#xff0c;包括body、query和params。这些参数在使用时有一些区别&#xff1a; Body参数&#xff1a;Body参数是通过请求的主体部分传递的数据。通常用于传递较大的数据&#xff0c;例如JSON或XML格式的数据。在HTTP请求中&am…

【20年VIO梳理】

19-20年VIO 梳理 1. 开源代码介绍&#xff1a; DSM2. FMD Stereo SLAM&#xff1a;融合MVG和直接方法&#xff0c;实现准确&#xff0c;快速的双目SLAM3. 基于VINS-Mono开发的SPVIS4. 改进&#xff1a;一种基于光流的动态环境移动机器人定位方案5. PVIO:基于先验平面约束的高效…

网络流探索:解决网络最大流问题的算法集锦

1.初识网络流 网络流一直是初学者心中很难过去的一道坎&#xff0c;很多人说它是一个不像DFS/BFS那么直观的算法&#xff0c;同时网上也有各种参差不齐的材料&#xff0c;让人感到一知半解。 如果你也有这样的感觉&#xff0c;那么不要灰心&#xff0c;坚持住&#xff0c;因为…

flutter doctor检测过程中出现网络超时的问题

flutter安装过程中遇到的问题时&#xff1a; Network resources X A network error occurred while checking "https://maven.google.com/": An HTTP error occurred while checking "https://github.com/": 网络超时 打开flutter根目录 1. 找到配置…

linux音频-IIS音频接口

IIS 总线 IIS(Integrate Interface of Sound)即集成音频接口&#xff0c;在上个世纪 80 年代首先被 Philips 公司用于消费产品的音频设备&#xff0c; I2S规范 I2S总线只能用来处理audio data&#xff0c;而别的信号比如控制信号&#xff0c;编码信号则交给别的模块处理。为了…

【攻克】抓包工具:中文版Fiddler使用 教程-攻克获取微信账单

Fiddler是一款免费网络代理调试工具。 Fiddler是一个蛮好用的抓包工具&#xff0c;可以将网络传输发送与接受的数据包进行截获、重发、编辑、转存等操作。也可以用来检测网络安全。反正好处多多&#xff0c;举之不尽呀&#xff01; 当年学习的时候也蛮费劲&#xff0c;一些蛮…

数据清洗与规范化详解

数据处理流程&#xff0c;也称数据处理管道&#xff0c;是将原始数据转化为有意义的信息和知识的一系列操作步骤。它包括数据采集、清洗、转换、分析和可视化等环节&#xff0c;旨在提供有用的见解和决策支持。在数据可视化中数据处理是可视化展示前非常重要的一步&#xff0c;…

对电磁兼容(EMC)的故障分析和判断方法简述

1. RE&#xff1a;辐射发射&#xff08;RE&#xff09;&#xff08;100k&#xff5e;2.7G)&#xff1a;电磁兼容&#xff08;EMC&#xff09;测试辐射杂散发射 &#xff1a;从骚扰发生源或者接口设备产生电磁发射波、随机的宽带的、由空间传播、测量的工作频率外的辐射干扰 2 …

【学习笔记】[ARC156E] Non-Adjacent Matching

首先&#xff0c;记 S ∑ X i S\sum X_i S∑Xi​&#xff0c;那么恰好有 S 2 \frac{S}{2} 2S​条边&#xff08; S S S为偶数&#xff09;&#xff1b;序列 { X i } \{X_i\} {Xi​}合法的充要条件是&#xff1a; 对于任意 i i i&#xff0c;满足 X i X i 1 ≤ S 2 X_iX_{i1…

上市公司-托宾Q值数据集(2000-2022年)

本文数据为上市公司-托宾Q值数据。托宾Q值是由托宾&#xff08;James Tobin&#xff09;提出的一个指标&#xff0c;用以测量公司的投资机会与市场对其估值的比较。理论上&#xff0c;如果托宾Q值大于1&#xff0c;那么公司的市场价值超过了它的资产价值&#xff0c;这意味着公…

信息科技如何做好风险管理

文章目录 前言介绍亮点结构读者对象 前言 信息科技对金融业务发展所起的作用是举足轻重的。 近年来&#xff0c;金融机构在战略规划中相继引入科技引领的概念。作为金融机构信息科技从业人员&#xff0c;我们笃信信息科技是一个非常有用的工具&#xff0c;一个兼具产品思维和管…

Linux 内核打印(高级字符设备六)

一、dmseg 命令 在终端使用 dmseg 命令可以获取内核打印信息&#xff0c;该命令的具体使用方法如下所示&#xff1a;dmesg 命令   英文全称&#xff1a;display message&#xff08;显示信息&#xff09;   作用&#xff1a;kernel 会将打印信息存储在 ring buffer 中。可以…

Mysql在ubuntu22.04上安装配置

更新并下载Mysql sudo apt update sudo apt install mysql-server启动Mysql服务 sudo systemctl start mysql安全配置 包括设置密码、删除匿名用户、禁止远程root登录等&#xff0c;按提示进行即可。 sudo mysql_secure_installation是否设置密码&#xff1a;是 三种强度密…

DBeaver连接数据库报错:Public Key Retrieval is not allowed 的解决方案

写在前面&#xff1a; DBeaver是一款免费的数据库管理工具&#xff0c;安装也是傻瓜式一键安装&#xff0c;比较推荐。 DBeaver官网&#xff08;加载有点慢&#xff0c;耐心等待&#xff09;&#xff1a;DBeaver Community | Free Universal Database Tool 报错详情&#xff…

Golang链路追踪:实现高效可靠的分布式系统监控

引言 在当今互联网应用的架构中&#xff0c;分布式系统已经成为主流。分布式系统的优势在于能够提供高可用性、高并发性和可扩展性。然而&#xff0c;随着系统规模和复杂性的增加&#xff0c;系统的监控和调试变得越来越困难。为了解决这个问题&#xff0c;链路追踪技术应运而…

ARM,汇编指令

一、汇编指令 1、搬移指令 mov r0 ,#3 mov r1,r0 msr cpsr,r0 mrs r0,cpsr 2、条件执行及标志位 cmp moveq movgt 3、机器码 1&#xff09;、立即数合法性 2&#xff09;、立即数不合法 ldr r0,0x12345678 伪指令解决不合法的问题 前4位表示16个数&#xff0c;一个数移动2次。 …