# ymodem_c **Repository Path**: xuanlinzhu/ymodem_c ## Basic Information - **Project Name**: ymodem_c - **Description**: 纯C实现ymodem协议 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 15 - **Forks**: 5 - **Created**: 2024-05-28 - **Last Updated**: 2026-04-11 ## Categories & Tags **Categories**: web-dev-toolkits **Tags**: None ## README # YMODEM 协议实现 ## 项目简介 本项目提供了 YMODEM 协议的开源实现,包含纯 C 实现版本和 Qt 版本。YMODEM 是一种流行的文件传输协议,在串口通信中广泛使用。 ## 项目结构 ``` . ├── app_qt/ # Qt GUI 版本 │ ├── main.cpp # 主程序入口 │ ├── mainwindow.cpp # 主窗口实现 │ ├── mainwindow.h # 主窗口头文件 │ ├── mainwindow.ui # Qt UI 文件 │ ├── ymodem.c # YMODEM 协议C实现 │ ├── ymodem.h # YMODEM 协议头文件 │ ├── ymodem_c.pro # Qt 项目文件 │ └── XMODEM-YMODEM-Protocol-Refrence.pdf # 协议参考文档 │ └── auto_ymodem/ # 自动YMODEM传输工具 ├── Ymodem.cpp # YMODEM 核心类实现 ├── Ymodem.h # YMODEM 核心类头文件 ├── YmodemFileReceive.cpp # 文件接收实现 ├── YmodemFileReceive.h # 文件接收头文件 ├── YmodemFileTransmit.cpp # 文件传输实现 ├── YmodemFileTransmit.h # 文件传输头文件 ├── widget.cpp # 主界面控件实现 ├── widget.h # 主界面控件头文件 ├── widget.ui # Qt UI 文件 ├── main.cpp # 主程序入口 └── SerialPortYmodem.pro # Qt 项目文件 ``` ## 功能特性 ### app_qt 版本 - 纯 C 实现的 YMODEM 协议 - 支持串口数据收发 - CRC16 校验 - 支持 128 字节和 1024 字节数据包 ### auto_ymodem 版本 - 基于 Qt 的图形界面 - 支持文件自动接收和发送 - 进度显示 - 超时和错误重试机制 - 状态指示 ## 编译说明 ### 环境要求 - Qt 5.x 或更高版本 - Qt SerialPort 模块 ### 编译步骤 **app_qt 版本:** ```bash cd app_qt qmake ymodem_c.pro make ``` **auto_ymodem 版本:** ```bash cd auto_ymodem qmake SerialPortYmodem.pro make ``` ## YMODEM 协议简介 YMODEM 是 XMODEM 的增强版本,主要改进包括: - 支持 1024 字节大数据包 - 使用 CRC16 校验替代校验和 - 支持批量文件传输 - 传输效率更高 ### 协议数据包格式 | 字段 | 长度 | |------|------| | SOH/STX | 1 字节 | | 包序号 | 1 字节 | | 包序号取反 | 1 字节 | | 数据区 | 128/1024 字节 | | CRC16 | 2 字节 | ## 使用说明 ### 作为库使用 将 `ymodem.c` 和 `ymodem.h` 添加到您的项目中,注册数据收发回调函数后即可调用 `ymodem_send()` 和 `ymodem_recv()` 进行文件传输。 ```c // 注册回调函数 ymodem_register(put_data, get_data); // 发送文件 ymodem_send(buff, bufsize, filename); // 接收文件 ymodem_recv(buff, bufsize, filename); ``` ## 许可证 本项目仅供学习交流使用。 ## 参考资料 - 协议详细说明请参考 `app_qt/XMODEM-YMODEM-Protocol-Refrence.pdf` - YMODEM 协议最初由 Chuck Forsberg 定义