Ymodem下载协议

背景

这里的Ymodem是YMODEM-1K(除此还有Ymodem-g(没有CRC校验,不常用)),经常使用在IAP固件升级中。是X-modem协议升级过来的,每一包数据可以达到1024字节,比X-modem高效很多。这个协议包括了文件的识别、传送的起止时间、错误的判断与纠正等内容,所以也可以较好的保正固件在传输的过程中的正确性。

帧头

  • SOH 01H(modem 128数据帧头)
  • STX 02H(Ymodem 1024数据帧头)
  • EOT 04H(发送结束)
  • ACK 06H(应答)
  • NAK 15H(非应答)
  • CAN 18H(取消发送)

握手

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

起始帧

帧结构:

Byte1Byte2Byte3Byte4~Byte (4+N* )Byte (4+N+1 )~Byte(4+N +1+M* )NULLByte 127Byte 128
SOH0x000xFFfilenamefilezise0x00CRC_HCRC_L

解析:

  • Byte1
    SOH = 0x01,起始数据帧只有128个字节
  • Byte2
    0x00表示数据帧序号,初始时0x00,下个时0x01
  • Byte3
    帧序号取反
  • Byte4~Byte (4+N* )
    N*表示文件文件名长度+1(文件名长度+结束符)
    filename是传输文件的文件名,把ASCII转换成十六进制还要加个结束符0x00,例如abc.bin,转换后是61 62 63 2e 62 69 6e 00
  • Byte (4+N+1 )~Byte(4+N +1+M* )
    M* 文件长度的ASCII转换成HEX后的字节数+1(结束符)
    filezise是文件的大小,如果文件时1KB,则是1024Byte,也是要ASCII转换成十六进制加结束符0x00的,31 30 32 34 00
  • NULL
    NULL是使用0x00填充起始帧128字节的其他字节
  • Byte 127、Byte 128
    CRC16校验,然后高8位在前,低8位在后

数据帧

帧结构:

Byte1Byte2Byte3Byte4~Byte1027Byte 1028Byte 1029
STX0x010xFEdata[1024]CRC_HCRC_L

解析:

  • Byte 1
    STX是0x02,表示这个帧数据部分包含1024个字节
  • Byte 2
    与起始帧一样表示帧序号,第二个数据帧则是0x02,其取反则是0xFD,第三帧则是0x03
  • Byte 3
    Byte 2 的取反
  • Byte3~Byte1027
    1024Byte的数据。
  • Byte 1028 Byte 1029
    CRC16校验,然后高8位在前,低8位在后

特殊情况

若文件最后剩余部分小于1024Byte,则拆分成128字节传输,还是不足之处使用0x1A填充。
参考Ymodem手册
在这里插入图片描述

结束帧

帧结构:

Byte1Byte2Byte3Byte4~Byte131Byte 132Byte 133
SOH0x000xFF0x00CRC_HCRC_L
  • Byte3~Byte131
    全部使用0x00填充。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柒妖71

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值