历史上的今天
今天是:2025年03月24日(星期一)
2019年03月24日 | STM32学习笔记之Bootloader升级Ymodem协议简介
2019-03-24 来源:eefocus
YModem协议
YModem协议是由XModem协议演变而来的,每包数据可以达到1024字节,是一个非常高效的文件传输协议 。
源码宏定义
#define SOH (0x01) /* start of 128-byte data packet /
#define STX (0x02) / start of 1024-byte data packet /
#define EOT (0x04) / end of transmission /
#define ACK (0x06) / acknowledge /
#define NAK (0x15) / negative acknowledge /
#define CA (0x18) / two of these in succession aborts transfer /
#define CRC16 (0x43) / ‘C’ == 0x43, request 16-bit CRC */
下面先看下YModem协议传输的完整的握手过程:

SENDER:发送方;
RECEIVER:接收方;
第一步先由接收方,发送一个字符’C’;
发送方收到’C’后,发送第一帧数据包,内容如下:
SOH 00 FF Foo.c NULL[123] CRCH CRCL
**第1字节SOH:**表示本包数据区大小为128字节,如果头为STX表示本包数据区大小为1024;
第2字节00: 编号,第一包为00,第二包为01,第三包为02依次累加,到FF后继续从0循环递增。
**第3字节FF:**编号的反码,编号为 00 对应 FF,为 01 对应FE,以此类推。
第4字节到最后两字节:若第1字节为SOH时有128字节,为STX时有1024字节,这部分为数据区。“Foo.c” 文件名, 超级终端下,在文件名后还有文件大小。官方dome也是因为使用了这个文件大小进行比对。 在文件名和文件大小之后,如果不满128字节,以0补满。
最后两字节:这里需要注意,只有数据部分参与了效CRC验,不包括头和编码部分。16位CRC效验,高字节在前,低字节在后。
接收方收到第一帧数据包后,发送ACK正确应答。
然后再发送一个字符’C’。
发送方收到’C’后,开始发送第二帧,第二帧中的数据存放的是第一包数据。
接收方收到数据后,发送一个ACK然后等待下一包数据传送完毕,继续ACK应答。直到所有数据传输完毕。
数据传输完毕后,发送方发EOT,第一次接收方以NAK应答,进行二次确认。
发送方收到NAK后,重发EOT,接收方第二次收到结束符,就以ACK应答。
最后接收方再发送一个’C’,发送方在没有第二个文件要传输的情况下,
发送如下数据:
SOH 00 FF 00~00(共128个) CRCH CRCL
接收方应答ACK后,正式结束数据传输。
以上部分,为YMODEM协议的基本操作流程。
史海拾趣
|
对于不同的单片机开发程序差别不大,你要是在89c51的程序语言上花费太多,而感觉在dsp上的程序语言不能学懂的话,我向你的精力花错了方向了。如果你学习了数据结构上的程序描述语言,就发现所有的程序结构都可以用一种标准语言来描述,而不同的 ...… 查看全部问答> |
|
在s3c2410下程序是一定要下到0x30200000这里么?我自己修改了一个ucos的程序,下到芯片,但是指定的地址是从0开始,结果跑错了,然后就一直不能再下载其他程序了,请问应该怎么修正这个错误。 原因可能是:我查了下,下载程序时总是 ...… 查看全部问答> |
|
我想利用FILEMON来开发一个实时监控程序,想在驱动中使用loadlibray函数来加载DLL,但WINXPDDK总是报winbase.h文件出错,好像是和ntddk.h有重复的宏定义。请大家帮帮忙!以下是错误报告: 1>g:\\winddk\\inc\\crt\\winbase.h(293) : error C2061: s ...… 查看全部问答> |
|
我在用PB定制OS时候,想把映像模拟出来,但是每当运行时候都出现 The specified CE boot image could not be loaded. Your virt ...… 查看全部问答> |
|
使用片式磁珠和片式电感的原因:是使用片式磁珠还是片式电感主 要还在于应用。在谐振电路中需要使用片式电感。而需要消除不需要的EMI噪声时,使用片式磁珠是最佳的选择。 1。磁珠的单位是欧姆,而不是亨特,这一点要特别注意。因为磁珠的单位是按 ...… 查看全部问答> |




