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、广播传输
内容概要:本文详细介绍了如何使用Matlab进行平行泊车和垂直泊车的路径规划与仿真。首先解释了平行泊车的本原理,即于车辆运动学模型,通过控制转向角和速度来规划从初始位置到目标车位的平滑路径。接着展示了具体的Matlab代码实现,包括初始化参数设置、路径规划的循环迭代以及最终的路径绘图。对于垂直泊车,则强调了其独特的路径规划逻辑,分为接近车位和转向进入两个阶段,并给出了相应的代码示例。此外,还讨论了一些高级话题,如使用双圆弧+直线组合方案、五次多项式轨迹生成、PID控制器实现轨迹跟踪等方法来优化路径规划。同时提到了碰撞检测模块的实现方式及其重要性。 适合人群:对自动驾驶技术感兴趣的初学者或有一定编程础的研发人员。 使用场景及目标:适用于希望深入了解自动驾驶泊车原理和技术细节的人群,特别是那些想要动手实践并掌握Matlab编程技巧的学习者。通过学习本文提供的代码示例,读者能够更好地理解平行泊车和垂直泊车的具体实现过程,从而为进一步研究提供坚实的础。 其他说明:文中提到的所有代码均为简化版本,旨在帮助读者快速入门。实际应用中可能需要考虑更多因素,例如车辆的实际尺寸、环境感知模块的集成等。此外,作者还分享了许多实用的经验和技巧,如如何避免常见的错误、如何优化代码性能等。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值