详解 Ymodem 协议

ymodem协议!! 在实习公司遇到一个需求,需要用到ymodem协议来传输文件(仪表传输到控制器)。在网上找了很多资料,但是符合的不太多于是写下这个博客来记录一下。 阅读详情

Ymodem 协议概述

Ymodem 是 Xmodem 协议的扩展版本,由 Chuck Forsberg 在 1980 年代提出,主要用于文件传输。它在 Xmodem-1K 的基础上增加了批处理传输、文件名和文件大小支持,并采用 CRC-16 校验提升可靠性。Ymodem 协议分为两种变体:标准 Ymodem(基于 Xmodem-1K)和 Ymodem-g(无校验的流模式)。


Ymodem 帧结构

Ymodem 数据帧基于 Xmodem-1K 的 1024 字节块格式,但扩展了头部信息:

  1. 起始帧(SOH/STX):

    • 首帧为 SOH(128 字节头部)或 STX(1024 字节头部),后续帧通常为 STX。
    • 首帧包含文件名、文件大小(ASCII 格式)及空字节填充。
    • 示例:
      [SOH][00][FF][文件名][文件大小][填充][CRC-Hi][CRC-Lo]
      
  2. 数据帧:

    • 帧号从 1 开始递增(模 256),次帧为 0xFF - 帧号。
    • 数据部分为 1024 字节,不足时用 0x1A(Ctrl-Z)填充。
  3. 结束帧(EOT):

    • 发送方发送 EOT(0x04)表示文件传输结束;接收方回复 ACK(0x06)确认。


传输流程

发送方流程:

  1. 等待接收方发送 'C'(CRC 模式请求)。
  2. 发送起始帧(含文件名和大小)。
  3. 接收 ACK 后发送数据帧,每帧等待 ACK。
  4. 文件结束时发送 EOT,收到 ACK 后发送下一个文件或结束会话。

接收方流程:

  1. 发送 'C' 启动 CRC 模式。
  2. 接收起始帧并解析文件名和大小,回复 ACK。
  3. 接收数据帧并校验,成功则回复 ACK,失败回复 NAK(0x15)重传。
  4. 收到 EOT 后发送 ACK 结束传输。


校验机制

Ymodem 使用 CRC-16 校验(多项式 0x1021),替代 Xmodem 的累加和。校验范围包括帧头、帧号、数据及填充部分。

CRC-16 计算示例(C 语言):

uint16_t crc16(uint8_t *data, size_t len) {  
    uint16_t crc = 0;  
    for (size_t i = 0; i < len; i++) {  
        crc ^= (uint16_t)data[i] << 8;  
        for (uint8_t j = 0; j < 8; j++)  
            crc = (crc & 0x8000) ? (crc << 1) ^ 0x1021 : crc << 1;  
    }  
    return crc;  
}  


Ymodem-g 变体

Ymodem-g 去除了每帧的 ACK/NAK 握手,适用于高速可靠链路(如调制解调器错误纠正模式)。接收方仅在文件结束时发送 ACK,传输失败需完全重传。


典型应用场景

  1. 嵌入式系统固件升级:通过串口或 Bootloader 实现。
  2. 旧式调制解调器通信:支持批处理传输多个文件。

工具示例:

  • Linux 下使用 lrzsz 工具包中的 sz(发送)和 rz(接收)。
  • 终端工具(如 SecureCRT、Minicom)内置 Ymodem 支持。


注意事项

  • 超时处理:默认超时为 10 秒,超时后重传或终止。
  • 文件大小限制:原始协议不支持超过 2GB 的文件。
  • 兼容性:部分实现可能省略文件名传输或使用非标准扩展。

【YModem】YModem串口IAP升级例程+YModem串口工具 目录 YModem协议传输的过程 IAP例程 YModem串口工具 YModem技术手册 手把手教你如何实现自动固件更新 YModem协议是由XModem协议演变而来的,每包数据可以达到1024字节,是一个非常高效的文件传输协议。 阅读详情

相关推荐

Ymodem协议应知应会

Ymodem协议的交互过程,可以通过安装串口监听工具(比如BusHound之类)使用支持Ymodem的客户端软件,监听得到。基本通讯过程如下: 发送端设定好要发送的文件列表,进入YModem等待发送状态 接收端发送"C",告知已准备好,提请发送。 发送端发送首帧,帧头01 00 ff,01标志这是一个传输起始帧,且长度为128字节。 不过注意一个数据帧帧头3个字节,帧尾还有2个字节的CRC,实际是128+5字节。 注意帧头非Word对齐,编码时可能要注意。 首帧中包含有文件名称,大小,时间戳信息。 ...

含光左卫的工作笔记集 5550

Ymodem 协议详解

Ymodem 协议详解 1. Ymodem 帧格式 Ymodem 有两种帧格式,主要区别是信息块长度不一样。 1.1 帧头 帧头表示两种数据帧长度,主要是信息块长度不同。 1.2 包序号 数据包序号只有1字节,因此计算范围是0~255;对于数据包大于255的,序号归零重复计算。 1.3 帧长度 【1】以SOH(0x01)开始的数据包,信息块是128字节,该类型帧总长度为133字节。 【2】以S...

huangdenan的博客 5万+

STM32开发——YModem文件传输协议详解与实现

当发送方发送“C”字符请求文件传输后,接收方向发送方回复一个ACK字符(39行),并等待发送方向其发送数据块。发送数据块时,先计算数据块的CRC16校验和(第68-83行),然后将数据块以及其他控制信息依次通过串口发送(第56-63行),等待接收方的ACK回应(第87-95行)。接收方接收到数据块后,向发送方发送一个ACK(acknowledge)控制字符,表示已经成功接收该数据块。如果发送方发送的数据块传输成功,接收方接收到数据块后会回复一个ACK字符(115或143行),然后将数据块写入文件。

qq_37934722的博客 4347

Ymodem文件传输协议

YMODEM是一种经典的文件传输协议,由在XMODEM的基础上改进而来。它广泛用于嵌入式系统中的固件升级、文件传输等场景。相比XMODEMYMODEM支持更大的数据块、批量文件传输以及额外的元数据信息。在本文中,我们将深入分析YMODEM协议的工作原理,并分享一个简要实现的思路。基于帧的数据传输:YMODEM 使用数据帧进行通信,每帧包含头部、数据块和校验码。支持大数据块:每帧可传输 128 或 1024 字节的数据,传输效率比 XMODEM 更高。批量文件传输。

Lim的博客 1万+

【超详细】基于YOLOv8的PCB缺陷检测

印刷电路板(PCB)瑕疵数据集:是一个公共的合成PCB数据集,由北京大学发布,其中包含1386张图像以及6种缺陷(缺失孔,鼠标咬伤,开路,短路,杂散,伪铜),用于检测,分类和配准任务。本文我们选取了其中适用与检测任务的693张图像,随机选择593张图像作为训练集,100张图像作为验证集。

weixin_45679938的博客 2万+

用scons编译STM32F103工程

想用vscode来实现代码的编辑与调试代码,原先这个工程是用STM32CUBEIDE建立的,参照STM32CUBEIDE的编译过程,编写了下面的scons脚本,scons是初次了解,既然是python脚本,那么会什么就怎么写吧。 import os import sys import glob cross_compiler_prefix = 'arm-none-eabi-' CC = cross_compiler_prefix+'gcc' CXX = cross_compiler_prefix+'g+

cylinc的专栏 1623

STM32 Ymodem 协议及代码解析

STM32 作为 Ymodem 接收端接收升级固件进行升级。   YModem 协议是由 XModem 协议演变而来的,每包数据可以达到 1024 字节,是一个非常高效的文件传输协议。我们平常所说的 Ymodem 协议是指的 Ymodem-1K,除此还有 Ymodem-g(没有 CRC 校验,不常用)。YModem-1K 协议用 1024 字节数据帧传输取代了标准的 128 字节数据帧传输,发送的数据会使用 CRC 校验,保证数据传输的正确性。它每传输一个信息块时,就会等待接收端返回 ACK 信号,接收到响

Jesse_嘉伟的专栏 2万+

别再凭感觉选电容了!手把手教你计算电机控制器里的母线电容(附Excel计算工具)

本文详细解析了电机控制器中母线电容的选型方法,从理论计算到工程实践,帮助工程师避免常见误区。通过精确计算纹波电压、电容容量等关键参数,并结合薄膜电容与电解电容的性能对比,提供实用的选型建议。附带的Excel计算工具可快速完成参数计算,适用于工业伺服驱动和电动车电机控制器设计。

weixin_28720573的博客 518

Ymodem协议详解

Xmodem、Ymodem和Zmodem协议是最常用的三种通信协议。 Xmodem协议是最早的,传输128字节信息块。 Ymodem是Xmodem的改进版协议,具有传输快速稳定的优点。它可以一次传输1024字节的信息块,同时还支持传输多个文件。 平常所说的Ymodem协议是指的Ymodem-1K,除此还有Ymodem-g(没有CRC校验,不常用)。 YModem-1K用1024字节信息块传输取代标准的128字节传输,数据的发送回使用CRC校验,保证数据传输的正确性。它每传输一个信息块数据时,就会等待接收端回

qq_45562008的博客 1万+

从安装Eclipse 开始 开发第一个 CDS View

一篇超级简单快速的 创建CDS VIEW 入门步骤介绍文章。

IT小职员 4249

实战解析:从Innovus到Calibre的LVS错误排查全流程

本文详细解析了从Innovus到Calibre的LVS错误排查全流程,涵盖物理验证关键步骤与工具链协同。通过实战案例分享,重点解决器件不匹配、连接性错误等常见问题,并提供GDS导出规范、网表修正策略等实用技巧,帮助工程师高效完成芯片设计物理验证。

9o8p7i6u5y的博客 1036

Xmodem/Ymodem/Zmodem协议详解

序 Xmodem、Ymodem和Zmodem协议是最常用的三种通信协议。 Xmodem协议是最早的,传输128字节信息块。 Ymodem是Xmodem的改进版协议,具有传输快速稳定的优点。它可以一次传输1024字节的信息块,同时还支持传输多个文件。 Xmodem 之后再填坑 Ymodem 平常所说的Ymodem协议是指的Ymodem-1K,除此还有Ymodem-g(没有CRC校验,不常用)。 YModem-1K用1024字节信息块传输取代标准的128字节传输,数据的发送回使用CRC校验,保证数据传输的正确性

weixin_44058570的博客 2万+

大白话系列:什么是微服务

用大白话和实际例子来通俗易懂地告诉你什么是微服务~

2401_87403086的博客 1242

基于MFC与Ymodem协议的串口文件传输工程实现详解

串口通信是嵌入式系统、工业控制等领域中设备与上位机进行数据交换的基础接口。其点对点、硬件简单的特性使其在可靠性和实时性要求高的场景中广泛应用。在串口上进行文件传输,需要一种可靠的协议来确保数据的完整性与正确性,Ymodem协议正是为此而设计的经典解决方案。它通过引入CRC-16校验、1024字节数据块和停止等待机制,在协议层构建了强大的错误检测与重传能力,从而保障了在不可靠物理链路上的文件传输可靠性。这一技术价值在固件升级、配置下发等嵌入式开发和工业维护场景中尤为突出。本文聚焦于如何在Windows桌面环境

weixin_42715608的博客 261

百度百科 X-Bk-Token 算法还原

百度百科 X-Bk-Token 算法还原

自成背后的博客 1万+

5、高级综合技术:从调度到优化的全面解析

本文深入解析了高级综合技术,涵盖从控制/数据流图构建、调度算法、分配绑定策略到编译器优化的全流程。通过案例分析和对比,探讨了不同优化策略对性能和资源利用的影响,并总结了关键要点及未来发展趋势,为高效利用FPGA实现数字设计提供了全面指导。

night的博客 117

Ymodem 协议详解:从帧格式到 Bootloader 串口升级实战

协议简单:单字节控制字符 + 统一帧结构,资源占用极小,无需复杂状态机;自带元数据:文件头帧携带文件名和大小,接收端可据此做截断和完整性校验;可靠的差错控制:CRC16 强校验 + NAK 重传 + EOT 二次确认,兼顾效率与可靠性。理解并掌握这几个核心点——帧格式、CRC 计算范围、序号回绕、EOT 二次确认、填充截断——就能稳定实现一个健壮的 Ymodem 接收端。本文仅讲解公开的 Ymodem 协议标准与通用嵌入式实现经验,不涉及任何具体项目或产品的内部实现细节。

XavierKong的博客 414

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

STM32串口Ymodem协议IAP升级方案详解与避坑实践

在嵌入式产品开发中,固件升级是量产和运维阶段不可回避的刚性需求。相比ICP和ISP,IAP(应用内编程)允许设备通过运行中的程序自行更新Flash,真正实现“在线升级”。串口通信凭借其硬件普及率高、上位机工具成熟、实现成本低等优势,成为单片机本地升级的首选通道;Ymodem协议则在传输效率与可靠性之间取得了良好平衡,并得到SecureCRT、XShell等工具的广泛支持。基于STM32 HAL库构建Bootloader与App的双分区架构,通过串口中断逐字节驱动协议状态机,配合Flash擦写、向量表偏移和跳

weixin_34234829的博客 554

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: 详解 Xmodem 协议
下一篇: 详解 Zmodem 协议
future studio
博客等级 码龄3年 663粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值