蓝牙BLE之CC2541 OAD升级[带看门狗OAD]

2023-05-16

说明和代码设置

本文有两篇文章参考,其中博主"甜甜的大香瓜"的文章是原始文章,详细介绍了ImageA的hexh和B的bin以及A的bin是怎么生成的和具体的操作方法:https://blog.csdn.net/feilusia/article/details/50289371,然后博主"龙井茶110"在"甜甜的大香瓜"的基础上做了一些具体操作上的补充https://blog.csdn.net/longjingcha110/article/details/88892773
这里在他们的基础上再做一些细节的补充,他们说具体步骤这里就不说了.经过配置后工程分成4个组:
在这里插入图片描述
CC2541:原本工程的分组,没有OAD能力也不用烧录BIM,擦除芯片(或者新的芯片)直接在IAR中下载即可
OAD_ImageA:生成image.hex的分组,适配https://blog.csdn.net/feilusia/article/details/50289371文章说的hex
OAD_ImageB:生成imageb.bin,用于软件升级
OAD_ImageA_Bin:这个分组和OAD_ImageA相比差异在于生成了bin固件,用于升级,和OAD_ImageB相比只是分区不同
如果要下载支持OTA工程的设备,下载步骤分为3步(要按个按照下面三幅图的选项来勾选):
擦除芯片:
在这里插入图片描述

下载BIM:
在这里插入图片描述

下载ImageA.hex:

在这里插入图片描述
这时候编译ImageA的时候会报如下错误,无需理会点击确认即可(因为ImageA只是生成hex不生成bin所以会报这个错误):
在这里插入图片描述

烧录步骤简介简化

经过测试只要按照如下步骤,只进行两次烧录也是可以的
擦除和烧录bim:
在这里插入图片描述

烧录ImageA:
在这里插入图片描述

BLE Device Monitor环境搭建

下载完成后就可以用工具"BLE Device Monitor"来升级代码了,这个工具也不是特别的好用,我折腾了好久才能够识别到设备,目前"BLE Device Monitor"工具支持TI的dongle和开发板的方式进行连接,下载的代码为"HostTestReleaseCC2540"工程生成的hex,虽然我没有找到这个工程,但是却在资料夹中找到了相关的hex:
在这里插入图片描述
其中带Usb字样的hex是运行在dongle板子上的程序(用USB连接),没有USB字样的是运行在开发板用串口连接,我这里恰好有开发板,所以下载不带USB的(亲自验证过是可以用CC2540来测试的),因为我的程序是适配开发板的,所以可以再开发板的屏幕上看到打印信息:
在这里插入图片描述
我这里波特率为115200没有检验位:
在这里插入图片描述

如果设备正常打开"BLE Device Monitor"后可以看到如下界面:
在这里插入图片描述

测试

连接上设备后进入OAD界面可以看到现在设备的版本信息如下:
在这里插入图片描述
为了辨别当前的程序是A还是B,而且也是为了验证是否升级成功,这里在开机启动的时候做了区分打印:

  #ifdef DEBUG_UART_LOG
  #if defined HAL_IMAGE_B
  HalUARTWrite (SBP_UART_PORT, "\x6F\x62\x64\x62\x76\x30\x2E\x30\x2E\x30", 10);//obdbv0.0.0
  #else
  HalUARTWrite (SBP_UART_PORT, "\x6F\x62\x64\x61\x76\x30\x2E\x30\x2E\x30", 10);//obdav0.0.0
  #endif
  #endif

升级成功后串口和工具的log如下(说明确实升级成功了):
在这里插入图片描述

在这里插入图片描述
成功升级了ImageB后连接进入OAD界面可以看到如下代码信息:
在这里插入图片描述
这时候可以升级OAD_ImageA_Bin分组的bin,升级成功后log显示如下:
在这里插入图片描述
按照上面的方法可以随意升级A,B两部分!所以比较好的方法是每次发布程序的时候都生成A,B的bin,升级的时候根据当前设备的类型来选择bin!

本文资料可以到如下网址下载:https://download.csdn.net/download/chengdong1314/87423333

带看门狗OAD

继续开发项目发现当代码中打开了看门狗后OAD就失败了,然后就想着OAD之前先关闭看门狗,但是可悲的发现CC2540打开了看门狗后就不能够关闭了,奇葩的设计:
在这里插入图片描述

在这里插入图片描述
这就没有办法了,只能够通过蓝牙发个命令过来设置一个掉电不丢失的标志位然后重新复位后不再打开看门狗:

设置标志位:
if(Start_Buf[4]== 0xaa)
      {
        eep.Flag = RESET_OAD;
        CTRL.Bits.SystemReset = TRUE;
          #ifdef DEBUG_UART_LOG
          dbg_printf("ResetOad\r\n");
          #endif
        EngerStar_CreateCmdReply("\x14\x01\x00\x00");
      }
      else
        EngerStar_CreateCmdReply("\x14\x00\x00\x00");
主循环中调用复位函数:
if(CTRL.Bits.SystemReset)
      {
        CTRL.Bits.SystemReset = FALSE;
        if(random)
          eep.Serial_number += random;
        else
          eep.Serial_number++;
        if(eep.Serial_number == 0)
          eep.Serial_number = 0x1021;
        osal_snv_write(BLE_NVID_USER_CFG_START,sizeof(_EEP), (void *)(&eep));
        HAL_SYSTEM_RESET();
      }
复位后不打开看门狗:
if(eep.Flag == RESET_OAD)
    {
      eep.Serial_number++;
      eep.Flag = PRO_HEAD;
      osal_snv_write(BLE_NVID_USER_CFG_START,sizeof(_EEP), (void *)(&eep));
      #ifdef DEBUG_UART_LOG
      dbg_printf("ResetOad_snv_write\r\n");
      #endif
    }
    else
    {
      #ifdef ENABLE_WD
      WD_INIT_1000MS();
      #endif
    }

使用如下命令复位不开看门狗:
ff550a30393936353937b1dc1400
ff550714aa0000cbe17100
经过这样修改后代码可以正常升级了,升级成B再次升级成A打印如下::
在这里插入图片描述
本章节所涉及的资料:https://download.csdn.net/download/chengdong1314/87425903

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝牙BLE之CC2541 OAD升级[带看门狗OAD] 的相关文章

  • 以太坊 分片是什么

    Ethereum Sharding An Introduction to Blockchain Sharding Alchemy Team May 18 2022 For years the question of blockchain s
  • 跨链桥——原子交换(Atomic Swaps),哈希时间锁(HTLC) 原理介绍

    什么是原子交换 xff1f xff08 Atomic swaps xff09 跨链原子交换 xff08 Atomic swaps xff09 是在两个平行链之间直接交换不同的加密货币的方法 就像用美元兑换人民币一样 xff0c 这是一个过程
  • OR-Tools|带你了解谷歌开源优化工具(Google Optimization Tools)

    转眼间暑假已经过去一大半了 xff0c 大家有没有度过一个充实的假期呢 xff1f 小编这两天可忙了 xff0c boss突然说发现了一个很有趣的开源求解器 xff1a OR Tools 经过一番了解 xff0c 小编发现它对于为解决优化问
  • 最小费用流 求解

    增广路径 匈牙利算法 二分图 https blog csdn net qq 37457202 article details 80161274 增广路径取反 xff1a 增广路上的边性质改变 xff0c 连上的变为可以连的 xff0c 可以
  • 区块链DAPP开发 以太坊智能合约框架有哪些

    一 truffle xff08 JavaScript xff09 Truffle 是一个在以太坊进行 DApp 开发的世界级开发环境 测试框架 使用 Truffle 开发有一以下优点 xff1a 内置智能合约编译 xff0c 链接 xff0
  • 区块链DAPP开发 智能合约开发工具IDE有哪些

    Remix http remix ethereum org ChainIDE https chainide cn zh CN ChainIDE提供云端编译功能 xff0c 无需繁琐的安装设置 xff0c 加速开发迭代速度 ChainIDE提
  • NFT和数字藏品的区别

    来源 xff1a 德勤 Web3 0模式分析及中国应用创新探索
  • Pycharm 增加 run 控制台缓冲行数

    找到 pycharm 安装目录的 bin 目录下 idea properties 文件 xff0c 修改 idea cycle buffer 值 xff0c 原来默认为 1024
  • python 类的定义一定要注意静态变量

    class A 静态变量 a 61 12 def init self a 成员变量 self a 61 a 静态变量通过 类名 变量名 来访问 print A a 12 成员变量通过 对象 变量名 访问的 print A 0 a 0 cla
  • python open按行读取txt 去掉\n

    加 strip 39 n 39
  • OOQP安装指南

    文章目录 1 OOQP的github链接 xff1a 2 准备工作 xff1a 3 安装OOQP xff1a 4 简单使用 xff1a 1 OOQP的github链接 xff1a ompl的官网网址为 xff1a https github
  • 海康摄像头实时显示与字符叠加详解

    1 说明 文章详细叙述了海康摄像头的两种实时显示方法 基于SDK 解码显示和基于数据流回调显示 xff0c 并且讲述了这在两种显示方法下如何往画面添加字符和图像 xff0c 最后比较了这两种方法的优劣 文章全程给以详细的程序说明 xff0c
  • Proto3序列化协议

    Proto3序列化协议 简介 对于互联网应用来说 xff0c 客户端 客户端 客户端 服务端之间需要数据的交互 xff0c 其数据传输是二进制流的方式在互联网上传输 xff0c 因为需要一种手段将数据对象编码为一种可以在网络上传输的二进制流
  • 一文读懂数据库分库分表

    阅读此文你将了解 xff1a 什么是分库分表以及为什么分库分表如何分库分表分库分表常见几种方式以及优缺点如何选择分库分表的方式 数据库常见优化方案 对于后端程序员来说 xff0c 绕不开数据库的使用与方案选型 xff0c 那么随着业务规模的
  • 从操作系统漫谈GOLang GPM模型

    前言 本文从操作系统谈起 xff0c 简单介绍操作系统基本知识 xff0c 引出进程 线程调度的基本原理和基本模型 xff0c 然后从0到1设计Golang调度器 xff0c 通过方案的逐步演进升级 xff0c 可以了解到GPM模型设计理念
  • 卡尔曼滤波经典讲解,C++算法实现

    请移步跳转文章排版更加清晰 在学习卡尔曼滤波器之前 xff0c 首先看看为什么叫 卡尔曼 跟其他著名的理论 xff08 例如傅立叶变换 xff0c 泰勒级数等等 xff09 一样 xff0c 卡尔曼也是一个人的名字 xff0c 而跟他们不同
  • 解决linux不能安装g++问题

    问题描述 xff1a Ubuntu如何通过重新安装G 43 43 编译器 xff0c 修复不能安装使用g 43 43 的问题 我刚安装的Ubuntu 14 10的g 43 43 编译器不能使用 xff0c 用sudo apt get ins
  • MySQL系列之源码浅析

    源码才是王道 真正的高手从来不是临场发挥 xff0c 随机应变是外人看来的错觉 1 主函数sql mysqld cc中 xff0c 代码如下 xff1a span class hljs keyword int span main span
  • 卡尔曼算法精讲与C++实现

    在学习卡尔曼滤波器之前 xff0c 首先看看为什么叫 卡尔曼 跟其他著名的理论 xff08 例如傅立叶变换 xff0c 泰勒级数等等 xff09 一样 xff0c 卡尔曼也是一个人的名字 xff0c 而跟他们不同的是 xff0c 他是个现代
  • 腾讯后端面试经验

    终于等来腾讯的面试 4 3号 机试 机试包括选择 xff08 30多 xff09 简答 xff08 2题 xff09 编程 xff08 2 xff09 选择和简答编程分别一小时 xff0c 选择题考的比较广 xff0c 概率 Linux 操

随机推荐

  • Springboot整合摘要式(Digest)身份认证

    百度下来关于springboot整合摘要式省份认证的帖子基本都是说原理的 xff0c 很少有直接的demo xff0c 前些天找到了一个博主写的demo xff0c 但是我只是截图了忘记了博主的地址很抱歉了 下面直接上代码截图 xff1a
  • kalibr相机内参标定优化过程和原理

    在估计出内参之后 xff0c 会进行优化迭代操作 如果是多相机标定 xff0c 在完成内参标定的同时 xff0c 也会完成具有交叉视野相机外参的的标定 初始估计步骤也会进行多相机基线距离的估计 xff0c 用作后续的迭代优化 优化过程如下
  • Curl多线程并发任务实例函数

    function curl post3 url arrs flen for i 61 0 i lt flen i 43 43 foreach arrs i as k 61 gt v tmp str 61 k 34 61 34 v 34 am
  • Linux下原子操作(信号量 自旋锁)的实现原理和底层代码分析

    csdn越改版 xff0c 越丑 开始我们的主题 xff1a Linux下原子操作 xff08 信号量 自旋锁 xff09 的实现原理和底层代码分析 2017年8月27日12 47 02 1 何为原子操作 xff1f 原子操作是什么 xff
  • Linux下用c语言实现发送http请求

    前言 在linux下 xff0c 使用socket进行编程 xff0c 需要到服务器上进行获取数据 xff0c 服务器使用的php编程 xff0c 需要使用http的方式进行获取数据 代码 span class hljs preproces
  • VSCode 的C++编译

    0 参考文档 0 1 官方参考 由于C 43 43 在不同平台上编译使用的编译器不同 xff0c 所以我们先将官网针对不同平台的编译文档摘录出来 xff0c 以便大家参考 xff1a 0 0 1 Linux平台使用GCC 参考 xff1a
  • STM32在子函数中的局部变量数组利用DMA发送无法正确发送数据的问题

    现象 xff1a 在子函数中 xff0c 定义了一个局部变量sendbuf 8 61 1 2 3 4 5 6 7 8 xff0c 然后分别利用普通串口发送函数发送可以正常发送和利用DMA发送 xff0c 并利用串口调试助手查看 xff0c
  • 如何使用Qt插件在Qt中进行ROS开发

    一 前言 本文介绍一种Qt下进行ROS开发的完美方案 xff0c 使用的是ros industrial的Levi Armstrong在2015年12月开发的一个Qt插件ros qtc plugin xff0c 这个插件使得Qt 新建项目 和
  • MN316_OPEN(NBIOT)物联网模块环境搭建

    因为项目的需要 这里要使用NBIOT 踩了一些坑 这里总结一下 编译 官方给的SDK如下 按照说明 在该目录下直接运行如下指令 34 build bat dlvs h0 demo 34 即可成功编译 但是我编译的时候不成功 报错如下 最后发
  • 《学习STL》-1.STL简介

    引言 当你C 43 43 入门后 xff0c 学了些C 43 43 编程规则 xff0c 正如 C 43 43 Primer 里的内容 xff0c 你知道C 43 43 里面的基本数据类型 循环 判断 函数 类 模板等 这阶段你的确会编写一
  • linux查看大小端命令

    Byte Order Litter Endian 小端模式 xff0c 绝大部分机器都是小端模式
  • 星网宇达利用NTRIPClient连接千寻服务器获取差分定位数据

    硬件设备 xff1a 星网宇达XW GI5610 软件设备 xff1a QXNTRIPClient 连接方式 xff1a 星网宇达RTK RS232连接电脑串口 打开QXNTRIPClient xff0c 连接千寻服务器 接收下发RTK数据
  • Ubuntu20.04 安装 mNetAssist

    安装环境 xff1a Ubuntu20 04安装包 xff1a mNetAssist release amd64 deb 安装与运行 span class token function sudo span span class token
  • 使用 include-what-you-use 检测冗余头文件

    include what you use 可以很方便的检测未使用的头文件 xff0c 使用的时候绕了点路 xff0c google后解决 xff0c 记录一下 1 安装clang ubuntu下直接apt get 安装就行了 需要注意的是
  • C语言结构体对齐详解

    文章目录 一 C语言结构体对齐大小快速判断二 反汇编角度看结构体三 总结 一 C语言结构体对齐大小快速判断 在C语言中定义一个结构体 xff0c 里面具体占用多少个字节呢 xff0c 先举一个例子 xff0c 如下 xff1a span c
  • 飞控各传感器相关作用

    飞控主要包括主控处理器MCU xff08 main control unit 和惯性导航模块IMU xff08 Inertial Measurement Unit xff09 四轴则必须配备3轴陀螺仪 xff0c 是四轴飞行器的机械结构 动
  • C++ : C++基础 :从内存的角度看 char[]和char*

    char 和char 区别 1 xff1a 数据在内存中的存储2 xff1a char 和 char 分析3 xff1a char p2 和 char p1 3 1 修改指针所指向的地址 4 string转char 5 char 转stri
  • 基于 nonce 的用户身份验证协议

    一 xff1a 什么是nonce 维基百科 xff1a 安全工程中 xff0c Nonce 是一个在加密通信只能使用一次的数字 在认证协议中 xff0c 它往往是一个 随机或 伪随机数 xff0c 以避免 重放攻击 二 xff1a 举例说明
  • php从数据库读取菜单数据并树状显示

    数据库表结构 mcp node表 字段 node code node name node pcode node code为区域编码 node name为区域名称 node pcode为父区域编码 祖先父区域编码为0 预期效果 代码实现部分
  • 蓝牙BLE之CC2541 OAD升级[带看门狗OAD]

    说明和代码设置 本文有两篇文章参考 其中博主 34 甜甜的大香瓜 34 的文章是原始文章 详细介绍了ImageA的hexh和B的bin以及A的bin是怎么生成的和具体的操作方法 https blog csdn net feilusia ar