PingPongFTP

PingPongFTP嵌入式简单文件传输协议

一、命令帧格式

frame:cmd[2 Bytes]+len[2 Bytes]+payload[2^4 ~ 2^11 Bytes]+crc[2~4 Bytes]
备注:len指的是payload的长度,结合帧长度和payload长度len,则可以判断帧校验方式是CRC16还是CRC32

二、上位机与从机交互命令

1. masterBroadcastFileInfo[0x8080]

payload:filesize[4Bytes]+filepackagenum[2Bytes]+fileperpackagesize[2]+filetotalcrc[2~4Bytes]

2. masterSendFilePackage[0x8081]

payload: packageindex[2] + upgradefilepayload[16~2048Bytes]

3. nodeAskFileInfo[0x8070]

payload:1024[2Bytes]

4. nodeAskFilePackage[0x8071]

payload:currentpackageindex[2Bytes]

三、文件传输流程(广播传输流程)

1、首先上位机导入传输文件,并生成传输文件信息。其中包含传输文件总字节数,文件总校验,文件总包数,每帧数据最大字节数。
2、上位机先发送文件信息,然后一次性广播完所有文件切片。
3、slave接收传输文件切片,并统计没有收到的切片,然后向master请求剩余没接收到的文件切片。
4、slave获取完所有文件切片后,进行文件大小和文件总校验验证,来判断传输文件完整性。
5、传输过程中每帧数据都进行校验,传输完成后,对传输文件进行总校验,以确保传输文件完整性,校验方式有CRC16或者CRC32。

备注:点对点传输模式,是从机主动询问上位机文件信息,然后根据总包数,一包一包询问上位机要文件切片,直到把所有文件切片获取完成之后,再比较文件总字节数,文件总校验等信息来确定文件完整性。


四、校验算法

uint32_t CRC32( uint8_t *buffer, int length ){
	
    uint32_t crc = 0xFFFFFFFF;
	const uint32_t reversedPolynom = 0xEDB88320;

    if( buffer == NULL || length <= 0 ){
        return 0xFFFFFFFF;
    }

    for( uint16_t i = 0; i < length; ++i ){
        crc ^= ( uint32_t )buffer[i];
        for( uint16_t i = 0; i < 8; i++ ){
            crc = ( crc >> 1 ) ^ ( reversedPolynom & ~( ( crc & 0x01 ) - 1 ) );
        }
    }

    return ~crc;
}
uint16_t CRC16( uint8_t* buffer, int length ){
	
     uint16_t i 	= 0;
	 uint16_t index = 0;
     uint16_t crc 	= 0x1024;
     const uint16_t CRC_CCITT_POLY = 0x1021;
	
     if ( buffer == NULL || length <= 0 ){
         return 0xFFFF;
     }
     while (--length >= 0){
         crc = (uint16_t)(crc ^ ((buffer[index++]) << 8));
         for (i = 0; i < 8; i++){
             if ((crc & 0x8000) != 0){
                 crc = (uint16_t)((crc << 1) ^ CRC_CCITT_POLY);
             }else{
                 crc = (uint16_t)(crc << 1);
             }
         }
     }

     return crc;
}

五、传输模式

1、点对点传输
2、广播传输
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值