【随手笔记】远程升级之如何平衡下载包大小与速率?

ops/2024/10/24 20:19:26/

1. 远程升级基本信息

  1. 使用NB_BC26模组,通过AT指令使用TCP的协议与公司后台交互
  2. 升级的固件为BIN文件,使用原始固件包升级,未使用差分方式
  3. 原始固件包有110K,大小左右,
  4. 固件的存储为外置的FLASH W25Q16,
  5. w25q16最小存储单位为页,一页256字节
  6. W25Q16的内部结构为
W25Q16内部存储结构
总容量:2M
分为32个块,
每个块大小 64KB, 每个块分为16个扇区, 
每个扇区的大小 4KB, 每个扇区分为16个页,
每个页的大小256Byte
  1. 因为固件存储器最小单位为1页,256字节
  2. 所以下发的每包固件长度为 256字节的倍数为宜
  3. 256字节或512字节
  4. 查看NB模组BC26, 可以看到数据上下行最大长度
  5. 字符串为1024字节
  6. 16进制为512字节
    在这里插入图片描述
  7. 所以当下载固件包的长度为256字节时,模组可以下发下来,当下载固件包为512字节时,加上固件包的头尾固定字段(12个字节左右),此时模组吐出来的数据会自动截为两包
  8. 此种情况有两个问题 (1)不定长解析拼接问题 (2)不定长拼接存储问题
  9. 接收端可以看到黏包的现象(暂按下不表)
  10. 所以粗略的计算 110KB / 256Byte = 440 包

2. 安信可透传云

使用这个TCP透传的平台测试
安信可透传云

  1. 下发数据为16进制的500字节

下发的数据
2. 可以看到我们是以HEX发送的,下发窗口显示的是1000字节,
安信可透传云显示
3. 可以看到接收端显示500字节,格式为HEX
在这里插入图片描述
4. 当我们的下发数据改为HEX 520字节时
在这里插入图片描述
5. 可以看到平台下发的1040字节
在这里插入图片描述
6. 然后看到接收端收到数据为两包,第一包为最大长度接收,第二包为剩余的长度

在这里插入图片描述
7. 此时可以知道当超过下发最大长度时,模组会自动截断剩下的
8. 别急此时做一个长度测试
9. 只下发4个字节看看
10.发送4字节16进制数据
10. 接收端显示的长度也是4
11. 但是这个数据类型是字符串,带双引号的

在这里插入图片描述
接收端数据为: +QIURC: “recv”,0,4,“11223344”
这是使用字符串显示的
当为16进制时,下发数据对应ASCLL码

下发的原始数据是0x11 0x22 0x33 0x44类型说明:+QIURC: "recv",0,4,"11223344"把接收负载数据16进制表示0x31 0x31 0x32 0x32 0x33 0x33 0x34 0x34解析的过程:
使用第一个字节举例:
0x11
接收端对应的是 "11"
使用的是无符号8位缓存接收,
第一字节:'1'
第二字节:'1'0x114= ('1' - '0') << 4; 
0x114= ('1' - '0') & 0x0F; 
高低位数据拼接后得 0x11
  • 从上面看接收的缓存区为接收数据长度的两倍

3. 平台实际下载

  1. 从平台接收来看当原始数据包为256时,不同间隔会导致出现黏包的情况概率

在这里插入图片描述
这个是正常的情况,下发间隔为500毫秒

计算下载时间
时间 = 总包440包 * 500毫秒 = 220秒 加上丢包的时间
3分钟多

问题:TCP协议层理论数据下载计算?占个坑


http://www.ppmy.cn/ops/128141.html

相关文章

基于SpringBoot+Vue+uniapp微信小程序的宿舍报修系统的详细设计和实现

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

HuggingFace应用——自然语言处理(1):什么是NLP?什么是Transformer?

本篇文章属于HuggingFace应用——自然语言处理系列本篇文章对自然语言处理任务进行基本介绍参考资料&#xff1a;HuggingFace 文章目录 1 什么是NLP&#xff1f;2 主流算法与模型梳理——时间顺序3 Transformer3.1 Transformer模型能做什么&#xff1f;Sentiment Analysis 语义…

计算广告第三版pdf

需要该书pdf版本的同学点赞&#xff0c;私信我&#xff1a;

Hallo 2:通过单张图像与音频生成1小时4K分辨率人像视频的人工智能技术解析

Hallo 2&#xff1a;通过单张图像与音频生成1小时4K分辨率人像视频的人工智能技术解析 近年来&#xff0c;随着人工智能技术的飞速发展&#xff0c;视频生成领域也在不断突破。特别是在虚拟主播、影视制作等行业中&#xff0c;如何高效地生成高质量人像视频已成为当下的热门话…

Linux命令(ubuntu)安装deb文件

Linux命令&#xff08;ubuntu&#xff09;安装deb文件 在Linux中&#xff0c;.deb 文件是 Debian 和基于 Debian 的系统&#xff08;如 Ubuntu&#xff09;使用的软件包格式。要安装 .deb 文件&#xff0c;您可以使用 dpkg 命令。以下是安装 .deb 文件的步骤&#xff1a; 打开…

Linux:sh脚本

文章目录 1 标头2 执行脚本文件3 数组4 传递参数5 运算符 && 分支语句6 循环语句6.1 for循环6.2 while循环6.3 until循环6.4 case语句 && read输入6.5 循环控制 7 函数8 文件、文件夹、字符串判断 && 示例 1 标头 #!/bin/sh指明了脚本中命令的解释器 …

构建后端为etcd的CoreDNS的容器集群(一)、生成自签名证书

笔者拟使用官方的etcd和CoreDNS容器镜像生成带自签名的分布式DNS容器集群。按计划需做生成自签名证书、部署etcd集群、配置CoreDNS以使用etcd作为后端共三步&#xff0c;本文为第一步。 一、生成自签名证书 1、准备CFSSL工具 官网下载&#xff1a; [rootlocalhost ~]# cd /o…

深入解析 JavaScript 构造函数:特性、用法与原型链

在 JavaScript 中&#xff0c;构造函数是实现面向对象编程的关键工具之一。它与 this 关键字、箭头函数的作用域链以及原型和原型链紧密相关。本文将全面深入地探讨 JavaScript 构造函数的各个方面。 一、构造函数的定义与用法 构造函数是一种特殊的函数&#xff0c;用于创建…