MCU启动异常分析记录

2023-05-16

一.问题背景

量产的产品在品质抽检中出现设备概率无法正常使用的问题,经过初步定位确定是MCU上电未正常启动。

二.问题分析以及定位

在产品中考虑到MCU程序升级(RF SUB-1G升级,NB-IOT等无线升级方法),因此采用的的是IAP升级架构

以STM32F103为例来说明,该型号MCU FLASH起始地址0x08000000,大小512KB即 0x00080000FLASH 的ERASE是2KB。

MCU的FLASH分区主要包括以下几个部分

在这里插入图片描述
概率无法启动可能的原因:

1)boot阶段异常,如启动流程卡住等;

2)boot阶段正常启动,但跳转到APP程序异常,如未跳转成功,此部分涉及CPU中断向量,中断设备,外设DMA设置等内容,需要重点检查 ;

3)boot阶段启动正常,boot跳转到app正常,app启动异常如启动流程卡住

1.复现问题方式

外接串口小板,通过不断的插拔电池,查看UART日志进行启动判断是否正常来复现问题 。这种方式比较考验体力

另外的自动化上下电启稳定性验证,即智能门锁设备+UART小板+电源控制工装,

其中电源控制工装,支持自定义设置上下电时间间隔,并支持UART特定单词监控,负责对智能门锁的上下电进行控制,并监控启动过程中打印,如正常启动的打印是app start ok,则代表当前启动成功,继续进行下电 上电启动验证,如在一定时间内未监控到app start ok,则代表当前启动异常,不进行下一次的上下电测试,保留现场,用于查看分析问题;

2.通过复现问题可定位是原因2,即boot阶段正常启动,但跳转到APP程序异常,未跳转成功,此部分涉及CPU中断向量,中断设备,外设DMA设置等内容,现有的启动跳转未对外设UART资源进行充分释放

三.解决问题及其方法原则

boot是一个可完全使用MCU资源的程序

app也是一完全使用MCU资源的程序

要求在boot跳转到app的时候,几个通用的程序处理流程;

1)boot程序正确设置跳转地址等相关信息 ,如下列参考代码

#define ApplicationAddress    0x8020000 //128KB
#define ApplicationSize       0x0030000



  /* Jump to user application */
     JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
    
     printf("**********JUMP TO APP=0X%08X*********\r\n",JumpAddress);
     Jump_To_Application = (pFunction) JumpAddress;
     /* Initialize user application's Stack Pointer */
     __set_MSP(*(__IO uint32_t*) ApplicationAddress);
     Jump_To_Application();

2)app程序正常映射FLASH的分区CPU及其外设资源 要充分释放干净,如UART的DMA通道要释放,DMA要停止运行,UART的中断要关闭

此部分是最容易被考虑不全忽略的,在此我们总结一个原则,原则上boot初始化用了哪些外设,如UART,DMA,中断等,跳转前均要做确认,是否需要释放

该部分操作在上述跳转代码前需要执行到位

3)app分区的相关地址空间设置以及代码连接文件正确

在这里插入图片描述
在这里插入图片描述

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

MCU启动异常分析记录 的相关文章

随机推荐

  • C语言结构体和链表结合,C语言结构体与链表

    C语言结构体与链表 第 10章 CHAPTER 10 结构体与共用体 学习目标 本章主要介绍结构体的定义和使用方法 xff0c 然后介绍链表的概念和相关操作 xff0c 最后介绍两种新的数据类型 共用体和枚举 通过本章的学习 xff0c 需
  • 关机一直显示正在关闭服务器,Win7系统关机速度慢一直显示“正在关机”怎么解...

    win7系统关闭速度慢的问题一直困扰着许多用户 xff0c 开机 关机速度快都是很重要的 有些使用win7旗舰版一段时间后 xff0c 发现关机速度很慢 xff0c 屏幕一直显示 正在关机 要等待很久才可以真正关闭 xff0c 浪费很长时间
  • linux 开源路由器,OpenWrt 18.06.4 发布 开源路由器项目

    OpenWrt Project 是一个针对嵌入式设备的 Linux 操作系统 xff0c 它用于取代供应商提供的各种无线路由器和非网络设备固件 W I R E L E S S F R E E D O M
  • 大智慧行情服务器在哪个文件夹,【大智慧】大智慧公式在哪个文件夹?

    以前重装系统和重股票软件自选股 公式都得重来一次烦死了 xff0c 这里给股友整理一下 xff0c 希望对股友有用 xff1a 大智慧L2的公式指标是在 dzh2 userdata SELFN DT 大智慧中的自选股放在 dzh cfg n
  • 微型计算机硬件组成一般包括,微机的硬件组成试题解析

    微机的硬件系统指构成微机系统的物理实体或物理装置 从系统构成来说 xff0c 微型计算机与其他类型的计算机既有共同之处 xff0c 也有其自身的特点 xff0c 主要表现在集成的微处理芯片以及总线结构上 从用户角度看 xff0c 微机硬件系
  • 用sci-hub的文献检索方法

    很多文献在知网上下载要付费 xff0c sci hub上有很多不用付费并且独有的数据库文献资源 可以作为文献检索的补充 下面是一些具体方 一 下载网址 SCI Hub论文下载可用网址链接 xff08 实时更新 xff09 YoviSun工具
  • ubuntu及shell脚本常用命令入门

    一 Shell命令 二 ubuntu软件安装方法 三 Ubuntu文件系统结构 四 ubuntu磁盘文件 五 Linux下常用的压缩格式 六 linux用户和用户组 七 Ubuntu Linux文件权限 八 linux连接文件 九 vim编
  • linux 内存 动态加载,Static_Module: 本项目在MCU(STM32)平台实现类似于Linux内核模块的动态加载功能,但不是将模块加载到内存(SRAM)而是加载到Flash。 所以叫做...

    Static Module Demo 介绍 本项目在MCU STM32 平台实现类似于Linux内核模块的动态加载功能 xff0c 但不是将模块加载到内存 SRAM 而是加载到Flash 所以叫做静态加载 xff0c 而被加载的模块就叫静态
  • 大数据学习心得与总结

    作业一 hadoop搭建伪分布式 1 关闭防火墙 systemctl disable firewalld 2 传输JDK和HADOOP压缩包 版本自行留意 这里建议使用xshell和xftp6 3 解压JDK HADOOP 这里解压安装至o
  • docker--容器和镜像的导入导出及部署

    一 镜像导出 save 1 查看镜像 docker images 2 导出镜像 docker save o test tar image name 或 docker save image name gt test tar 二 容器导出 ex
  • 项目经验介绍的STAR法则--面试

    STAR法则 这几天面试其他人的时候 xff0c 找出来了这个STAR法则 xff0c 我一般也是这么去面试和引导面试者的 xff0c 分享出来 xff0c 供大家参考 什么是STAR法则 xff0c STAR 是SITUATION xff
  • 浮点数的二进制表示方法

    浮点数的二进制表示 Double型 xff0c 64位 例一 xff1a 已知 xff1a double类型38414 4 xff0c 求 xff1a 其对应的二进制表示 分析 xff1a double类型共计64位 xff0c 折合8字节
  • PHP解决http和https跨域,PHP解决HTTP和HTTPS跨域共享session的方法及代码实例

    HTTP HTTPS协议下跨域解决session共享的办法 xff0c 也许不是最好的 xff0c 但是比较实用 如下是具体的解决方案 阿里西西小编给您推荐这个PHP解决HTTP和HTTPS跨域共享session的方法及代码实例 xff0c
  • ucosii使用

    当需要同时跑多个任务的时候裸机显然不能很好的完成使命 xff0c 这个时候我们可以给单片机上系统 xff0c 创建多任务 xff0c 完成复杂逻辑 一 首先移植uocii在我们的板上 xff0c 根据mcu型号移植ucosii xff0c
  • QT以POST方法上传文件(文本、图片、excel文件等)

    最近项目需要用QT上传文件给HTTP服务器 之前服务器接收的数据格式都是json xff0c 这次是form data 经查找资料 xff0c 需要用到QHttpMultiPart和QHttpPart这两个类 xff0c 看QT的实例教程可
  • js数组删除元素

    var arr 61 39 a 39 39 b 39 39 c 39 若要删除其中的 39 b 39 有两种方法 xff1a 1 delete方法 delete arr 1 这种方式数组长度不变 此时arr 1 变为undefined了 但
  • 回调函数简单使用

    一 回调函数是什么 xff0c 我们为什么要用它 xff1f 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针 xff08 地址 xff09 作为参数传递给另一个函数 xff0c 当这个指针被用来调用其所指向的函数时 xff0c
  • pwm控制电机原理

    首先我们要明白电机的原理 电机 简单来说就是 实现电能与机械能相互转换的电工设备 那么我们经常使用的直流电机原理就是 xff1a 电生磁 xff1a 通电导线会产生磁场 也就是电磁感应 旋转磁场带动转子转动 电动机是由定子和转子组成 xff
  • FLASH操作记录

    使用的单片机为GD403系列 xff0c 要操作的数据flash地址位于bank1 xff0c 最小操作单位为一页 xff0c 即4k 下面程序演示操作一页中部分内存空间 span class token macro property sp
  • MCU启动异常分析记录

    一 问题背景 量产的产品在品质抽检中出现设备概率无法正常使用的问题 xff0c 经过初步定位确定是MCU上电未正常启动 二 问题分析以及定位 在产品中考虑到MCU程序升级 RF SUB 1G升级 xff0c NB IOT等无线升级方法 xf