Ymodem协议应知应会

news2024/11/25 0:56:03

1.优势

在嵌入式环境中,一旦需要和设备之间通过某种协议传输文件,Ymodem协议因为具备如下特征:

  • 基本的流控
  • 基本的握手
  • 支持多文件传输
  • 支持校验
  • 协议精简,代码量少
  • 用众多既有客户端软件可以供测试,免写上位机程序。

因此,很容易被选作交互协议。

Ymodem协议的交互过程,可以通过安装串口监听工具(比如BusHound之类的),然后使用支持YModem协议的终端软件,彼此通讯,然后了解交互过程。下面为了节省大家开发的时间,把这个过程梳理一下

2.基本通讯流程

其基本的通讯过程如下:

  1. 发送端设定好要发送的文件列表,进入YModem等待发送状态
  2. 接收端发送"C",告知已准备好,提请发送。
  3. 发送端发送首帧,帧头01 00 ff,01标志这是一个传输起始帧,且长度为128字节。
    1. 不过注意一个数据帧帧头3个字节,帧尾还有2个字节的CRC,实际是128+5字节。
    2. 注意帧头非Word对齐,编码时可能要注意。
  4. 首帧中包含有文件名称,大小,时间戳信息。
  5. 接收方接收完毕,处理完毕,回送06 - AK.提示可以继续发送,否则回送15 - NAK,表示需要重传。
  6. 接下来就直接开始传输这个文件了 01帧头不变,第二字节递增,第三字节递减,所以下一个帧头是:01 01 fe,第二字节|第三字节始终等于0xff.
  7. 数据帧始终是整齐的,128+5或者是1024+5。文件发送的最后一个帧如果不足帧长,会添补后再法。
  8. 然后发送方会发送04-EOT,单字节结束整个发送。
  9. 对于04-EOT,据说体面的做法是两次回送,接收方先回NAK,发送方,重复发送EOT,然后接收方发送ACK,结束这个文件的发送。
  10. 注意,因为YModem是一个多文件传输协议。发送方会在文件列表清空后,发送一个空的01 00 ff帧,内容为空。仍然是128+5字节。这个时候,接收方回送ACK。结束YModem的整个发送过程。

上面仅给出了单个文件的传输过程,多文件的传输过程,可以自行模拟得之。

3.通信过程截屏

注意,下面的截屏中:IN是下位机外设发回的数据,Out是计算机自己。

  •  2.1.0时,下位机发出准许发送的信号。
  • 随即上位机发出首帧,包含文件信息的128Bytes.(3.1.0~3.1.128)。帧头帧尾会多出5个字节,非常清晰地可以看到。
  • 4.1.0 只发06 - ACK即可,多发了一个“C”
  • 5.1.0是文件的首帧,帧头01 01 fe 注意 01 fe互补。

下面看文件发送完毕的结束部分:

  • 4422.1.0是对文件倒数第二帧的应答,06 - ACK
  • 4423.1.0~4423.1.128 是文件传输的最后一帧,它里面有补齐的部分,用1a补齐了。
  • 4424.1.0设备回应最后一帧收讫。06 -  ACK
  • 4425.1.0 上位机回送单字节帧 04 - EOT
  • 4426.1.0 设备回应 Parden? 15 - NAK
  • 4427.1.0 设备重发04 -EOT

接下来的设备和发送方应有的举止,你是知道的,对吧?还有三帧交互:

  1. 设备要发ACK
  2. 然后上位机要发送一个空的文件帧,表示发完了。128+5字节。
  3. 设备回应ACK。终结掉此次传输过程。

 上面的截屏,可以看到这个最终的文件发送完毕后的握手过程。

实际测试,使用SecureCRT与下位机通讯进行YModem文件传输的过程:

Starting ymodem transfer.  Press Ctrl+C to cancel.
Transferring main.c...
  100%       2 KB       2 KB/sec    00:00:01       0 Errors  
Transferring Pic18F45K22.mc3...
  100%     276 KB       4 KB/sec    00:01:09       0 Errors  
Transferring test.dat...
  100%      53 KB       4 KB/sec    00:00:13       0 Errors  

First Edition: Jul05,2023
Last Edition: Jul05,2023 11:45

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

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

相关文章

C++11:右值引用

文章目录 1. C左值和右值2. C右值引用 右值引用是一种新的 C 语法,基于右值引用引申出了 2 种 C 编程技巧,分别为移动语义和完美转发。本文主要介绍什么是右值引用以及它的基本用法。 1. C左值和右值 右值引用可以从字面意思上理解,指的是以…

【springboot+云计算】B/S医院信息管理系统源码(云HIS)

一、基于云计算技术的B/S架构的医院管理系统(简称云HIS) 采用前后端分离架构,前端由Angular框架、JavaScript语言开发;后端使用Java语言开发。系统遵循服务化、模块化原则开发,具有强大的可扩展性,二次开发方便快捷。为医疗机构提…

2023最新ChatGPT商业运营网站源码+支持ChatGPT4.0+新增GPT联网功能+支持ai绘画+实时语音识别输入+用户会员套餐+免费更新版本

2023最新ChatGPT商业运营网站源码支持ChatGPT4.0新增GPT联网功能支持ai绘画实时语音识别输入用户会员套餐免费更新版本 一、AI创作系统二、系统程序下载三、系统介绍四、安装教程五、主要功能展示六、更新日志 一、AI创作系统 提问:程序已经支持GPT3.5、GPT4.0接口…

Python之全-新-深-细详解

文章目录 第一章 Python环境搭建1.1. 计算机基础1.1.1. 什么是编程1.1.2. 什么是进制1.1.2.1. 进制的简介1.1.2.2. 进制的分类1.1.2.3. 进制的表示1.1.2.4. 进制的转换1.1.2.5. 原反补(了解)数据的转换负数的表示补码的引入 1.2. Python的介绍1.3. Python的安装与使用1.3.1. Py…

SSM简单项目遇到的几个问题

这几个问题,干扰了我很长时间。 主要因为书本的例子,是通过controller层返回到jsp层。但是,最后一个SSM项目,它用的是controller返回信息给Service层,再由Service层返回Jsp层。 实训:编写一个模糊查询姓名…

前端(三)——MVC与MVVM模式的battle

😄博主:小猫娃来啦 😄文章核心:mvc模式mvvm模式的battle 文章目录 mvc模式是什么mvc模式的优缺点优化mvc模式致命的缺点mvvm是什么,和mvc有什么关系?细看mvvm和mvc的不同 mvvm的缺点简化视图层开发 mvc模式…

E类逆变器Ltspice仿真

1 参数计算(待续) (1)确定振荡频率: (2)计算各器件参数; 2 电路仿真 (1)电路图 (2)电路分析 3 结果 (1)…

vue项目业务实现,视频监控-文件流,大屏适配方案(v-scale-screen),websocket前端

最近把以前的业务场景及解决方案整理了一下,具体实现的工具如下: 监控-视频文件流>video.js videojs-contrib-hls 大屏适配方案> v-scale-screen websocket>sockjs-client webstomp-client 视频监控-文件流 使用方法 下载video插件&#xf…

数字IC基础:状态化简与等价状态

相关阅读 数字IC基础知识:著名EDA公司与工具介绍 如果时序机的两个状态对于所有可能的输入序列都具有相同的输出序列(和相同的下一状态),则称这两个状态是等价的。时序机的等价状态无法通过观察输出序列的异同对其加以区分&#…

【Web3】认识以太坊钱包

目录 区块链钱包概念 密码 私钥 Private Key 公钥Public Key Keystore 助记词 Mnemonic 如何解锁账户 区块链钱包概念 钱包用来存钱的,在区块链中,我们的数字资产都会对应到一个账户地址上, 只有拥 有账户的钥匙(私钥&…

【网络进阶】Posix API与网络协议栈(五)

文章目录 1. ARP协议1.1 ARP协议的定义1.2 ARP协议的工作过程1.3 ARP协议的数据结构1.4 ARP欺骗1.5 ARP协议的局限性1.6 ARP协议与Posix API的关系 2. ARP协议例子3. ICMP协议3.1 ICMP协议的定义3.2 ICMP协议的类型3.3 ICMP协议的工作原理3.4 ICMP协议的应用3.5 ICMP协议的局限…

软考:中级软件设计师:操作系统,进程管理,前趋图,进程同步互斥,PV操作,

软考:中级软件设计师:操作系统 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 &…

Openlayers实战:地图上显示经纬度坐标

Openlayers地图中,鼠标移动,其位置的经纬度坐会经常显示在页面中。 在我们的实战课程里,详细讲一下其做法,成为一个主力的应用。 效果图 源代码 /* * @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN) * @此源代码版权归大剑师兰特所有,可供学习或商业项目…

vue中如何引入插件并使用

Vue中的插件类型 vue中有大致有三种类型的插件,第三方插件、基于vue开发的插件及基于vue开发的组件 第三方插件 如:jquery、moment.js、aixos、Highcharts等 注意:Highcharts也有基于vue开发的插件版本,具体使用方法参见下文 …

C++中的类

1、类和对象 C中通过class定义类 class A {int a; }; // 定义一个A类型的类通过类来定义对象 A a; // 定义一个A类型的对象类是一张蓝图,是抽象的。而对象是根据蓝图真正建造出来的建筑,是具象的。 对象是类的实体化 2、类的限制修饰符 类有三种修…

xmrig病毒删除

删除病毒 [rootnode101 .mint-xmr]# top | headPID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND 15870 root 20 0 4597844 2.0g 4 S 1017 3.3 52:05.95 xmrig[rootnode101 .mint-xmr]# ll /proc/15870/exe lrwxrwxrwx. 1 root ro…

【C#】SqlBulkCopy批量添加注意DataTable必须与表列顺序一致,否则报错,以及关闭自增列

前篇文章在测试一个批量添加的操作,发现一致添加不成功,最后分析是字段列顺序不一致的问题 目录 1、列名不一致1.1、错误信息1.2、解决方法 2、关闭自增列2.1、不包含列2.2、特性关闭 1、列名不一致 1.1、错误信息 在调试时,一致提示如下错…

基于 Flink SQL CDC的实时数据同步方案

基于 Flink SQL CDC的实时数据同步方案http://www.dreamwu.com/post-1594.html

iframe编码为utf-8.嵌入页面为gb2312 ,word导出默认为gb2312 格式

使用记事本打开html,另存为,保存类型选择:"所有文件"、编码选择:“UTF-8”打开保存后文件编码类型改成utf-8 第一个步骤是为了把内容改成utf-8,然后直接执行第二步改编码可能会报乱码

解决printJS打印问题汇总

目录 一、打印预览表格列不全(Element的el-table组件) 1、打印设置“打印缩放” 2、修改el——table的底层代码(如果页面上有多个表格慎用) 一、打印预览表格列不全(Element的el-table组件) 问题描述&a…