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

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,一经查实,立即删除!

相关文章

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:…

基于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…

物联网平台是什么?

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

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

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

UEFI EDK2框架学习 (四)——UEFI图形化

一、修改protocol.c #include <Uefi.h> #include <Library/UefiLib.h> #include <Library/UefiBootServicesTableLib.h> #include <stdio.h>EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable ) {EFI_STATUS S…

软考中级网络工程师,快背,都是精华知识点!

一、上午常考概念 计算机硬件基础&#xff1a;根据考纲分析&#xff0c;本章主要考查三个模块&#xff1a;计算机体系结构、存储系统、I/O输入输出系统&#xff0c;其中每一模块又分若干知识点。“计算机硬件基础”相当于软考中的“公共基础课”&#xff0c;不同方向、不同级别…

初始JavaEE篇——多线程(2):join的用法、线程安全问题

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 模拟实现线程中断 join的用法 线程的状态 NEW&#xff1a; RUNNABLE&#xff1a; TIMED_WAITING&#xff1a; TERMINATED…

系统架构图设计(轻量级架构)

轻量级架构一般包括&#xff1a;表现层、业务逻辑层、持久层、数据库层 表现层架构 MVC 模型&#xff08;Model&#xff09;&#xff1a;应用程序的主体部分&#xff0c;表示业务数据和业务逻辑视图&#xff08;View&#xff09;&#xff1a;用户看到并与之交流的界面控制器&…

Lim测试平台,五步完成批量生成数据

一、前言 在日常的测试工作中&#xff0c;我们常常需要生成大量的数据&#xff0c;例如为了测试分页功能、进行性能压力测试或准备测试所需的数据集。 虽然可以通过编写脚本或者使用如JMeter这样的工具来完成这些任务&#xff0c;但在团队合作的情境下&#xff0c;这种方法存…

打造通往自由的交易系统与策略——《以交易为生》读后感

我们知道要顺势而为&#xff0c;可什么是“势”&#xff1f;交易市场就像一片汪洋大海&#xff0c;潮起潮落的背后&#xff0c;有一套可以捕捉趋势的规律。要想看到势&#xff0c;就像软件工程中的可观测性&#xff0c;要找到合适的工具和指标&#xff0c;才能发现市场中重要的…

【云从】十、常见安全问题与云计算的计费模式

文章目录 1、常见安全问题1.1 DDoS攻击1.2 病毒攻击1.3 木马攻击1.4 代码自身漏洞 2、安全体系3、云计算的计费模式4、常见云产品的计费方案5、云产品计费案例 1、常见安全问题 1.1 DDoS攻击 通过分布在各地的大量终端&#xff0c;同时向目标发送恶意报包&#xff0c;以占满目…