打印
[STM32F1]

STM32 YMODEM协议实战

[复制链接]
1718|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 fhc20181208 于 2019-11-9 12:20 编辑

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字节,传输的是文件名、文件大小、文件修改日期等信息,其中文件名和文件大小信息是必须的。128字节的剩余部分用空字符填充(也就是0)。

  • SOH 00 FF foo.c 3232 NUL[118] CRCH CRCL

  • SOH:表示本帧数据块大小为128字节
  • 00:表示数据帧序号,初始是0,依次向下递增,FF是帧序号的取反
  • foo.c:是要传输的文件名,是ASCII字符串(以空字符结尾)
  • 3232:表示文件的大小,是ASCII字符串(以空字符结尾)
  • NUL[118]:剩余部分用空字符填充
  • CRCH/L:表示16位CRC校验码的高8位与低8位

3. 数据帧的数据格式

YModem的数据帧的数据块大小可以是128字节或者1024字节。

  • // 128字节的数据块
  • SOH 01 FE data[128] CRCH CRCL
  • // 1024字节的数据块
  • STX 01 FE data[1024] CRCH CRCL

一般会使用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进行交互的功能

使用方法:

  • 首先编译IAPBinaryTemplate项目得到bin文件,并将其放在YMODEM上位机的resources文件夹下
  • 然后编译并烧写IAP_Main
  • 最后编译启动YMODEM上位机,根据终端提示的菜单进行操作即可

6.相关资源链接

我没有插入URL链接的权限,获取文中的项目源码,请扫描下方二维码,或者搜索“嵌入式软件杂货铺”添加微信公众号,

并在后台回复“IAP”即可。

使用特权

评论回复
沙发
dongliushui| | 2019-11-10 23:50 | 只看该作者
第一次听说这个协议

使用特权

评论回复
板凳
不爱说话| | 2019-11-11 13:49 | 只看该作者
STM32F103有这个例程,用Ymodem协议从PC下载程序到MCU。

使用特权

评论回复
地板
parameters| | 2019-11-11 19:12 | 只看该作者
没听过这个协议,了解一下

使用特权

评论回复
5
yklstudent| | 2019-11-11 20:42 | 只看该作者
官网就提供的,可以直接用,不过一般不会用

使用特权

评论回复
6
观海| | 2019-12-9 15:54 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
7
guanjiaer| | 2019-12-9 15:57 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
8
heimaojingzhang| | 2019-12-9 15:59 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝