STM32—OTA-YModem
目录
第1章 YModem协议
1.1 Ymodem协议简介
1.2 Ymodem协议帧格式
1.3 Ymodem协议传输过程
1.4 CRC16函数
1.5 Ymodem传输数据大小选择
第2章 程序的分散装载技术
2.1 Flash内存规划
2.2 程序执行流程
第1章 YModem协议
SecureCRT内部和Uboot内部都默认内嵌了Ymodem协议。
1.1 Ymodem协议简介
协议 | 优点 | 缺点 | 适用场景 |
Xmodem | 极其简单,资源占用最小 | 无法传输文件名和大小 ,检错能力弱 (Checksum) | 非常古老或资源极度受限的场景,现已很少用于IAP |
Ymodem | 功能/资源/实现复杂度平衡,传输元数据,CRC校验 | 速度不如Zmodem(停等协议),无内置安全机制 | 最经典的串口IAP场景,资源受限的MCU |
Zmodem | 速度快(流式传输,出错才重传),支持断点续传 | 实现比Ymodem复杂,资源占用稍多 | 对传输速度要求较高的场景 |
1.2 Ymodem协议帧格式
1.2.1 起始帧
1.2.2 数据帧
1.2.3 结束帧
1.3 Ymodem协议传输过程
1.4 CRC16函数
1.5 Ymodem传输数据大小选择
包头=SOH(0x01)时,帧长度是128bytes + 5bytes(包头+包号+包号取反+CRC16)。
同理,包头=STX(0x02)时,帧长度是1024bytes + 5bytes。
Ymodem协议的设计,有点像一个物流系统,可以选用不同尺寸的箱子来寄送货物。
SOH (0x01): 代表一个“小箱子”,能装 128 字节的货物。
STX (0x02): 代表一个“大箱子”,能装 1024 字节的货物。
在一次完整的“寄件”(文件传输)过程中,发送方和接收方可以协商决定主要使用哪种箱子。
灵活策略(混合使用大小箱子):
发送方可以根据每批“货物”(数据块)的多少,来动态选择用大箱子还是小箱子。比如,大部分时候用1024字节的STX大箱子,但最后一批货物只有80字节,就可以换成128字节的SOH小箱子来装,这样更节省空间(传输带宽)。这是完全符合YMODEM协议规范的。
简单策略(只用一种大箱子)- (我的代码目前采用的策略):
类比: 为了简化流程,物流公司决定,无论货物多少,一律使用1024字节的STX大箱子。如果货物装不满,就用填充物(比如泡沫或旧报纸)把箱子塞满。
第2章 程序的分散装载技术
2.1 Flash内存规划
2.2 程序执行流程
参考链接