前言

泰凌微的SDK中已经实现了OTA功能,具体的处理已经被封装到库中,开发可以在不修改代码的情况下通过官方的APP来完成升级功能
如有异议,欢迎留言指正

MCU地址划分

  • 从0~0x7FFFFF的8M空间为程序空间,最大容量可以扩展到8M
  • 0x800000~0x80FFFF为寄存器空间
  • 0x840000~0x84FFFF为Sram空间,最大容量为64K

固件地址划分

  • 固件小于124K时,将把地址划为0x00000~0x1FFFF与0x20000~0x3FFFF进行交替升级
  • 固件大于124K小于252K时,将地址划为0x00000~3FFFF与0x40000~7FFFF进行交替升级
    未使用到的地址均可被用作用户自定义信息存储

OTA升级机制

地址标识

0x20000地址划分

  • MCU上电后会默认从0地址启动,首先去读0x08地址的数据信息,值为0x4B时会从0地址开始搬移代码到RAM,指令取指也从0地址开始
  • 如果值不为0x4B,MCU会去读取0x20008地址的值,如果读取到的值为0x4B,则代码搬移和指令取指会从0x20000地址
    0x40000地址划分
  • 同上,标识地址为0x00008与0x40008,必须通过接口配置bls_ota_set_fwSize_and_fwBootAddr
//设置最大的firmware size 为 252K
bls_ota_set_fwSize_and_fwBootAddr(200, 0x40000);//200k, 4byte对齐

流程
  • app连接上设备获取到指定的服务后,会下发OTA_start命令通知设备加入OTA升级模式

  • app将固件信息持续不断下发给设备

  • 固件传输完成后,app会继续发送一个OTA_end命令

  • 设备收到OTA_end命令后,进行固件更新与指定标识的擦写,并重启系统跳转到新固件运行

过程中如果出现接收超时、丢包、错包,设备slave会主动断开连接并重启

OTA数据

BLE属性定义

在app_att.c中定义了ota的服务与读写属性,这里是泰凌微私有的,不用修改

static const attribute_t my_Attributes[] = {// OTA /// 002e - 0031{4,ATT_PERMISSIONS_READ, 2,16,(u8*)(&my_primaryServiceUUID),  (u8*)(&my_OtaServiceUUID), 0},{0,ATT_PERMISSIONS_READ, 2, sizeof(my_OtaCharVal),(u8*)(&my_characterUUID), (u8*)(my_OtaCharVal), 0},               //prop{0,ATT_PERMISSIONS_RDWR,16,sizeof(my_OtaData),(u8*)(&my_OtaUUID),   (&my_OtaData), &otaWrite, &otaRead},            //value{0,ATT_PERMISSIONS_READ, 2,sizeof (my_OtaName),(u8*)(&userdesc_UUID), (u8*)(my_OtaName), 0},}

泰凌微SDK中OTA的UUID固定

{0x12,0x2B,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00}
数据协议

Att_value中数据定义为通信命令和固件数据的格式,20字节的数据划分为如下

  • 当前两位数据为0xFF00~0xFF10时,表示OTA的命令

    • 0xFF00:获取设备slave的版本号命令
    • 0xFF01:启动升级命令
    • 0xFF02:升级结束命令,app(master)发送完固件数据后下发
  • 固件发送过程中,仅16个byte为实际有效数据,设备(slave)检测到包数据中索引(index)不连续或CRC错误就会主动退出升级并重启

代码实例

  • 参考app.c中的代码,在user_init_normal中进行空间清除与ota事件回调注册
// OTA init
bls_ota_clearNewFwDataArea(); //must
bls_ota_registerStartCmdCb(entry_ota_mode);//注册ota_start回调
bls_ota_registerResultIndicateCb(show_ota_result);//注册ota结果回调
  • 回调中增加参数配置与交互提示
void entry_ota_mode(void)//启动ota回调
{bls_ota_setTimeout(15 * 1000 * 1000); //设置升级超时15秒  set OTA timeout  15 seconds#if(BLT_APP_LED_ENABLE)gpio_set_output_en(GPIO_LED, 1);  //output enablegpio_write(GPIO_LED, 1);  //打开LED显示 LED on for indicate OTA mode#endif
}void show_ota_result(int result)
{#if(1 && BLT_APP_LED_ENABLE)gpio_set_output_en(GPIO_LED, 1);if(result == OTA_SUCCESS){  //OTA 升级成功gpio_write(GPIO_LED, 1);sleep_us(500000);gpio_write(GPIO_LED, 0);sleep_us(500000);gpio_write(GPIO_LED, 1);sleep_us(500000);gpio_write(GPIO_LED, 0);sleep_us(500000);}else{  //OTA 升级失败,result为失败状态#if 0 //this is only for debug,  can not use this in application codeirq_disable();WATCHDOG_DISABLE;while(1){gpio_write(GPIO_LED, 1);sleep_us(200000);gpio_write(GPIO_LED, 0);sleep_us(200000);}#endif}gpio_set_output_en(GPIO_LED, 0);#endif
}
  • OTA升级结果状态码
enum{OTA_SUCCESS = 0,     //successOTA_PACKET_LOSS,     //lost one or more OTA PDUOTA_DATA_CRC_ERR,     //data CRC errOTA_WRITE_FLASH_ERR,  //write OTA data to flash ERROTA_DATA_UNCOMPLETE,  //lost last one or more OTA PDUOTA_TIMEOUT,        //OTA_FW_CHECK_ERR,
};

泰凌微TLSR825X开发八 OTA升级相关推荐

  1. 泰凌微TLSR825X开发十三 蓝牙长包通信

    前言 泰凌微TLSR825X是支持BLE5.0的,SDK包含了data length extension数据包扩展功能,数据最大长度251字节,可以提高大数据通信效率. 本章主要讲解下长包的通信交互与 ...

  2. 泰凌微TLSR825X开发一蓝牙通信实例

    背景 泰凌微蓝牙方案在消费类产品中近两年才火起来,实际网上也没有太多资料,芯片缺货的情况下作为替代方案还是可行的,手上有块TLSR8258的开发板,也就边看文档调试边记录 这里采用8258的方案在调, ...

  3. 泰凌微TLSR825X开发六 片上flash擦写

    前言 TLSR8258片上flash容量有512K,对于一般的应用已经绰绰有余了,程序未使用到的部分可以用来做数据掉电存储 如有异议,欢迎留言指正 特性 扇区擦除4kB 块擦除支持32kB/64kB ...

  4. 泰凌微TLSR825X开发五 硬件IIC

    前言 TLSR8258支持硬件I2C串行总线,可作为主模式(master)和从属模式(slave) 泰凌微I2C模块支持标准模式100kbps和快速模式400kbps,但必须保证系统时钟频率是通信速率 ...

  5. 泰凌微TLSR825X:定时器以及中断

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.TLSR825X的定时器有什么? 二.使用步骤 1.定时器的初始化 2.定时器中断中对不同的定时器进行功能操作 总 ...

  6. [Telink泰凌微825x]硬件开发环境搭建(一)

    使用安信可TB04模块搭建泰凌微官方SDK开发环境 文章目录 目录 前言 一.模块的选择 二.原理图说明 1.原理图 2.原理图说明 3.GERBER文件下载 总结 前言 最近需要用到蓝牙mesh组网 ...

  7. TB-02 Kit开发板及TB系列BLE蓝牙模块固件及天猫精灵三元组串口烧录工具操作方法说明及固件市场介绍(基于泰凌微TLSR8258芯片)

    摘要 这篇文章介绍如何通过烧录工具给TB系列蓝牙模块烧录固件及天猫精灵三元组,以及如何通过烧录工具的固件市场下载最新的固件及固件操作说明文档. 获取烧录工具 安信可团队针对TB系列蓝牙模块专门开发了烧 ...

  8. 泰凌微ble mesh蓝牙模组天猫精灵学习之旅③简单入门安信可TB-02开发开发板轻松接入天猫精灵,语音控制冷暖灯so easy!

    本<泰凌微ble mesh蓝牙模组天猫精灵学习之旅>系列博客学习由半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.小白也痴迷,如 ...

  9. 泰凌微ble mesh蓝牙模组天猫精灵学习之旅④如何在Android开发低功耗蓝牙ble控制 TB-02 模块,代码工程全部开源!(附带Demo)

    本<泰凌微ble mesh蓝牙模组天猫精灵学习之旅>系列博客学习由半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.小白也痴迷,如 ...

最新文章

  1. 深度学习中的噪声数据该如何处理?
  2. 【学习】009 NIO编程
  3. opengl es 2.0环境
  4. latex使用subequations后,段后首行文字不对齐
  5. php旧版本windows_Windows的旧版本中如何进行多任务处理?
  6. 程序员,35岁就可能被替换的职业,遇到好的领导多么重要
  7. chromedriver@2.41.0 install: `node install.js`安装失败解决;npm安装报错
  8. 假设以带头结点的循环链表表示队列_数据结构·链表(C实现)
  9. Mac os安装SEAL
  10. centos mate桌面_CENTOS7安装各种桌面系统 CENTOS安装桌面图形化GUI GNOME/KDE/Cinnamon/MATE/Xfce...
  11. [整理]flex,datagrid数值列排序
  12. 在多树联动和动态生树的情况下给树上添加新节点
  13. 动手实现对外安全的接口(写于天寒地冻的正月初九)
  14. Spring Boot @DeleteMapping(转)
  15. linux mysql 邮件_linux中mysql 自动备份发邮件 到指定邮箱代码
  16. 功能测试之电梯的测试用例【杭州多测师】【杭州多测师_王sir】
  17. 用adblock来屏蔽百度热搜
  18. 游戏中的人工智能AI设计
  19. Centos8修改mysql密码
  20. 《心经》:渡人,渡己,渡心

热门文章

  1. Unity导出的WebGL、网页前端、服务端以及硬件四级交互结构的实现(简单3d建模网页端物联网)
  2. 计算器求解一元一次方程
  3. 一篇带你搞懂 java 集合
  4. 用C语言代码编写一个五子棋小游戏
  5. 安卓开发--连接到聚合网,获取JSON数据并解析(踩了好多好多坑)
  6. vue中引入swiper(4.0+),打包出错( ERROR in static/js/4.bafdba9a08bd02fd1c37.js from UglifyJs Unexpected toke)
  7. 成都工业职业技术学校计算机,成都市计算机工业职业技术学校2020年招生简介...
  8. Openpose Usage 笔记
  9. oracle----存储过程
  10. 如何做好项目风险管理