【沁恒蓝牙mesh】OTA功能详解

2023-11-23 20:52

本文主要是介绍【沁恒蓝牙mesh】OTA功能详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文基于沁恒CH58X 单片机的OTA功能
一键三连,收藏+点赞+评论 私信可获取原文

📋 个人简介

  • 💖 作者简介:大家好,我是喜欢记录零碎知识点的小菜鸟。😎
  • 📝 个人主页:欢迎访问我的 Ethernet_Comm 博客主页🔥
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 📣 系列专栏:沁恒蓝牙mesh二次开发 🍁
  • 💬格言:写文档啊不是写文章,重要的还是直白!🔥

OTA 下位机流程

下位机,收到指令:

【擦除】

收到数据帧: 0x81 len xx xx xx xx // 1字节 cmd + 1 字节长度 + 2字节 起始地址 + 2 字节 block 数量

执行动作: 上位机发一帧数据,下位机回应一帧ACK,直到上位机发送完,开始启动擦除

【编程】

收到 数据帧: 0x80 len xx xx xx …… // 1字节 cmd + 1 字节长度 + 2字节 地址 + 243 字节数据

执行动作: 将接收到的数据,一帧一帧的写到 APP2 的 flash 区域,每写完一帧都和上位机回复ACK

【校验】

收到 数据帧: 0x82 len xx xx xx …… // 1字节 cmd + 1 字节长度 + 2字节 地址 + 243 字节数据

执行动作: 依次读取 APP2 的 flash,并校验,直到结束,期间每写完一帧都和上位机回复ACK

【发送信息】

收到数据帧: 0x84 len xx xx xx …… // 1字节 cmd + 1 字节长度 + 245 字节数据

执行动作: 向上位机发送一些列信息

【编程结束】

收到数据帧: 0x83 len xx xx xx xx // 1字节 cmd + 1 字节长度 + 2 字节数据

执行动作: 关中断、修改 flash 标志位,软复位

下位机报文:

【编程】

// 接收到一帧数据 + 写入 flash  + 向上位机发送 ack     
// 0x80, 0xf0, 0x00, 0x01    
// cmd + 数据长度 240 + 起始地址 0x1000 + 236 字节的 flash 数据
IAP_PROM: 00027000 len:240 
0x80, 0xf0, 0x00, 0x01, 0x6f, 0x00, 0xc0, 0x74, 0x90, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x20, 0x00, 0x20, 0x76, 0x22, 0x00, 0x20, 0xa9, 0xbd, 0xf9, 0xf5, 0x94, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x20, 0x00, 0x20, 0x98, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x20, 0x00, 0x20, 0xa0, 0x20, 0x00, 0x20, 0xa2, 0x20, 0x00, 0x20, 0xa4, 0x20, 0x00, 0x20, 0xa6, 0x20, 0x00, 0x20, 0xa8, 0x20, 0x00, 0x20, 0xaa, 0x20, 0x00, 0x20, 0xac, 0x20, 0x00, 0x20, 0xae, 0x20, 0x00, 0x20, 0xb0, 0x20, 0x00, 0x20, 0xb2, 0x20, 0x00, 0x20, 0xb4, 0x20, 0x00, 0x20, 0xf2, 0x22, 0x00, 0x20, 0xb8, 0x20, 0x00, 0x20, 0xba, 0x20, 0x00, 0x20, 0xbc, 0x20, 0x00, 0x20, 0xbe, 0x20, 0x00, 0x20, 0xc0, 0x20, 0x00, 0x20, 0xc2, 0x20, 0x00, 0x20, 0xc4, 0x20, 0x00, 0x20, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0xb7, 0x17, 0x00, 0x40, 0x93, 0x06, 0x70, 0x05, 0x23, 0x80, 0xd7, 0x04, 0x13, 0x07, 0x80, 0xfa, 0x23, 0x80, 0xe7, 0x04, 0x01, 0x00, 0x01, 0x00, 0x03, 0xc6, 0xb7, 0x04, 0x13, 0x76, 
PROM:send ack to phone // 地址:0x10f0
IAP_PROM: 000270f0 len:240 
0x80, 0xf0, 0x0f, 0x01, ……………………………………………………
PROM:send ack to phone     

【校验】

IAP_VERIFY: 00027000 len:240 
0x82, 0xf0, 0x00, 0x01, 0x6f, 0x00, 0xc0, 0x74, 0x90, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x20, 0x00, 0x20, 0x76, 0x22, 0x00, 0x20, 0xa9, 0xbd, 0xf9, 0xf5, 0x94, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x20, 0x00, 0x20, 0x98, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x20, 0x00, 0x20, 0xa0, 0x20, 0x00, 0x20, 0xa2, 0x20, 0x00, 0x20, 0xa4, 0x20, 0x00, 0x20, 0xa6, 0x20, 0x00, 0x20, 0xa8, 0x20, 0x00, 0x20, 0xaa, 0x20, 0x00, 0x20, 0xac, 0x20, 0x00, 0x20, 0xae, 0x20, 0x00, 0x20, 0xb0, 0x20, 0x00, 0x20, 0xb2, 0x20, 0x00, 0x20, 0xb4, 0x20, 0x00, 0x20, 0xf2, 0x22, 0x00, 0x20, 0xb8, 0x20, 0x00, 0x20, 0xba, 0x20, 0x00, 0x20, 0xbc, 0x20, 0x00, 0x20, 0xbe, 0x20, 0x00, 0x20, 0xc0, 0x20, 0x00, 0x20, 0xc2, 0x20, 0x00, 0x20, 0xc4, 0x20, 0x00, 0x20, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0x01, 0xa0, 0xb7, 0x17, 0x00, 0x40, 0x93, 0x06, 0x70, 0x05, 0x23, 0x80, 0xd7, 0x04, 0x13, 0x07, 0x80, 0xfa, 0x23, 0x80, 0xe7, 0x04, 0x01, 0x00, 0x01, 0x00, 0x03, 0xc6, 0xb7, 0x04, 0x13, 0x76, 
VERIFY:send ack to phone 

【结束】

IAP_END 
Image Flag 03

下位机地址计算

比如说编程时,上位机传输的地址为:第一帧:0x1000 第二帧:0x10f0

实际编程时,第一帧地址:0x00027000 ,第二帧地址: 0x000270f0

计算:

  • 0x00 0x01 两个u8 转u16 ,小端格式存储 变为 0x1000 ,这是 Jump_IAP 的结束地址
  • 左移4位,变为u32 , 0x0000_1000
  • 偏移 IMAGEA 地址, 0x0000_1000 + 152K = 0x00027000

这篇关于【沁恒蓝牙mesh】OTA功能详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/420662

相关文章

CSS place-items: center解析与用法详解

《CSSplace-items:center解析与用法详解》place-items:center;是一个强大的CSS简写属性,用于同时控制网格(Grid)和弹性盒(Flexbox)... place-items: center; 是一个强大的 css 简写属性,用于同时控制 网格(Grid) 和 弹性盒(F

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可