Ymodem协议-接收

网上很多关于Ymodem协议的,有部分是错误的,以下是经过本人亲自编写的程序,测试可用。目前单片机作为接受端,用于IAP升级,发送还没写。另外对于终止传送也还没写,正常情况接收是完全没问题的。划重点:《重复发送1024字节直到收到EOT开头数据,网上的错误点就在这里,搞了我很久,网上说的是不够128凑齐发SOH包,其实不是,是凑齐1024发STX包直到发EOT。》平台:stm32f101v...
摘要由CSDN通过智能技术生成

网上很多关于Ymodem协议的,有部分是错误的,以下是经过本人亲自编写的程序,测试可用。目前单片机作为接受端,用于IAP升级,发送还没写。另外对于终止传送也还没写,正常情况接收是完全没问题的。

划重点:《重复发送1024字节直到收到EOT开头数据,网上的错误点就在这里,搞了我很久,网上说的是不够128凑齐发SOH包,其实不是,是凑齐1024发STX包直到发EOT。》

平台:stm32f101v8  超级终端 keil

 

传输起来,效果是这样的!一般很快 如下图 2秒就7K了

 

首先超级终端中Ymodem协议是这样的,定义单片机位接受者,超级终端为发送者:

SOH开头: 128字节的数据,总包大小128+5,SOH即0x01

STX开头: 1024字节的数据,总包大小1024+5 ,STX即0x02

EOT开头: 单个字节,传输完成,总包大小1 ,EOT即0x04

/*YModem standard CMD*/
#define YMODEM_SOH (0x01)
#define YMODEM_STX (0x02)
#define YMODEM_EOT (0x04)
#define YMODEM_ACK (0x06)
#define YMODEM_NAK (0x15)
#define YMODEM_CAN (0x18)
#define YMODEM_C (0x43)

以下为交流顺序:

接受者:发送大写字母C,等待数据

发送者:发送ASCII中的SOH也就是01,后面是包序号00,包序号反码FF,文件名YG06_V0_1.bin,NULL,文件大小11212 bytes ,补齐111字节至128字节,CRC CRC是数据段的16位CRC校验码。总共此包是128+5=133字节。SOH

我的第一个包收到如下: 01 00 FF "YG06_V0_1.bin"  NULL "11212" NULL[111] CRC CRC

接受者:发送大写字母ACK,发送大写字母C,等待数据

发送者:发送ASCII中的STX也就是02,后面是包序号01,包序号反码FE,1024字节数据,CRC CRC.总共此包是1024+5=1029字节。STX

我的第一个包收到如下: 02 01 FE DATA[1024] CRC CRC

接受者:ACK

发送者:STX包

接受者:ACK

发送者:STX包

.......

接受者:ACK

发送者:EOT

重复发送1024字节直到收到EOT开头数据,网上的错误点就在这里,搞了我很久,网上说的是不够128凑齐发SOH包,其实不是,是凑齐1024发STX包直到发EOT。

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值