使用Xshell串口通过Ymodem协议发送文件

news2024/11/17 8:54:14

一. 虚拟串口

首先使用虚拟串口软件Free Virtual Serial Ports(下载链接)创建一对虚拟串口,如图COM1和COM2,然后COM1用Xshell连接,COM2用串口助手连接,二者连接的波特率需一致;Xshell创建串口连接时,“名称”可自定为要连接的串口名(如com1),“协议”选择SERIAL,“串口”选择COM1,波特率选择115200,最下面选择“X/YMODEM”中选择分组的大小为1024bytes,即可点击连接;
在这里插入图片描述

二. 开始发送

连接好之后,在Xshell中右键选择“传输”→“YMODEM(Y)”→“用YMODEM发送”→选择要发送的文件,即可开始传输;
在这里插入图片描述

文件开始发送时,串口助手会收到rb -E的命令,可不理会;
在这里插入图片描述

建议使用hex形式进行命令发送;

1. 首帧数据

首先由接收方发送0x43,表示请求建立连接,之后发送方收到之后会发生第一帧数据,第一位是帧头01,表示数据长度为128字节,第二位是帧序(0-255再从0-255循环),第三位是帧序的取反值,而后是文件名和文件大小(单位字节),采用的是十进制ASCII表示,文件名结束字符为:‘\0’,文件大小结束字符为:’ '(即空格),随后还附加了两组数据,暂认为无用,最后两位为CRC16-XMODEM校验(x16+x12+x5+1)的高八位和低八位,CRC检验只校验数据部分,即除去前三位。之后发送(ACK)0x06,接收下一帧;
在这里插入图片描述

2. 继续传输

继续传输,发送(ACK)0x06,接收下一帧;
在这里插入图片描述

3. 结束帧

结束时,最后一帧数据不够会由0x1A填充,接收到最后一帧数据时,再发送(ACK)0x06,接收下一帧,则会收到(结束信号EOT)0x04,发送方需要发送(NAK请求重传)0x15,再次收到(结束信号EOT)0x04,之后再发送0x43,请求结束帧,如图:
在这里插入图片描述

符号 --------数值-----------------含义
SOH--------0x01---------128字节数据包
STX---------0x02--------1024字节数据包
EOT---------0x04------------结束传输
ACK---------0x06---------正确接收回应
NAK---------0x15---------错误接收回应
CAN---------0x18------------传输中止
C-------------0x43------------请求数据

三. 上述流程总结:

发送端- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -接收端
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< C(0x43)
SOH 00 FF “foo.c” "1064’’ NUL[118] CRC CRC >>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK(0x06)
STX 01 FE data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK(0x06)
STX 02 FD data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK(0x06)
STX 03 FC data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK(0x06)
EOT (0x04)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< NAK(0x15)
EOT(0x04)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK(0x06)
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< C(0x43)
STX 00 FF NUL[128] CRC CRC >>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK(0x06)
发送端- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -接收端

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

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

相关文章

css中的z-index是什么

css中的z-index是什么 在 CSS 中&#xff0c;有一个属性可以显式控制 HTML 元素的堆叠顺序&#xff1a;z-index。具有较高值的​​元素就会出现在顶部&#xff1a; <style>.box {position: relative;width: 50px;height: 50px;border: 3px solid;background: silver;}.…

【HAL库】STM32F407----内部Flash的读写

【HAL库】STM32CubeMX开发----STM32F407----目录 一、STM32存储器介绍 STM32存储器分为以下两种&#xff1a; 1. 随机存储器—RAM RAM是与CPU直接交换数据的内部存储器&#xff0c;也叫主存&#xff08;内存&#xff09;。它可以随时读写&#xff0c;而且速度很快&#xff0…

记录--移动端的双击事件好不好用?

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 2023年了&#xff0c;我不允许还有人不会自己实现移动端的双击事件。 过来&#xff0c;看这里&#xff0c;不足 50 行的代码实现的双击事件。 听笔者娓娓道来。 dblclick js原生有个dblclick双击…

大文件上传demo,前端基于Uppy,后端基于koa

前言 文件上传基本上所有的管理系统之类的项目都有这么一个功能。因为使用了Element&#xff0c;可以方便的使用 其提供的Upload组件&#xff0c;对于普通上传来说基本上就够用了。但是有时候会涉及到大文件上传的需求&#xff0c;这时就会面临一些问题&#xff1a;比如文件上…

使用QPixmap显示图片

在QT中&#xff0c;经常需要我们显示图片&#xff08;作为背景&#xff0c;游戏元素&#xff0c;菜单背景&#xff0c;等待&#xff09;。 本文将用最简洁的方法介绍如何将图片素材显示在指定控件的指定位置。 一.基础知识 QPixmap 该类可以加载&#xff08;load&#xff0…

算法:合并两个有序数组---双指针[1]

1、题目&#xff1a; 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&a…

什么是websockret连接

什么是WebSocket WebSocket&#xff0c;是一种网络传输协议&#xff0c;位于 OSI 模型的应用层。可在单个 TCP 连接上进行全双工通信&#xff0c;能更好的节省服务器资源和带宽并达到实时通迅 客户端和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&am…

一种结合白平衡统计信息和曝光信息的软光敏算法专利学习(专利三)

基础理论&#xff1a; 亮度计算&#xff1a; 对于白天模式而言&#xff0c;IR滤光片处于过滤红外光的状态&#xff0c;也就是说&#xff0c;摄像机的感光芯片所感受到的环境光中的红外光几乎为零&#xff1b;而对于夜晚模式而言&#xff0c;IR滤光片处于不过滤红外光的状态&am…

ABB 3BHB002916R0001 UFC721AE模拟输入卡

通道数目&#xff1a; UFC721AE 模拟输入卡通常具有多个输入通道&#xff0c;可以同时监测多个模拟信号。 输入类型&#xff1a; 这种卡片通常支持不同类型的模拟输入&#xff0c;例如电压信号、电流信号或其他传感器信号。 精度&#xff1a; UFC721AE 模拟输入卡通常具有高精…

树莓 LUMA-OLED.EXAMPLE使用

详细介绍在文件目录下的README.rst中 第一步 $ sudo usermod -a -G i2c,spi,gpio pi //好像没什么用 $ sudo apt install python3-dev python3-pip python3-numpy libfreetype6-dev libjpeg-dev build-essential //安装依赖包&#xff0c;树莓派中好像已经有了 $ sudo a…

Seata 笔记

Seata 笔记 分布式事务理论基础 CAP 定理 Consistency 一致性&#xff1a;用户访问分布式系统中的任意节点得到的结果都是一致的Availability 可用性&#xff1a;用户和访问任意健康节点都必须得到响应而不是超时拒绝Partition tolernance 分区容错性&#xff1a;出现独立分…

解决本地jar包导入maven

1、确定是否安装maven 2、输入导入命令 命令说明 <path-to-file>为你jar包所在的路径&#xff08;尽量简单并且不要含中文&#xff09; <group-id>为grouId号&#xff0c;与<artifact-id>组成唯一识别你jar包的坐标&#xff0c;当不在公共资源jar包中&#…

libbpf-bootstrap安卓aarch64适配交叉编译

1.为什么移植 疑惑 起初我也认为&#xff0c;像libbpf-bootstrap这样在ebpf程序开发中很常用的框架&#xff0c;理应支持不同架构的交叉编译。尤其是向内核态的ebpf程序本身就是直接通过clang的-target btf直接生成字节码&#xff0c;各个内核上的ebpf虚拟机大同小异&#xf…

万字解读 Android 车机核心 :CarService 的构成和链路~

前言 关于 Android 车机&#xff0c;之前分析过方控上自定义按键的输入机制和中控上旋钮输入的原理&#xff0c;但都局限于 Car Service 内 Input 相关模块。 一文了解 Android 车机如何处理中控的旋钮输入从实体按键看 Android 车载的自定义事件机制 本文将结合 Android 系…

LabVIEW开发感应电机在线匝间短路故障诊断系统

LabVIEW开发感应电机在线匝间短路故障诊断系统 工业中使用的超过85%的电动机是三相感应电动机。它们因其可靠性、设计便利性、高性能和过载能力而被广泛用于不同的应用&#xff0c;例如制造、加工、电力系统、运输等。无论它们的能力如何&#xff0c;它们都被认为是现代工业学…

Consider defining a bean of type问题解决

Consider defining a bean of type问题解决 Consider defining a bean of type问题解决 包之后&#xff0c;发现项目直接报错Consider defining a bean of type。 会有一些包你明明Autowired 但是还是找不到什么bean 导致你项目启动不了 解决方法一: 这个问题主要是因为项目拆包…

安卓 MeasureCache优化了什么?

安卓绘制原理概览_油炸板蓝根的博客-CSDN博客 搜了一下&#xff0c;全网居然没有人提过 measureCache。 在前文中提到过&#xff0c;measure的时候&#xff0c;如果命中了 measureCache&#xff0c;会跳过 onMeasure&#xff0c;同时会设置 PFLAG3_MEASURE_NEEDED_BEFORE_LAYOU…

【已解决】oracle获取最近2学年的数据

已解决 &#xff1a;oracle获取最近2学年的数据 SELECT * FROM (SELECT * FROM xx.JWXT_XSKB WHERE AND xn IN (‘2023-2024’,‘2022-2023’)); 问题 某某系统课表数据过大&#xff0c;要求只获取最近2学年的数据&#xff0c;不能写死。 思路 mysql 在子查询的WHERE子句中…

从0到1学会Git(第二部分):Git的本地操作和管理

写在前面:本文介绍了在本地仓库进行文件的处理以及本地的合并等操作。 前置知识:文件可以处在三个区域&#xff0c;分别为工作区&#xff0c;暂存区和本地仓库&#xff0c;我们此文的目标即是将文件存储在本地仓库中。我们可以将文件的区域理解为&#xff0c;cpu中&#xff0c…

苍穹外卖技术栈

重难点详解 1、定义全局异常 2、ThreadLocal ThreadLocal 并不是一个Thread&#xff0c;而是Thread的一个局部变量ThreadLocal 为每一个线程提供独立的存储空间&#xff0c;具有线程隔离的效果&#xff0c;只有在线程内才能取到值&#xff0c;线程外则不能访问 public void …