概要
记录调试Ymode传输Bin文件的经验,分享给大家
Ymode传输协议的传输流程通常包括以下几个关键步骤。这些步骤确保数据在设备之间可靠地传输。虽然具体实现可能因应用场景而异,以下是一个典型的Ymode传输流程概述:
1. 初始化连接
- 设备检测:在开始通信之前,设备需要检测网络中其他设备的存在。这通常通过广播或寻址机制完成。
- 连接建立:一旦设备发现彼此,它们会协商连接参数,如数据速率和协议版本,以建立通信链接。
2. 数据准备
- 数据封装:发送方将要传输的数据封装成Ymode数据包,包括头部、有效载荷和校验信息。头部通常包含源地址、目标地址、数据长度和类型等信息。
- 错误检测:在数据封装期间,发送方会计算校验和或哈希,以帮助在接收方进行错误检测。
3. 数据发送
- 数据传输:发送方通过物理媒介(如电力线或无线信号)将数据包发送给接收方。
- 信道管理:在发送数据时,Ymode协议会管理信道以避免干扰,这可能涉及时隙分配或频率跳变。
4. 数据接收
- 数据接收:接收方在指定的信道上监听数据包,并接收到信息后进行初步处理。
- 错误检测:接收方通过校验和或其他错误检测方法确认数据的完整性。如果发现错误,接收方可以请求重发数据。
文件的传输过程,以具体的例子说明。把foo.c,大小为4196Byte(16进制为0x1064)的文件作为传输的对象,则它的传输过程如下:
发送端----------------------------------------------------------------接收端
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< C
SOH 00 FF “foo.c” "1064’’ NUL[118] CRC CRC >>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< C
STX 01 FE data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK
STX 02 FD data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK
STX 03 FC data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK
STX 04 FB data[1024] CRC CRC>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK
SOH 05 FA data[100] 1A[28] CRC CRC>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK
EOT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< NAK
EOT>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< C
SOH 00 FF NUL[128] CRC CRC >>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ACK
5. 确认与响应
- 发送确认:接收方在成功接收数据并验证其完整性后,会向发送方发送确认消息(ACK),通知其数据已成功接收。
- 重传机制:如果接收方检测到错误或未收到数据,会发送非确认消息(NACK),请求重新发送数据包。
6. 连接终止
- 会话结束:在数据传输完成后,设备可以选择继续保持连接或终止会话。如果保持连接,可以随时回复传输新的数据;如果终止,则进入解除连接流程。
Ymode帧格式
名称 | 结构 | 长度byte | 备注 |
---|---|---|---|
帧头 | SOH/STX | 1 | SOH表示数据域128 字节,STX表示数据域1024 字节 |
帧序号 | Fn | 1 | 包序号,到255后归零 |
帧序号取反 | XFN | 1 | 包序号取反(~) |
数据域 | DATA | 128/1024 | 数据域,数据不足的填充0x1A |
校验码 | CRC | 2 | 针对数据域校验 |
起始帧
帧头 | 帧序号 | 帧序号取反 | 数据 | 校验 |
---|---|---|---|---|
SOH | 0 | FF | data[128] | CRC |
数据帧
提示:当帧序号大于 255 后,序号重新从 0 开始累加;
帧头 | 帧序号 | 帧序号取反 | 数据 | 校验 |
---|---|---|---|---|
STX | 1~255 | 255~1 | data[1028] | CRC |
结束帧
提示:结束帧的长度有两种情况,最后一包如果不足128字节,则按SOH帧发送,否则按STX的1024字节发送
帧头 | 帧序号 | 帧序号取反 | 数据 | 校验 |
---|---|---|---|---|
SOH/STX | 0 | FF | data[128]/data[1024] | CRC |
总结和补充
Ymod协议适合单片机升级使用,或者传输一些比较大的文件。
引用链接:
Ymodem 协议详解