当前位置: 首页 > news >正文

接入第三方升级协议OTA教程

用户接入第三方协议教程

概述

对于用户自定义的协议或者第三方协议接入,可使用 dual_bank_updata_api.h 接口。此种升级方式使用的升级文件为 db_update_data.bin,需要在 ini 里配置 flash 结构为双备份,且生成 db_update.bin 的配置。

配置要求

INI 配置文件设置

在 INI 配置文件中需要添加以下配置:

[EXTRA_CFG_PARAM]
BR22_TWS_DB = YES;                  // dual bank flash framework enable
FLASH_SIZE = CONFIG_FLASH_SIZE;     // flash_size cfg
BR22_TWS_VERSION = 0;               // default fw version
DB_UPDATE_DATA = YES;               // generate db_update_data.bin
FORCE_4K_ALIGN = YES;               // force aligin with 4k bytes
#NEW_FLASH_FS = YES;                // enable single bank flash framework

重要注意事项

⚠️ 注意: 这里 ini 需要配置强制 4K 对齐,否则如果同一批生产的芯片有 256Byte 和 4K 对齐的芯片,会导致升级过后 VM 信息丢失。

API 接口详解

1. dual_bank_passive_update_init

功能: 初始化升级模块,创建升级任务

u32 dual_bank_passive_update_init(u32 fw_crc, u32 fw_size, u16 max_pkt_len, void *priv);
//db_data_update.bin数据结构
struct __tws_ota_para {u32 fm_size;u32 fm_crc;u16 max_pkt_len;u32 param_len;void *param;
};

参数说明:

  • fw_crc: db_data_update.bin 的 CRC 值
  • fw_size: db_data_update.bin 的大小
  • max_pkt_len: 每次调用模块写入接口写入数据的最大长度
  • priv: 保留参数

返回值:

  • 0: 成功
  • -2: 内存不足
  • -3: 获取不到当前 flash 的文件接口(检查当前 ini 是否正确配置)

2. dual_bank_update_allow_check

功能: 检查当前的 flash 空间是否满足升级需求

u32 dual_bank_update_allow_check(u32 fw_size);

参数说明:

  • fw_size: db_data_update.bin 的大小

返回值:

  • 0: 成功
  • -1: 升级模块未初始化
  • -2: 当前 flash 空间小于升级文件需要的大小

3. dual_bank_update_write

功能: 升级文件数据写入接口

u32 dual_bank_update_write(void *data, u16 len, int (*write_complete_cb)(void *priv));

参数说明:

  • data: 写入数据的指针
  • len: 写入数据的长度
  • write_complete_cb: 数据写入成功的回调函数

重要说明:

  • 数据并非调用完该接口就已经写入 flash
  • 需要等 write_complete_cb 回调被调用才是成功写入了
  • 这样设计是为了调用写入之后不用等到 flash 操作完成,可以在下次写的时候再去查上一次是否写入成功

返回值:

  • 0: 成功
  • -1: 升级模块未初始化
  • -3: 写入的数据长度大于初始化的时候传递的参数 max_pkt_len

4. dual_bank_update_verify

功能: 数据校验接口,所有数据写入完成调用

u32 dual_bank_update_verify(void (*crc_init_hdl)(void),u32 (*crc_calc_hdl)(u32 init_crc, u8 *data, u32 len), int (*verify_result_hdl)(int calc_crc));

参数说明:

  • crc_init_hdl: CRC 计算初始化接口,初始化 CRC 变量(用户端提供),传递 NULL 使用默认的 CRC16-CCITT Standard
  • crc_calc_hdl: CRC 计算接口(用户提供),传递 NULL 使用默认的 CRC16-CCITT Standard
  • verify_result_hdl: CRC 计算成功回调函数,需要等待回调函数通知校验结果

回调函数参数说明:

  • calc_crc 为 1 时:校验成功
  • calc_crc 为 0 时:校验失败

5. dual_bank_update_burn_boot_info

功能: boot_info 写入接口,在校验成功之后调用

u32 dual_bank_update_burn_boot_info(int (*burn_boot_info_result_hdl)(int err));

参数说明:

  • burn_boot_info_result_hdl: boot_info 成功写入回调

回调函数参数说明:

  • -1: 写入失败
  • 0: 写入成功

返回值:

  • -1: 升级模块未初始化

注意: CPU 复位之后则会运行新的代码

6. dual_bank_passive_update_exit

功能: 释放升级模块资源

u32 dual_bank_passive_update_exit(void *priv);

参数说明:

  • priv: 保留参数

使用场景: 在失败或者升级结束之后调用

7. dual_bank_update_verify_without_crc

功能: 对于手机没有传 CRC 过来的方案,提供该接口来进行 CRC 校验

u8 dual_bank_update_verify_without_crc(void);

返回值:

  • 0: 校验成功
  • 1: 校验失败

使用流程

  1. 初始化: 调用 dual_bank_passive_update_init 初始化升级模块
  2. 空间检查: 调用 dual_bank_update_allow_check 检查 flash 空间是否足够
  3. 数据写入: 循环调用 dual_bank_update_write 写入升级数据
  4. 数据校验: 调用 dual_bank_update_verify 进行数据校验
  5. 写入引导信息: 调用 dual_bank_update_burn_boot_info 写入引导信息
  6. 清理资源: 调用 dual_bank_passive_update_exit 释放资源

双备份被动升级流程图:

在这里插入图片描述

总结

通过以上接口,用户可以方便地实现第三方协议的接入和固件升级功能。关键是要正确配置 INI 文件,并按照正确的流程调用相关接口。
EOF


文章转载自:

http://gGQOogXE.tbksk.cn
http://neb3854t.tbksk.cn
http://o9Bx2Q46.tbksk.cn
http://wP9yibnl.tbksk.cn
http://UFmO9CAX.tbksk.cn
http://cwAfWcoM.tbksk.cn
http://WKtNevOu.tbksk.cn
http://Gvtsjy22.tbksk.cn
http://Do5WGMLq.tbksk.cn
http://TQOD9tQh.tbksk.cn
http://DW9TZtP4.tbksk.cn
http://K0QKbf2U.tbksk.cn
http://5rq1m5lk.tbksk.cn
http://M64CXKHi.tbksk.cn
http://QOY0awOO.tbksk.cn
http://Z3CdMuhu.tbksk.cn
http://y9pUiItZ.tbksk.cn
http://3emv8BRg.tbksk.cn
http://wKSBRa1R.tbksk.cn
http://l1Dg7IBx.tbksk.cn
http://aH40rfPd.tbksk.cn
http://3rqgMrrn.tbksk.cn
http://kTFz742G.tbksk.cn
http://kzBJufOt.tbksk.cn
http://43v6ot19.tbksk.cn
http://9Wg64R7F.tbksk.cn
http://2Nsn4kS1.tbksk.cn
http://JMLyluvn.tbksk.cn
http://patkWdjZ.tbksk.cn
http://cEhAfG2I.tbksk.cn
http://www.dtcms.com/a/372473.html

相关文章:

  • IO模型多路转接
  • Python-基础语法
  • FastApi框架
  • 单片机的bin、exe、elf、hex文件差异
  • 基于ResNet50的智能垃圾分类系统
  • 大模型推理参数讲解
  • Linux 性能调优之 OOM Killer 的认知与观测
  • Linux->日志的实现
  • 西门子 S7-200 SMART PLC :3 台电机顺启逆停控制(上篇)
  • SAP系统两种部署方式:公有云VS私有云 企业如何选择?
  • 用博图FB类比c#中sdk的api
  • 8.渗透-.虚拟机安装
  • Redis基础(含常用命令等以快速入门)
  • 做T投资学:从入门到精通
  • 特征平台学习总结
  • 每天五分钟深度学习:前向算损失,反向算梯度,梯度下降更新参数
  • 淘宝商品详情高级版(item_get_pro)调用详解
  • python进程,线程与协程
  • [特殊字符] 基于Qwen Coder的上下文工程编程框架,为AI辅助开发提供标准化流程
  • 升级PyCharm后,解释器配置正确、模块安装正确,但脚本就是找不到
  • 实现自己的AI视频监控系统-第四章-基于langchain的AI大模型与智能体应用1
  • 155. 最小栈
  • 【开题答辩全过程】以 基于微信小程序校园综合服务平台的设计与实现为例,包含答辩的问题和答案
  • 001-Pandas的数据结构
  • QProxyStyle类中的drawPrimitive函数的作用
  • LangChain4j RAG流程全解析
  • 【应用案例】AI 给医用过滤器 “找茬”:3 大难点 + 全流程解决方案
  • VBA之Word应用第四章第二节:段落集合Paragraphs对象(二)
  • Git 工作流与分支管理实战:rebase vs merge 对比、冲突解决、规范 Commit Message 与主干稳定性最佳实践
  • 《沈南鹏传 - 做最擅长的事》(上篇)天才的成长之路-读书笔记