你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32固件升级之 Ymodem 协议(二)

[复制链接]
STMCU小助手 发布时间:2022-11-27 21:00

了解了基础知识之后就可以使用某种传输方式进行 bin 文件的传输,这里介绍 YModem 协议,当然也可以使用 Modbus 等其他协议进行传输。YModem 协议是从 XModem 协议演变而来的,每包数据最多可以达到 1024 字节,是一个非常高效的文件传输协议。


下面是传输过程:

首先接收方发送字符‘C’,等待发送方接收,如果接收方没有准备好,则接收方持续发送‘C’。

接收方收到 C 后,开始发送第一帧数据:

640.jpg

字符:字符为 ASCII 码,指定的几个特定字符。比如 SOH,查询 ASCII 码可以知道是 0x01,它代表该帧有 128byte 数据。如果是 STX 则有 1024byte。

O(K}~0]N))({$M1HB0P4B1U.png

编号:编号从 0 开始,根据帧数增加,达到 0xFF 从 0 开始继续递增。比如第一帧发送文件名时的编号为 0x00。程序处理的时候在一开始设置一个变量为 0,每接收一帧数据递增,并且和接收的编号进行对比,如果接收的编号和程序的变量不一致,说明接收错误。编号的反码是对编号进行校验使用的,以确定编号的正确性。比如编号为 0x00,反码为 0xFF。

数据区:固定长度,不足的填充 0x00。可以是 128 字节也可以是 1024 字节,根据帧头字符确定。传输文件名时是完整的文件名,如 “helloword.bin”, 后面填充 0。有的传输软件在传输完文件名这一帧数据后可能会再传输一帧含有文件大小的数据帧(数据区不足还是填充 0),可以根据实际情况测试。

CRC16:只对数据区进行校验,不对前三个字节校验。高字节在前,低字节在后。

接收方接收到第一帧含有文件名的数据帧之后,开始发送 ACK 进行确认应答,并发送字符‘C’,发送方收到‘C’后开始接收第二帧数据,这里包含文件内容的一部分。接收方接收到这帧数据后,发送 ACK 应答,等待第三帧数据,继续 ACK 应答,继续接收……知道接收方接收到所有数据。

当发送方发送完最后一帧数据并接收到 ACK 后,发送 EOT,接收方接收到之后,接收方发送 NAK,发送方继续发送 EOT,这一次接收方发送 ACK。然后接收方再发送‘C’,如果发送方没有下一个文件需要传输,就会发送如下帧:

SOH 00 FF 00~00(共 128 个) CRCH CRCL

接收方接收到后,正式结束此次传输。

ACK、NAK、EOT 的 ASCII 码如下:

ON7B%I]JS@V4RAE5P7EK8IG.png

下面为传输具体过程,以文件大小不足三帧数据为例,黄色为接收方发送的数据。
微信图片_20221126215047.jpg

以下为 CRC 校验代码:

微信图片_20221126215043.jpg

转载自:鱼鹰谈单片机

收藏 评论0 发布时间:2022-11-27 21:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版