本帖最后由 fhc20181208 于 2019-11-9 12:20 编辑
YMODEM协议是一个文件传输协议,由Chuck Forsberg于上世纪90年代开发完成,通常用于资源受限的设备。 ST官方在STM32CubeHAL库中提供了一个IAP例程,其使用的便是YMODEM协议。这个协议有比较多的变种(YMODEM作者在其协议手册中提及),以至于大家的实现不太一样,本文以STM32CubeHAL库中IAP例程的实现为标准。 下面先对YMODEM协议进行介绍,然后进行代码实现和例程试验。 1. YMODEM协议简介YMODEM协议的传输过程如下图所示(摘自YMODEM协议手册): 2. 起始帧的数据格式YMODEM的起始帧的数据块大小为128字节,传输的是文件名、文件大小、文件修改日期等信息,其中文件名和文件大小信息是必须的。128字节的剩余部分用空字符填充(也就是0)。 SOH:表示本帧数据块大小为128字节 00:表示数据帧序号,初始是0,依次向下递增,FF是帧序号的取反 foo.c:是要传输的文件名,是ASCII字符串(以空字符结尾) 3232:表示文件的大小,是ASCII字符串(以空字符结尾) NUL[118]:剩余部分用空字符填充 CRCH/L:表示16位CRC校验码的高8位与低8位
3. 数据帧的数据格式YModem的数据帧的数据块大小可以是128字节或者1024字节。 一般会使用1024字节的数据块进行传输,这样可以加快传输速度,如果最后文件数据不足1024字节,则将其拆分为128字节的数据块进行传输,如果拆分后有不足128字节的数据依然按照128字节的数据块进行传输,但是剩余空间全部用0x1A填充,以表示文件结束。 4. 结束帧数据结构当文件传输结束时,除了发送EOT传输结束指令外,还需要发送一个结束帧。YModem的结束帧与起始帧的数据格式相同,数据块大小为128字节,但是结束帧的数据块要全用空字符填充。SOH 3A C5 NUL[128] CRCH CRCL 5. YMODEM协议实战预备资源: STM32开发板及下载器 IAP_Main,它实现了通过YMODEM协议传输文件和Flash操作 IAPBinaryTemplate,它是用来生成待升级bin文件的 YMODEM上位机,它实现了与STM32通过YMODEM传输文件,通过USART进行交互的功能
使用方法: 6.相关资源链接我没有插入URL链接的权限,获取文中的项目源码,请扫描下方二维码,或者搜索“嵌入式软件杂货铺”添加微信公众号, 并在后台回复“IAP”即可。
|