【沁恒藍牙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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164166.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164166.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164166.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

不可錯過的10個即時通訊軟件開發技巧

歡迎來到本文,作為即時通訊軟件開發領域的專家,我將為您分享十個不容錯過的開發技巧。無論您是新手開發者還是有經驗的專業人士,這些技巧都將幫助您實現卓越的即時通訊軟件。讓我們開始吧! 1. 選擇適當的開發平臺 在開始開發之前…

注意:怎么用JMeter操作MySQL數據庫?看完秒懂!

近期用JMeter做接口測試,遇到了一個需要用到數據數據庫的場景:一個關于數據報告的頁面,需要將數據庫里面的數據求和或者取均值之后,展示出來。 如果要斷言的話,需要連接數據庫,通過寫sql語句,將…

jmeter中調用python代碼

1、安裝pyinstaller pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller 2、將py腳本打包 pyinstaller -F venv/get_image/OCR_jmeter_api.py 3、jmeter中添加OS Process Sampler并調用dist下的程序 4、執行jmeter

刪除鏈表的倒數第N個結點

題目: 給你一個鏈表,刪除鏈表的倒數第 n 個結點,并且返回鏈表的頭結點。 示例 1: 輸入:head [1,2,3,4,5], n 2 輸出:[1,2,3,5]示例 2: 輸入:head [1], n 1 輸出:…

機器學習實戰-第5章 Logistic回歸

Logistic 回歸 概述 Logistic 回歸 或者叫邏輯回歸 雖然名字有回歸,但是它是用來做分類的。其主要思想是: 根據現有數據對分類邊界線(Decision Boundary)建立回歸公式,以此進行分類。 須知概念 Sigmoid 函數 回歸 概念 假設現在有一些數據點,我們用一條直線對這些點進行…

淺析基于智能音視頻技術的城市重要場館智能監控系統設計

了解旭帆科技的朋友都知道,旭帆科技一直都樂于和大家分享各類場景的視頻解決方案,今天小編就基于智能音視頻技術的城市重要場館智能監控系統設計和大家探討一下。 基于智能音視頻技術的城市重要場館智能監控系統設計,主要包含以下要素&#x…

外部 prometheus監控k8s集群資源(pod、CPU、service、namespace、deployment等)

prometheus監控k8s集群資源 一,通過CADvisior 監控pod的資源狀態1.1 授權外邊用戶可以訪問prometheus接口。1.2 獲取token保存1.3 配置prometheus.yml 啟動并查看狀態1.4 Grafana 導入儀表盤 二,通過kube-state-metrics 監控k8s資源狀態2.1 部署 kube-st…

手把手教你編寫LoadRunner腳本

編寫 LoadRunner 腳本需要熟悉腳本語言、業務場景、參數化技術、斷言和事務等基礎知識。 在實際編寫時,可以根據具體測試需求,結合實際情況進行合理的配置和調整。 基本步驟 創建腳本 在 LoadRunner 的 Controller 模塊中,創建一個新的測…

linux centos上安裝python3.11.x詳細完整教程

一. 安裝步驟 注意: 1、安裝python3.11的其他版本替換下面的版本信息即可。(如想安裝3.11.5將案例中的3.11.0替換成3.11.5即可) #下載最新的軟件安裝包 wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz#解壓縮安裝包 tar -xzf Python-3.11.0.tg…

gRPC之gRPC負載均衡(客戶端負載均衡)(etcd)

1、gRPC負載均衡(客戶端負載均衡)(etcd) 本篇將基于etcd的服務發現前提下,介紹如何實現gRPC客戶端負載均衡。 1.1 gRPC負載均衡 gRPC官方文檔提供了關于gRPC負載均衡方案Load Balancing in gRPC https://github.com/grpc/grpc/blob/master/doc/load-balancing.m…

Jackson無縫替換Fastjson

目錄 文章目錄 一,Fastjson到Jackson的替換方案方案代碼序列化反序列化通過key獲取某種類型的值類型替換 二,Springboot工程中序列化的使用場景三,SpringMVC框架中的Http消息轉換器1,原理:2,自定義消息轉換…

什么是mvc原理是什么

MVC是一種設計模式,它將應用程序分為三個部分:模型(Model)、視圖(View)和控制器(Controller)。 模型(Model)表示應用程序的數據結構,包括與數據相…

常用腳本-持續更新(文件重命名、視頻抽幀、拆幀)

所有代碼位置:Learning-Notebook-Codes/Python/常用腳本 1. 文件重命名 1.1 說明 腳本路徑:codes/files_rename.py腳本說明:可以自動重命名某個文件夾下指定類型的文件。 修改前文件名稱: img1.jpg修改后文件名稱: Le0v1n-20231123-X-0001…

python-opencv在圖片中繪制各種圖形

python-opencv在圖片中繪制各種圖形 1.繪制直線 2.繪制矩形 3.繪制圓 4.繪制橢圓 5.繪制多邊形 6.嵌入文字 實現代碼都在下面了,代碼中參數做了簡單注釋 import copy import math import matplotlib.pyplot as plt import matplotlib as mpl import numpy a…

window非gui形式運行jmeter腳本

配置jmeter環境 新增1個環境變量: JMETER_HOMED:\Tools\apache-jmeter-5.0 【jmeter文件夾】 編輯CLASSPATH: CLASSPATH后面加上 %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar; 編輯path: path后面加上 %JM…

二次開發問題匯總【C#】

1未將對象引用到實例。 接口函數的參數不對。解決辦法【用fixed去限制數組長度】 unsafe public struct VCI_BOARD_INFO {public UInt16 hw_Version;public UInt16 fw_Version;public UInt16 dr_Version;public UInt16 in_Version;public UInt16 irq_Num;public byte can_Num;…

C語言眾數問題(ZZULIOJ1201:眾數問題)

題目描述 給定含有n個元素的多重集合S,每個元素在S中出現的次數稱為該元素的重數。多重集S中重數最大的元素稱為眾數。 例如,S{1,2,2,2,3,5}。多重集S的眾數是2,其重數為3。 編程任務…

前端學習--React(3)

一、Redux 集中狀態管理工具,不需要react即可使用,每個store的數據都是獨立于組件之外的 vue小鏈接:vuex/pinia 基本使用 Redux將數據修改流程分成三個概念,state、action和reducer state - 一個對象 存放我們管理的數據狀態 a…

1688API如何獲取商品詳情信息(關鍵詞搜索商品列表),1688API接口開發系列

1688商品詳情接口是指1688平臺提供的API接口,用于獲取商品詳情信息。通過該接口,您可以獲取到商品的詳細信息,包括商品標題、價格、庫存、描述、圖片等。 要使用1688商品詳情接口,您需要先申請1688的API權限,并獲取ac…

UML建模圖文詳解教程01——Enterprise Architect安裝與使用

版權聲明 本文原創作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl Enterprise Architect概述 官方網站:https://www.sparxsystems.cn/products/ea/;圖示如下: Enterprise Architect是一個全功能的、基于…