纳芯微丨低资源占用、快速切换:单 Bank Flash MCU 在线升级方案解析

发布时间:2026-06-04 10:23
作者:AMEYA360
来源:纳芯微
阅读量:772

  随着智能产品进入规模化应用,现场固件更新能力已成为产品持续迭代的重要支撑。对于 MCU 系统而言,固件升级不仅要完成新版本程序写入,还需尽量降低升级过程对设备运行状态和用户使用体验的影响。

  针对单 Bank Flash MCU 平台,本文提出一种不断电固件升级方案,通过软件架构设计实现安全、快速、用户低感知的现场固件更新,为单 Bank Flash MCU 提供在线升级能力。

  01 方案背景

  目前,MCU 常见固件升级方式包括 IAP(In Application Programming)、ISP(In System Programming)、双 Bank 升级、OTF(On The Fly)、LFU(Live Firmware Update)以及 LiveUpdate 等。其中,不断电升级通常要求系统在升级过程中保持业务运行,不依赖设备重启,并实现新旧固件的平稳切换。

  现阶段,OTF 和 LFU 是较为常见的不断电升级方案,但通常依赖 MCU 具备双 Bank 架构的 Flash 存储器。而在实际应用中,单 Bank Flash MCU 仍然占据较大存量。由于单 Bank Flash 不具备动态 Bank 切换能力,如何在不依赖双 Bank Flash 架构的前提下,实现无停机、无复位、业务连续的现场固件升级,成为单 Bank Flash MCU 在线升级设计中的关键问题。

  02 系统架构与核心技术点

  由于单 Bank 架构的 Flash 不具备动态切换 Bank 或启动时自动切换 Bank 的功能,因此需增加 Bootload 程序,负责系统引导、启动选择及运行环境构建。Bootload 支持烧录 App 固件、读取 App 信息区、并为 App 区配置运行环境。

  这种架构可支持多个 App 区,每个 App 区均设有独立的信息区。信息区用于存储对应固件分区的关键参数,包括加载地址(LoadAddress)、运行地址(RunAddress)、代码长度(Length)以及中断初始化程序等必要信息。

  整体方案的组成框架如图 1.1 所示。需要实现的关键技术包括:

  ① APP 区信息的保存与动态分析;

  ② 切换 APP 区时的定点切换;

  ③ 在主循环内更新主循环本身。

纳芯微丨低资源占用、快速切换:单 Bank Flash MCU 在线升级方案解析

  图 1.1 单 Bank 不断电升级方案框架

  03 固件分区与信息提取

  Bootload 与 App 区在运行过程中需动态读取固件信息,以便为后续执行的目标代码构建运行环境。需特别说明的是,Bootload 跳转至 App 区的机制与 App 区之间的跳转机制并不相同。在本文提供的方案中,Bootload 跳转至 App 区采用传统的 IAP 跳转方式;而 App 区之间的跳转则基于固定代码区的锁定机制,以确保跳转过程的安全性。

  Flash 存储器需要通过 FMC 模块与 CPU 进行通信,Flash 在执行擦除操作时需耗费一定时间,若在此期间 CPU 发起对 Flash 的读取请求,将会因为等待 FMC 完成擦除而导致阻塞。

  这引入了第一个需要解决的问题—— App 区内擦除 Flash 阻塞。为避免该问题,在擦除 Flash 时应避免 CPU 同时读取 Flash,相关操作需置于 SRAM 或 ITCM 中执行。

  为简化实现流程,本方案将 App 区固定运行于 SRAM 中。Bootload 在启动阶段将 App 代码从 Flash 手动拷贝至 SRAM,从而有效避免擦写冲突,确保升级过程的稳定与可靠。

  App 区的分区功能使用的是 Sct 分散加载脚本功能,如程序清单 1.1 所示。

  程序清单 1.1 App 区的 Sct 文件

纳芯微丨低资源占用、快速切换:单 Bank Flash MCU 在线升级方案解析

纳芯微丨低资源占用、快速切换:单 Bank Flash MCU 在线升级方案解析

纳芯微丨低资源占用、快速切换:单 Bank Flash MCU 在线升级方案解析

  以 App0 为例,其分区信息与作用描述如表 1.1 所示。

  表 1.1 App 区的分区功能描述

纳芯微丨低资源占用、快速切换:单 Bank Flash MCU 在线升级方案解析

  固件信息区 FIRM_DROM 用于存储程序清单 1.1 中各个分区的关键参数,包括加载地址(LoadAddress)、运行地址(RunAddress)、代码长度,以及用户自定义和其他辅助信息。这些信息通过编译器自动生成的全局环境变量进行记录,具体声明方式如程序清单 1.2 所示。

  程序清单1.2 分区信息保存方法

纳芯微丨低资源占用、快速切换:单 Bank Flash MCU 在线升级方案解析

  清楚如何将 Load 地址拷贝到 Image 、和复制长度,即可动态搭建不同固件的运行环境。

  04 固定代码区

  堆栈污染防护机制

  在 C 程序运行过程中,堆(Heap)用于程序源动态申请和释放临时变量,而栈(Stack)则用于在子函数调用或中断触发时保存临时变量、返回地址等上下文信息,通过“进栈-出栈”机制实现函数调用链的正确返回与运行环境恢复。

  基于上述机制,引入本方案需解决第二个关键问题——App区相互跳转前后,堆栈中保存的返回地址与新固件无法对接,即“堆栈污染”问题。由于 App0 与 App1 区的代码随用户程序迭代而不断变化,若直接跳转极易因堆栈不一致导致系统异常。为此,方案引入固定代码区以保障跳转过程的稳定性。

  固定代码区本质上位于 main() 函数内的主循环(如 while(1) )中。该循环具备一个重要特性:所有子函数执行完毕后均会返回至主循环入口,中断服务程序执行完毕后也同样返回到此位置。根据堆栈行为特点,当程序运行于主循环内部时,堆栈中不会保留函数调用信息,此时堆栈处于“最干净”状态,从而有效避免了跳转过程中的堆栈污染问题。

  要做到这点,需要将 main() 放到 FIXCODE 区域内,然后 main 内部的初始化和主循环内统一调用子函数,增减的代码都在子函数内处理,让切换 App 区执行代码不发生偏移。如程序清单 1.3 所示。

  程序清单 1.3

纳芯微丨低资源占用、快速切换:单 Bank Flash MCU 在线升级方案解析

纳芯微丨低资源占用、快速切换:单 Bank Flash MCU 在线升级方案解析

  05 运行时固定代码区更新策略

  FIXCODE 本身是 main() 和主循环,里面同样包含用户层的应用代码,所以更新固件这部分也同样需要更新到最新版本。本方案需要解决第三个关键问题——程序运行期间不能被擦除,否则会导致指令读成乱码,所以在更新固定代码区的操作要放在非固定代码区,且保证执行完后能回到正确的堆栈点。

纳芯微丨低资源占用、快速切换:单 Bank Flash MCU 在线升级方案解析

  图1.2 更新固定代码区

  06 中断向量表与函数分区更新实现

  中断处理包括中断向量表处理和中断函数处理。中断函数通过声明中断服务函数以及其调用的子函数分配到 RW_APP0_ITCM 区,这样就可以通过分区更新功能统一更新。本方案需要重点处理中断向量表。

  中断向量表涉及的方面包含以下几处地方:

  ① Sct 文件内声明的 RESET 区域,如程序清单 1.1 所示;

  ② SDK 包内默认的中断向量表地址,包括 Flash 中断向量表和 VT_DTCM 的中断向量表;

  ③ 在切换新固件的中断部分,准备好内存空间,最后修改 VTOR;

  在第二点中,SDK 内对中断向量表的操作如程序清单 1.4 所示。

  程序清单 1.4 SDK 包中断表处理

  代码路径:interrupt.c

纳芯微丨低资源占用、快速切换:单 Bank Flash MCU 在线升级方案解析

  VECTOR_TABLE_FLASH_ADDRESS 是指固件的头部装载地址,需要留意的是,这个表里还包含了默认处理函数句柄以及 Reset 等前面不可屏蔽的处理函数。

  SDK内默认将 VECTOR_TABLE_FLASH_ADDRESS 设置为 0x08000000,对每个 APP 区必须在 interrupt.h 内改为对应地址。

  程序清单 1.3 内的函数实现的主要目的,是将存放在 DTCM 空间内的 vectorTableDTCM 表重初始化。

  在 App 区内的操作流程如图 1.3 所示。可看到板级初始化做的是 App 本身所占用的中断表地址,而切换则是搭建新固件的中断表地址。

纳芯微丨低资源占用、快速切换:单 Bank Flash MCU 在线升级方案解析

  07 变量偏移防护与共享内存设计

  由于业务逻辑要持续运行,所以对于关键的状态变量、计数变量等需要做特殊处理。这里就提出第四个问题——由于编译器为节省空间,会将变量紧密排序,从而导致全局变量在切换到新固件时产生不可预计的偏移。简单而言就是将这类需要继承的变量,存放在 ShareMemory 空间内,并以绝对地址的形式固定下来。这种方案相较于其他依赖编译器的固定方式最直接快速。

纳芯微丨低资源占用、快速切换:单 Bank Flash MCU 在线升级方案解析

纳芯微丨低资源占用、快速切换:单 Bank Flash MCU 在线升级方案解析


(备注:文章来源于网络,信息仅供参考,不代表本网站观点,如有侵权请联系删除!)

在线留言询价

相关阅读
纳芯微与您相约 2026 DVN 上海研讨会
简化多维位置感知设计,纳芯微推出NSM903x三轴线性位置传感器
  近日,纳芯微推出三轴线性位置传感器NSM903x,该产品集成X、Y、Z三轴磁场检测能力,采用I²C数字接口,具备可配置中断功能,磁场检测范围最高达±2400Gs,面向智能穿戴、折叠屏手机、学习平板及智能家居等消费电子产品。  消费电子产品形态和交互方式不断丰富,需要识别的位置变化也更加多样。传统单轴线性霍尔方案在应对部分多维位置或角度检测需求时,通常需要多颗器件协同,同时还需考虑有限空间内的磁铁布局和系统资源配置。凭借单芯片多维感知能力,NSM903x有助于减少多器件组合带来的设计复杂度,提升位置与角度检测设计的灵活性。  三轴检测结合角度计算  一颗芯片覆盖更多感知需求  NSM903x内部集成三个独立霍尔感应单元,分别检测X、Y、Z三个方向的磁场信息,芯片内置CORDIC角度计算引擎,支持基于不同轴向的磁场组合完成角度解算,输出0°至360°角度数据。  凭借单芯片集成的磁场检测与角度解算能力,NSM903x减少了器件数量,简化磁铁与传感器的布局设计,可广泛应用于智能手表旋钮、折叠屏手机开合角度、学习平板折叠摄像头、家居安防云台及摇杆等场景,实现线性位置、旋转角度等不同类型的角度检测。  最高±2400Gs磁场检测范围  为结构设计提供更多空间  在消费电子产品中,磁铁材质、尺寸及其与传感器之间的距离往往受到内部结构影响,传感器接收到的磁场强度也会随之变化。  NSM903x提供±400Gs、±800Gs、±1200Gs和±2400Gs多档可选线性磁场检测范围。更宽的检测范围意味着在磁铁选型以及磁铁与芯片间距设计上有更大的调整余量,也便于根据终端内部空间进行布局。  I²C数字输出与多器件支持  简化系统集成  NSM903x采用I²C数字通信接口直接向主控输出数字信号,并支持多个器件ID,同一条I²C总线最多可连接四颗NSM903x,在部署多个位置传感器时无需分别占用I²C接口,节省主控接口资源。  此外,NSM903x支持可配置中断功能。可设置相应的触发条件,当检测状态达到设定阈值时,通过独立引脚输出中断信号。以智能手表旋钮应用为例,中断信号可用于功能唤醒等交互,主控无需持续轮询角度数据。  完善线性位置传感器布局  覆盖更多终端应用  NSM903x进一步完善了纳芯微线性位置传感器产品布局。目前,纳芯微已形成覆盖单轴和三轴检测的线性位置传感器产品组合,可根据检测维度、接口、性能及成本等不同要求,应用于智能穿戴、智能手机、智能家居及工业控制等场景。
2026-08-28 16:14 阅读量:256
纳芯微出席2026APEC汽车对话会议,分享汽车AK2超声雷达传感器IC技术趋势
  2026年8月19日至21日,亚太经合组织(APEC)汽车对话第44次会议(AD44)于大连举行,来自多个成员经济体的政府部门、行业协会及企业代表围绕亚太汽车市场趋势、供应链韧性、氢能汽车产业及先进车辆技术等议题展开交流。  作为汽车芯片代表厂商,纳芯微受邀参与此次会议,公司信号链产品线技术市场负责人王良藩先生在会上分享了AK2超声波雷达芯片的技术趋势与实践方案,共探汽车智能化感知技术的挑战与机遇。  从AK1到AK2:超声波雷达进入数字架构阶段  超声波雷达正从模拟架构向数字架构演进。与传统AK1模拟架构相比,AK2采用数字编码调制与回波信号处理,在探测距离、测量精度及抗干扰能力上有所提升;接口从点对点升级为多传感器共享总线,支持多传感器协同工作。目前,AK2超声波雷达已应用于超声波泊车辅助(UPA)、自动泊车辅助(APA)、自主代客泊车(AVP)等场景。  从测距到多维感知:超声波传感的演进方向  功能更广泛:感知维度从1D/2D测距向3D/4D演进,同时向低速AEB触发、障碍物类型检测、路面分类、微碰撞检测等场景延伸,在与毫米波雷达、UWB、摄像头共存的格局下保持其短距优势;  刷新率更快:保险杠级传感周期压缩到100毫秒以内,支持更早的障碍物检测与更高效的AVP运行,对IC的多发多收协同与抗干扰能力提出更高要求;  性能提升:目标分类(车辆、行人、路沿)、路面识别(铺装路、碎石、草地)、传感器污染检测(水、泥、冰、雪)及近场盲区缩减,要求传感器IC具备原始数据上传能力,支持各级原始数据上传;  成本更优化:成本评估从单模块延伸向系统级,通过去MCU化、DSI3二线制(电源与通信同线)、直驱架构(省去外部变压器)等方案降低BOM与线束成本。  多发多收与灵活编码:压缩传感周期  针对刷新率提升需求,纳芯微通过任意频率模式发生器(AFG)支持固定频、线性/非线性频率编码、FSK+chirp组合编码等多种波形;支持多发多收提升抗干扰能力,保险杠扫描可在2个扫描周期内完成。  原始数据上传与全量程优化:扩展感知边界  在性能层面,纳芯微提供可配置的原始数据上传链路,支持1–16倍抽取、MCU侧压缩后经DSI3上传,可选择ADC原始数据(2ms窗口)、混频后I/Q数据、事件前后包络数据等节点;通过时变LNA(TVLNA)自动增益切换抑制近场饱和,探测范围覆盖约10cm至6.5m。  DSI3标准协议:实现跨品牌互操作  在系统集成层面,纳芯微采用基于标准DSI3协议的跨品牌互操作性设计,支持纳芯微芯与其他行业标准DSI3芯片组合,拓扑支持点对点、并行及菊花链。产品方面,NSUC1800支持厂商定义CRM命令,NSUC1802提供每通道2KB DSI3缓冲区,在功能扩展与数据访问灵活性上各有侧重。  关于亚太经合组织(APEC)汽车对话  亚太经合组织(APEC)汽车对话设计于1998年,旨在为各经济体政府主管部门与汽车产业界搭建常态化沟通平台,围绕发展战略、标准法规、技术创新等方面开展交流合作。本届AD44设置了亚太汽车市场趋势、供应链韧性、氢能汽车产业发展、先进车辆技术面临的机遇与挑战等议题。
2026-08-24 13:05 阅读量:276
纳芯微丨NSSine™ MCU 串口性能优化实战:如何用 DMA 提升数据吞吐效率
  文章导读  在嵌入式系统设计中,串口通信被广泛应用。传统轮询方式需要 CPU 持续参与数据收发,在多接口并发或控制任务负载较高时,可能造成CPU 占用较高、硬件 FIFO 溢出、数据丢失或系统响应延迟等问题。  针对上述资源占用与数据吞吐问题,本文以纳芯微NSSine™系列实时控制MCU/DSP芯片NS800RT1137 为载体,重点解析:  核心方案:基于DMA自动触发数据搬运,减少CPU对串口数据搬运的参与;  性能提升:在不提升波特率的前提下,提高数据吞吐效率,降低系统延迟与CPU资源占用;  应用价值:为串口吞吐受限、CPU资源紧张及大数据量传输场景提供可落地的解决方案。  硬件信号驱动DMA搬运  事件触发与自动搬移机制剖析  本方案的核心在于利用芯片内的DMA(负责数据搬运)和DMAMUX(负责信号路由)模块,与UART模块协同工作,实现“信号触发-自动搬运”的闭环。  整个系统的数据流可以清晰地概括为:  1. 事件触发:UART接收到数据,当其FIFO达到预设水位时会产生接收满信号,线路变为空闲时会产生空闲信号;  2. 信号路由:DMAMUX模块负责将UART的硬件事件信号路由至指定的DMA通道,作为DMA传输的硬件触发信号;  3. 自由搬运:DMA通道被触发后,无需CPU干预,自动将数据从UART数据寄存器搬运到指定的内存缓冲区(对于发送功能则反之);  4. 状态管理:软件通过查询DMA传输状态(如已传输字节数)或结合串口空闲状态标志位,来感知数据接收完成,从而在应用层进行处理。  在UART与内存之间,DMA模块承担了数据搬运的工作:数据到达后由DMA直接完成传输,整个过程无需 CPU干预,从而大幅提升数据吞吐效率。  实战详解  如何配置关键模块(以接收为例)  第一步:配置UART,使其产生接收空闲信号(通知应用已完成接收)与接收满信号(触发DMA自动搬运)。  接收空闲信号(IDLE):用于判断一帧不定长数据的结束。通过配置ILT(空闲位检测起始点)和IDLECFG(空闲字符数长度)等寄存器,当总线上连续出现特定数量的空闲为后,UART便会置位IDLE标志。  接收满信号(RDRF):当接收FIFO中的数据量超过预设的水位(RXWATER)时,会产生此信号。通过使能UART_BAUD寄存器中的RDMAE位,将此信号转换为DMA请求。  DMAMUX 模块负责实现信号源与DMA通道的映射:将特定外设的硬件事件信号(如UART接收请求)路由至指定的DMA通道。通过配置相应寄存器(CHCONFIG)完成绑定与使能后,即可建立事件与通道的对应关系。  核心引擎  DMA通道的精细配置  本方案最核心的部分:配置DMA,需要理解其传输机制(次循环、主循环)。关键配置项包括:  源/目的地址:数据传输的源地址与目标地址;  传输数据宽度:单次传输的数据宽度(如8位);  地址偏移:单次传输及主循环完成后,源地址与目标地址的增减方式;  次循环字节数:单次触发后连续传输的字节数;  主循环次数:完成整个DMA传输(如填满缓冲区)所需的触发次数。  实际应用中:在主循环完成后,通过配置TCDn_DLASTSGA(目标地址最后调整值)为负的缓冲区长度,可使DMA的目标地址自动复位到缓冲区起始处,实现环形缓冲,为连续接收数据打下基础。  应用层技巧  巧妙管理不定长数据  启用DMA后,无法通过直接读取UART寄存器来获取数据深度。应用层需要通过计算DMA控制结构体(TCD)中的初始主循环计数(BITER)与当前主循环计数(CITER)的差值,来实时获取已接收到的字节数。  需要注意的是,此方法仅在每次次循环搬运1字节(NBYTES=1)时成立,即“已接收字节数 = BITER − CITER”;若 NBYTES>1,则需乘以单次次循环字节数(已接收字节数 = (BITER − CITER) × NBYTES)。  软件在接收过程中通过实时查询DMA传输计数,不断从DMA目标缓冲区“分段式”迁移数据到应用层的环形缓冲区,而DMA通道则与UART的接收FIFO自动同步,在硬件层面完成数据的连续、无感搬运。  具体流程如下:  DMA自动搬运:DMA通道被UART接收FIFO满硬件信号自动触发,将数据从UART数据寄存器实时、分段地搬运到一块专用于DMA的中间内存缓冲区;  实时分段迁移:应用层软件(在主循环或低优先级任务中)不断查询DMA的已传输字节数,并据此计算出自上次查询后新到达的字节数量,进而将这部分新到达的数据,从DMA的中间缓冲区复制到应用层的软件环形缓冲区中。这个过程是持续、分段进行的,而非等到一帧结束;  空闲标志用于帧同步与DMA重置:当串口空闲状态(IDLE)发生时,这标志着一帧完整数据的传输“间隙”或结束。此时软件会完成最后一小段数据的迁移,并对DMA通道进行重置;  应用层处理:应用层代码可从软件环形缓冲区中,按自身节奏和协议解析完整的数据帧,不受底层数据接收过程的阻塞。  这种“DMA自动搬运 + 实时分段迁移 + 空闲时同步重置”的模式,正是实现高带宽、低延迟处理异步不定长串口通信的核心机制。它确保了数据从物理层到应用层持续高效流转,避免了在数据接收期间CPU的轮询等待,也防止了因数据延迟导致的数据覆盖或丢失。  方案优势  核心优势  高带宽:DMA的硬件自动搬运机制,无需CPU频繁查询等待,最大化串口物理带宽的利用率;  低损耗:CPU仅在数据帧接收完成或需要发送时接入,资源占用极低,可更专注于关键控制任务;  高可靠性:从根本上避免了因CPU繁忙、多个串口同时收发导致的硬件FIFO溢出问题;  高吞吐:软件FIFO的增加大大解决了硬件FIFO的深度限制,用户不再担心硬件溢出问题。
2026-08-21 13:09 阅读量:270
  • 一周热料
  • 紧缺物料秒杀
型号 品牌 询价
CDZVT2R20B ROHM Semiconductor
TL431ACLPR Texas Instruments
RB751G-40T2R ROHM Semiconductor
BD71847AMWV-E2 ROHM Semiconductor
MC33074DR2G onsemi
型号 品牌 抢购
TPS63050YFFR Texas Instruments
STM32F429IGT6 STMicroelectronics
IPZ40N04S5L4R8ATMA1 Infineon Technologies
BP3621 ROHM Semiconductor
ESR03EZPJ151 ROHM Semiconductor
BU33JA2MNVX-CTL ROHM Semiconductor
热门标签
ROHM
Aavid
Averlogic
开发板
SUSUMU
NXP
PCB
传感器
半导体
相关百科
关于我们
AMEYA360微信服务号 AMEYA360微信服务号
AMEYA360商城(www.ameya360.com)上线于2011年,现 有超过3500家优质供应商,收录600万种产品型号数据,100 多万种元器件库存可供选购,产品覆盖MCU+存储器+电源芯 片+IGBT+MOS管+运放+射频蓝牙+传感器+电阻电容电感+ 连接器等多个领域,平台主营业务涵盖电子元器件现货销售、 BOM配单及提供产品配套资料等,为广大客户提供一站式购 销服务。

请输入下方图片中的验证码:

验证码