# Ymodem **Repository Path**: hg91/Ymodem ## Basic Information - **Project Name**: Ymodem - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-22 - **Last Updated**: 2026-07-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Ymodem 接收协议实现 ## 项目概述 本项目实现了 Ymodem 文件传输协议的接收端功能,采用纯 C 编写,具有以下特点: - **轻量化设计**:无操作系统或框架依赖,可灵活集成到任何嵌入式平台中。 - **平台无关性**:支持操作系统(如 Zephyr、FreeRTOS)和裸机(无操作系统)环境。 - **模块化接口**:通过回调函数实现数据传输与事件处理,方便用户自定义。 ## 功能简介 - **文件传输支持**:接收文件的头信息、数据块及结束信号。 - **错误处理机制**:支持 CRC 校验,提供错误回调接口。 - **可扩展性**:支持启用 1K 模式(通过 `YMODEM_1K_ENABLE` 宏配置)。 ## 文件说明 - **`ymodem.h`**: Ymodem 协议的头文件,定义了接口函数和回调类型。 - **`ymodem.c`**: Ymodem 协议的具体实现,包括数据帧解析、校验及错误处理逻辑。 ## 使用方法 ### 1. 初始化 在使用协议前,需调用 `ymodem_init()` 函数完成初始化。 参数包括: - 数据发送函数(`putc_func_t`) - 数据接收函数(`read_func_t`) - 文件信息帧回调(`ymodem_file_handler_t`) - 数据帧回调(`ymodem_data_handler_t`) - 结束帧回调(`ymodem_end_handler_t`) - 错误回调(`ymodem_error_handler_t`) - 系统时间获取函数(`ym_uptime_get_t`) ```c void ymodem_init(putc_func_t putc, read_func_t read, ymodem_file_handler_t rec_file_func, ymodem_data_handler_t rec_data_func, ymodem_end_handler_t end_func, ymodem_error_handler_t err_func, ym_uptime_get_t uptime_get_func); ``` ### 2. 开始接收 调用 `ymodem_start()` 开始接收过程: ```c int ymodem_start(void); ``` 在主循环中定期调用 `ymodem_recv_process()`,处理协议数据帧: ```c int ymodem_recv_process(void); ``` ### 3. 回调函数 根据需要实现以下回调函数,用于接收文件信息、数据块和处理错误: ```c void file_info_callback(char* filename, int filesize); void data_frame_callback(uint8_t frame_num, uint8_t* data, int len); void transfer_complete_callback(void); void error_callback(int error_code); ``` ### 4. 配置选项 - **缓冲区大小**: 默认 `150`,可通过宏 `YMODEM_BUF_SIZE` 修改。 - **超时时间**: 发起请求超时时间(`YMODEM_INITIATE_TIMEOUT`)和数据帧接收超时时间(`YMODEM_REC_TIMEOUT`)。 - **1K 模式**: 是否启用 1K 模式,由宏 `YMODEM_1K_ENABLE` 决定。 在 `ymodem.h` 中调整上述宏配置。 ## 集成注意事项 - **操作系统环境**: 若在操作系统上使用,请确保提供合适的系统时间获取函数。 - **裸机环境**: 在裸机环境下,需提供自定义的串口发送、接收函数及计时函数。 ## 许可证 本项目采用 Apache-2.0 开源许可证。详情请参考源代码中的许可证声明。