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

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.mzph.cn/news/883044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++下读取ENVI栅格文件格式

ENVI使用的是通用栅格数据格式&#xff0c;包含一个简单的二进制文件&#xff08; a simple flat binary &#xff09;和一个相关的ASCII&#xff08;文本&#xff09;的头文件。 利用其他语言如C/C等直接读取ENVI的数据&#xff0c;则可以先对hdr文件进行解析&#xff0c;获取…

数据库,index是干啥的,索引在什么时候会出现失效,索引建多了有啥坏处

index是索引 索引好处1.帮助用户提高查询速度 2.利用索引的唯一性来控制记录的唯一性 3.可以加速表与表之间的连接 4.降低查询中分组和排序的时间 索引在什么时候会出现失效 1.如果条件中有or&#xff0c;即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因) …

BurpSuit 安装Jpython 和Json-Hunter脚本

0x00下载Jpython jpython2.7.2下载的人最多&#xff0c;所以我就安装2.7.2了 Central Repository: org/python/jython-standalone/2.7.2 点击下载即可。 0x01BP设置jpython环境 重点&#xff1a;Jpython和Jsonp-Hunter一定要放在英文目录下。 0x02安装Jsonp-Hunter https:…

【Java并发编程三】多线程案例(手撕单例模式,阻塞队列,定时器,线程池)

目录 多线程案例 1.单例模式 饿汉模式 懒汉模式 2.阻塞队列 生产者消费者模型 阻塞队列的实现 3.定时器 标准库中的定时器 实现自己的定时器 4.线程池 标准库中的线程池 实现一个自己的线程池 多线程案例 1.单例模式 单例模式是校招中最常考的设计模式之一。 啥…

基于Python和OpenCV的疲劳检测系统设计与实现

项目运行 需要先安装Python的相关依赖&#xff1a;pymysql&#xff0c;Django3.2.8&#xff0c;pillow 使用pip install 安装 第一步&#xff1a;创建数据库 第二步&#xff1a;执行SQL语句&#xff0c;.sql文件&#xff0c;运行该文件中的SQL语句 第三步&#xff1a;修改源…

《Windows PE》6.4.2 远程注入DLL

实验四十七&#xff1a;远程注入DLL 写一个窗口程序&#xff0c;将一个dll通过远程注入的方法&#xff0c;注入到第三章的示例程序PEHeader.exe中&#xff0c;支持32位和64位PE。 ●dll.c /*------------------------------------------------------------------------FileNam…

《PP-OCRv1》论文精读:PaddleOCR是目前SOTA级别的OCR开源技术(截止2024年10月)

PP-OCR: A Practical Ultra Lightweight OCR System论文地址PP-OCRv2: Bag of Tricks for Ultra Lightweight OCR System论文地址PP-OCRv3: More Attempts for the Improvement of Ultra Lightweight OCR System论文地址PaddleOCR Github OCR工具库 43.5K个star PP-OCRv1由百度…

矩阵基础知识

矩阵定义 矩阵的定义 1.矩阵是由一组数按照矩形排列而成的数表。矩阵通常用大写字母表示&#xff0c;例如 AA、BB 等。矩阵中的每个数称为矩阵的元素或元。 一个 mn的矩阵 AA 可以表示为&#xff1a; 其中 aij表示矩阵 A中第i行第j列的元素。 矩阵的维度 1.矩阵的维度由它…

经典功率谱估计的原理及MATLAB仿真(自相关函数BT法、周期图法、bartlett法、welch法)

经典功率谱估计的原理及MATLAB仿真&#xff08;自相关函数BT法、周期图法、bartlett法、welch法&#xff09; 文章目录 前言一、BT法二、周期图法三、Bartlett法四、welch法五、MATLAB仿真六、MATLAB详细代码总结 前言 经典功率谱估计方法包括BT法&#xff08;对自相关函数求傅…

python实现onvif协议下控制摄像头变焦,以及融合人形识别与跟踪控制

#1024程序员节 | 征文# 这两天才因为项目需要&#xff0c;对网络摄像头的视频采集以及实现人形识别与跟踪技术。对于onvif协议自然起先也没有任何的了解。但是购买的摄像头是SONY网络头是用在其他地方的。因为前期支持探究项目解决方案&#xff0c;就直接拿来做demo测试使用。 …

react18中在列表项中如何使用useRef来获取每项的dom对象

在react中获取dom节点都知道用ref&#xff0c;但是在一个列表循环中&#xff0c;这样做是行不通的&#xff0c;需要做进一步的数据处理。 实现效果 需求&#xff1a;点击每张图片&#xff0c;当前图片出现在可视区域。 代码实现 .box{border: 1px solid #000;list-style: …

微前端架构新选择:micro-app 框架一文全解析

目录 前言技术方案沙箱withiframe 环境变量主应用生命周期子应用生命周期初始化更新卸载缓存 JS 沙箱样式隔离元素隔离路由系统⭐数据通信⭐资源系统预加载umd 模式其他功能调试工具 前言 https://micro-zoe.github.io/micro-app/ micro-app 是由京东前端团队推出的一款微前端…

基于springboot美食商城推荐系统

基于springboot美食商城推荐系统 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;idea 源码获取&#xff1a;https://downlo…

iOS调试真机出现的 “__llvm_profile_initialize“ 错误

一、错误形式&#xff1a; app启动就崩溃&#xff0c;如下&#xff1a; Demo__llvm_profile_initialize:0x1045f7ab0 <0>: stp x20, x19, [sp, #-0x20]!0x1045f7ab4 <4>: stp x29, x30, [sp, #0x10]0x1045f7ab8 <8>: add x29, sp, #0x100x1…

java写一个MD5加密工具

下面是一个简单的 Java MD5 加密工具的实现。这个工具可以用于对输入的字符串进行 MD5 加密&#xff0c;并返回加密后的结果。 MD5 加密工具类 import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;public class MD5Util {/*** 使用 MD5 算法加…

SELinux中的安全标记与强制访问控制

SELinux的安全标记和强制访问控制是如何实现的&#xff1f; SELinux&#xff08;Security Enhanced Linux&#xff09;是一个由美国国家安全局&#xff08;NSA&#xff09;开发的Linux内核模块&#xff0c;它实现了强制访问控制&#xff08;MAC&#xff09;。SELinux通过为系统…

工伤认定流程和赔付标准

一、应当认定为工伤的规定 《工伤保险条例》第十四条规定&#xff1a;职工有下列情形之一的&#xff0c;应当认定为工伤&#xff1a; 1、在工作时间和工作场所内&#xff0c;因工作原因收到事故伤害的&#xff1b; 2、工作时间前后在工作场所内&#xff0c;从事与工作有关的预…

第10节 arkTS GridRow

在 ArkTS 中&#xff0c; GridRow 是 Grid 布局系统中的一个重要组成部分&#xff0c;用于定义网格布局中的行。以下是关于 GridRow 的详细介绍&#xff1a; 基本概念 Grid 布局将容器划分为行和列的网格结构&#xff0c; GridRow 则负责确定每行的属性和布局方式。…

物联网平台是什么?

在数字化时代&#xff0c;物联网&#xff08;Internet of Things&#xff0c;简称IoT&#xff09;已经成为推动社会进步和产业升级的重要力量。物联网平台&#xff0c;作为连接物理世界与数字世界的桥梁&#xff0c;正逐渐成为智能设备、数据和服务的中心枢纽。本文将带你深入了…

Mochi 1视频生成模型亮相:动作流畅,开放源代码

前沿科技速递&#x1f680; 近日&#xff0c;AI公司Genmo发布了最新的开源视频生成模型Mochi 1。Mochi 1在动作质量和提示词遵循能力方面有显著提升&#xff0c;并且与市面上许多闭源商业模型相媲美。作为一款支持个人和商业用途的开源工具&#xff0c;Mochi 1不仅展示了开源技…