YMODEM协议是一个文件传输协议,由Chuck Forsberg于上世纪90年代开发完成,通常用于资源受限的设备。
ST官方在STM32CubeHAL库中提供了一个IAP例程,其使用的便是YMODEM协议。这个协议有比较多的变种(YMODEM作者在其协议手册中提及),以至于大家的实现不太一样,本文以STM32CubeHAL库中IAP例程的实现为标准。
下面先对YMODEM协议进行介绍,然后进行代码实现和例程试验。
1. YMODEM协议简介
YMODEM协议的传输过程如下图所示(摘自YMODEM协议手册):
其中“sb foo.*”指的是Linux中的sb命令,可在Linux终端执行 sb --help查看使用方法
上图中YMODEM协议传输的数据块是128字节,其实YMODEM协议还支持1024字节的数据块,或者128字节和1024字节混合模式。详情请查阅YMODEM协议手册。
SOH 表示本数据块大小为128字节
STX 表示本数据块大小为1024字节
本文中EOT指令仅有一次会话,即上图中的最后一次
2. 起始帧的数据格式
YMODEM的起始帧的数据块大小为128字节,传输的是文件名、文件大小、文件