博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IAP 协议
阅读量:4478 次
发布时间:2019-06-08

本文共 1706 字,大约阅读时间需要 5 分钟。

协议采用Yomdem协议,

Ymodem协议主要有3部分组成:

1.文件传输开启

2.数据传输

3.文件传输结束

 

文件传输过程:

(1)开启是由接收方开启传输,它发一个大写字母"C"开启传输。然后进入等待(SOH)状态,如果没有回应,就会超时退出。

 

(2)发送方一开始时处于等待过程,等待C。收到C以后,发送(SOH)数据包开始信号,发送序号(00),补码(FF),“文件名”,“空格”“文件大小”“除去序号外,补满128字节”,CRC校验两个字节。进入等待(ACK)状态。

 

(3)接收方收到以后,CRC校验满足,则发送ACK。发送方接收到ACK,又进入等待“文件传输开启”信号,即重新进入等待“C”的状态。

 

(4)前面接收方只是收到了一个文件名,限制正式开启文件传输,Ymodem支持128字节和1024字节一个数据包。128字节以(SOH)开始,1024字节以(STX)开始。

 接收方又发出一个“C”信号,开始准备接收文件。进入等待“SOH”或者“STX”状态。

 

 (5)发送接收到“C”以后,发送数据包,(SOH)(01序号)(FE补码)(128位数据)(CRC校验),等待接收方“ACK”。

 

 (6)文件发送完以后,发送方发出一个“ETO”信号,接收方也以“ACK”回应。然后接收方会再次发出“C”开启另一次传输,若接着发送方会发出一个“全0数据包”,接收方“ACK”以后,本次通信正式结束。

 

所用到的符号:

#define MODEM_SOH 0x01  //数据块起始字符

#define MODEM_STX 0x02  //1028字节开始

#define MODEM_EOT 0x04  //文件传输结束 

#define MODEM_ACK 0x06  //确认应答

#define MODEM_NAK 0x15  //出现错误

#define MODEM_CAN 0x18  //取消传输

#define MODEM_C 0x43   //大写字母C

 

CRC计算方法

u16 Crc(u8 *bytes, u32 len) 

  int crc = 0; 

    int i, j; 

  for(i = 0; i < len; i++) 

   { 

    crc = crc ^ bytes[i] << 8; 

    for(j = 0; j < 8; j++) 

    { 

      if((crc & ((int) 0x8000)) != 0) 

        crc = crc << 1 ^ 0x1021; 

      else 

        crc = crc << 1; 

    } 

  } 

 return crc & 0xFFFF; 

}

 

 

协议解析

 

接收方:发出0x43 ("C") 表示请求对方发送数据

 

发送方:发出第0个数据包

    数据包构成:

     1:0x01或者0x02;

      0x01表示128字节,0x02表示1024字节

     2:0x00 

       表示第0个数据包

      3:0xff 

       第几个数据包的补码

      4: 4+  文名的长度        文件名,以0x00结束  

      4+  文件名的长度 +1     文件大小,以0x00结束

       正文不足128字节补0x00

     Crc校验

 

接收方:0x06或者0x15 

    0x06应答,0x15非应答

接收方:0x43 请求对方发送正文

发送方:发出第1个数据包

    数据包构成:

      1:0x01或者0x02;

         0x01表示128字节,0x02表示1024字节 

        2:0x01 表示第1个数据包

      3:0xfe 第几个数据包的补码

      4:正文

         Crc校验

接收方:0x06或者0x15 

    注:发送方收到应答后马上发送第二个数据包直到数据包发送结束后发出0x04 

发送方:发出第2个数据包

 

 

转载于:https://www.cnblogs.com/absty-guo/p/5895855.html

你可能感兴趣的文章
SQL Server 服务器磁盘测试之SQLIO篇(一)
查看>>
JQ插件写法 扩展JQ方法
查看>>
[LeetCode&Python] Problem 543. Diameter of Binary Tree
查看>>
226 Invert Binary Tree 翻转二叉树
查看>>
《Pro ASP.NET MVC 3 Framework》学习笔记之十六【示例项目SportsStore】
查看>>
IntelliJ IDEA的安装及永久破解
查看>>
C#多线程编程
查看>>
替换空格
查看>>
IntelliJ IDEA2018.1、2017.3激活
查看>>
Orchard后台控制面板的介绍
查看>>
大二下第一周----开学测试
查看>>
javaweb-servlet生成简单的验证码
查看>>
apache+php+mysql环境搭建时,phpinfo里面没有mysql解决办法
查看>>
2018.10.2浪在ACM 集训队第三次测试赛
查看>>
vue3.0学习笔记(一)
查看>>
jQuery跨域
查看>>
MySQL的explain中的参数说明
查看>>
JAVA基本数据类型、引用数据类型-参数传递详解
查看>>
sun.misc.Unsafe 详解
查看>>
食堂排队问题的一个实现
查看>>