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

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.rhkb.cn/news/457869.html

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

相关文章

git命令笔记(速查速查)

git命令功能总结 1.创建git的本地仓库2. 配置本地仓库(name和email地址)3. 工作区、版本库、暂存区、对象区3.1 add, commit3.2 打印提交日志3.2 修改文件 4.版本回退&#xff08;git reset&#xff09;5. 撤销修改&#xff08;在push之前撤销&#xff09;6.删除版本库中的文件…

C++——string的模拟实现(上)

目录 引言 成员变量 1.基本框架 成员函数 1.构造函数和析构函数 2.拷贝构造函数 3.容量操作函数 3.1 有效长度和容量大小 3.2 容量操作 3.3 访问操作 (1)operator[]函数 (2)iterator迭代器 3.4 修改操作 (1)push_back()和append() (2)operator函数 引言 在 C—…

微信小程序版本更新管理——实现自动更新

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

查找总价格为目标值的两个商品----双指针算法

一&#xff1a;题目描述 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二&#xff1a;算法原理 三&#xff1a;代码编写 vector<int> twoSum(vector<int>& price, int target) {vector<int> ret;int left 0, right price.size()-…

银河麒麟相关

最近安装了银河麒麟server版本&#xff0c;整理下遇到的一些小问题 1、vmware安装Kylin-Server-V10-SP3-General-Release-2303-X86_64虚拟机完成后&#xff0c;桌面窗口很小&#xff0c;安装vmwaretools后解决&#xff0c;下载地址http://softwareupdate.vmware.com/cds/vmw-de…

centos安装指定版本的jenkins

打开jenkins镜像包官网&#xff0c;找到自己想要安装的版本&#xff0c;官网地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable 下载指定版本安装包&#xff1a; wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.452.…

Vue3学习:汇率计算器案例中event.target与event.currentTarget比较

今天从一本vue.js书中学习了《汇率计算器》的案例&#xff0c;这个案例的效果如下&#xff1a; 案例可以查询人民币、日元、港元、美元、欧元之间的汇率关系&#xff0c;代码中定义了一个汇率表rate&#xff0c;包含了每种货币对其他5种货币的汇率。其中还有一个功能是点击下方…

从零到一:如何使用直播美颜SDK开发视频美颜平台

今天&#xff0c;小编将为大家详细讲解如何从零开始&#xff0c;利用直播美颜SDK进行开发视频美颜平台。 一、了解直播美颜SDK 选择合适的SDK是开发视频美颜平台的第一步&#xff0c;市场上有多种SDK可供选择。选择时应考虑SDK的功能、性能、稳定性以及开发者社区的支持。 二…

STM32实现毫秒级时间同步

提起“时间同步”这个概念&#xff0c;大家可能很陌生。一时间搞不清楚是什么意思。 我理解“时间同步”可以解决多个传感器采集数据不同时的问题&#xff0c;让多个传感器同时采集数据。 打个比方。两个人走路&#xff0c;都是100毫秒走一步&#xff08;频率相同是前提&…

C++中红黑树的实现

目录 1.红黑树的概念 1.1红黑树的规则 ​1.2红黑树如何确保最长路径不超过最短路径的2倍 1.3红黑树的效率 2.红黑树的实现 2.1红黑树的结构 2.2红黑树的插入 2.2.1红黑树插入一个值的大概过程 2.2.2情况1&#xff1a;叔叔节点存在且为红 -- 变色 2.2.3情况2&#x…

若依部署上线遇到的问题

一、若依部署上线的用户头像模块不能回显&#xff1a; 首先是后端修改部署上线后若依存储图片的本地地址 其次将上线前端配置文件中的图片相关配置给删除 二、若依部署上线后验证码不显示问题 在确保前后端请求打通后还有这个问题就是磁盘缓存问题 三、若依部署上线遇到404页…

生成式 AI 与向量搜索如何扩大零售运营:巨大潜力尚待挖掘

在竞争日益激烈的零售领域&#xff0c;行业领导者始终在探索革新客户体验和优化运营的新途径&#xff0c;而生成式 AI 和向量搜索在这方面将大有可为。从个性化营销到高效库存管理&#xff0c;二者在零售领域的诸多应用场景中都展现出变革性潜力&#xff0c;已成为保持行业领先…

【前端】css样式

文章目录 1.常用样式记录 1.常用样式记录 支持文字换行 white-space:pre-wrap;

WPF+Mvvm案例实战(五)- 自定义雷达图实现

文章目录 1、项目准备1、创建文件2、用户控件库 2、功能实现1、用户控件库1、控件样式实现2、数据模型实现 2、应用程序代码实现1.UI层代码实现2、数据后台代码实现3、主界面菜单添加1、后台按钮方法改造&#xff1a;2、按钮添加&#xff1a;3、依赖注入 3、运行效果4、源代码获…

102. UE5 GAS RPG 实现范围技能奥术伤害

在上一篇文章里&#xff0c;我们在技能蓝图里实现了通过技能实现技能指示&#xff0c;再次触发按键后&#xff0c;将通过定时器触发技能效果表现&#xff0c;最多支持11个奥术个体效果的播放。 在这一篇里&#xff0c;我们将实现技能播放时&#xff0c;对目标敌人应用技能伤害。…

C++11新特性相关内容详细梳理

0. 引言 C11简介&#xff1a; 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性…

C#实现简单的文件夹对比程序

python版本的文件夹对比程序虽然简单&#xff0c;但可视化效果一般&#xff0c;不太好看。使用C#的Winform项目实现可视化对比文件夹内容&#xff0c;主要功能包括&#xff1a;   1&#xff09;采用Directory.GetDirectories获取子文件夹集合&#xff0c;Directory.GetFiles获…

C语言[求x的y次方]

C语言——求x的y次方 这段 C 代码的目的是从用户输入获取两个整数 x 和 y &#xff0c;然后计算 x 的 y 次幂&#xff08;不过这里有个小错误&#xff0c;实际计算的是 x 的 (y - 1) 次幂&#xff0c;后面会详细说&#xff09;&#xff0c;最后输出结果。 代码如下: #include…

8 个用于创建电商组件的 CSS 和 JS 代码片段

文章目录 前言正文1.自定义办公桌配置工具2.商品展示卡片3.Vue.js 支持的便捷购物体验4.简化的多步结账流程5.移动端优化的商品页面6.动态购物车效果7.React 支持的购物车页面8.尺码指南 总结 前言 优秀的电商网站&#xff0c;必须操作简便、注重细节&#xff0c;才能让用户留…

飞书文档解除复制限制

解除飞书文档没有编辑器权限限制复制功能方法 方法一&#xff1a;使用插件 方法二&#xff1a; 通过调试工具删除所有的copy事件 使用插件 缺点&#xff1a; 只有markdown格式&#xff0c;如果需要其他格式需要再通过Typora等markdown编辑器转pdf,word等格式 安装插件 Cloud Do…