0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

广芯微MCU进阶篇1:8位MCU IAP实现

广芯微电子 来源:广芯微电子 作者:广芯微电子 2022-11-24 10:23 次阅读

概述

本文将介绍广芯微的8位MCU的IAP实现介绍及使用说明,通过IAP实验演示如何通过IAP 更新用户程序的流程步骤等。

【什么是IAP?】

IAP即为 In Application Programming(在应用中编程)。可以简单理解为:在程序运行的过程中进行编程(升级程序,更新固件)。IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。

IAP的通信口有许多种:UART串口、I2C、SPI......等。按理说只要能传输数据的通信口都能实现IAP的功能。本文所使用的是UART方式的IAP。

【IAP实现介绍】

本文实验以UM8004为例,flash大小为16K。UM8004的中断向量表以及IAP固件程序存放到0x0000-0x1400区域,在之后的更新中不会对以该区域空间进行擦写。用户APP应用程序存放在从0x1400-0x3FFF的空间。每次需要更新升级时,将这段空间进行擦写,替换成更新的应用程序代码

933ebb7a-6b9d-11ed-8abf-dac502259ad0.png

使用IAP的上位机,通过IAP程序的处理函数,即可实现应用程序的更新升级。整个IAP的实现流程如下图所示:

9354b7b8-6b9d-11ed-8abf-dac502259ad0.png

图1 IAP功能流程图

【IAP使用说明】

开发套件

IAP开发套件包含:

硬件开发板

软件开发包

软件开发包

软件开发包中包含IAP工程、用户APP应用程序例子程序、IAP使用说明、以及一些工具、上位机等等。

软件开发包中的内容如下:

UM800Y_IAP:800Y的IAP工程。

UM800Y_APP:用户应用程序示例Demo。

UM800Y_IAP使用说明.doc:IAP实现和使用的说明文档。

UNIC_IAPTool.exe: IAP上位机。

UNIC_BootTool.exe:Bootloader的用户下载工具。

Sscom5.13.1.exe:串口调试助手。

Hex2bin.exe:hex文件转换bin文件工具。

JFlash.exe :合并bin或hex文件。

硬件环境

硬件环境如图1所示:

硬件开发板和USB连接线

电脑(编译代码,下载程序代码)

93673992-6b9d-11ed-8abf-dac502259ad0.png

图 2 硬件连接示意图 软件环境

Keil C51

工程说明

下面对本次实验的工程进行简单说明。 IAP工程:

(1) 需要在Target选项卡里设置我们IAP程序的起始地址与大小,如:

93bc851e-6b9d-11ed-8abf-dac502259ad0.png

图3 设置IAP程序的起始地址与大小

这里的IAP程序起始地址设为0x0000,大小设为0x1400,即IAP所需的FLASH空间为5KB。其中IAP所占空间的大小可根据IAP的实际大小进行修改。

(2) 设置IAP_Proc函数(IAP更新处理程序)的入口地址,用绝对地址定位的方法设置在某个固定的地址,下面以设置地址为0x0200为例。点开keil C51中的Options for Target,勾选下图所示的地方。

940b81c8-6b9d-11ed-8abf-dac502259ad0.png

图4 勾选Use ExtendedLinker(LX51) instead of BL51

之后在下图所示位置填入“?PR?IAP_PROC?IAP(C:0x0200)”, 如图5,最后点击ok。

946185be-6b9d-11ed-8abf-dac502259ad0.png

图5 设置IAP_Proc函数的地址为0x0200

(3) IAP源码说明

9475d370-6b9d-11ed-8abf-dac502259ad0.png

图6 IAP部分代码

IAP源码主要功能是当UART收到上位机的请求更新帧时,执行IAP_Proc()函数,实现应用程序的更新下载。


用户APP工程:

(1)需要在Target选项卡里设置用户应用APP程序的起始地址与大小,如:

94a2bad4-6b9d-11ed-8abf-dac502259ad0.png

图7 设置IAP程序的起始地址与大小

这里的APP应用程序起始地址设为0x1400,由于UM8004的flash大小为16K,

用户APP应用程序最大尺寸大小 = 16KB – IAP程序大小=0x2C00。

(2)用户APP程序中需要添加用于检查更新的函数。

本例程使用UART0的回调函数调用IAP处理函数去更新升级应用程序(UART0的波特率需和IAP程序的一致)。调用IAP处理函数的方法如下,根据5的配置来设置的IAP入口地址值(IAP函数的地址为0x0200)在用户APP程序的检查更新函数中,定义一个函数指针,指向该地址,当UART收到请求更新信息时用于跳转,设置如图8所示。

94ce5464-6b9d-11ed-8abf-dac502259ad0.png

94ec9546-6b9d-11ed-8abf-dac502259ad0.png

图8 app程序中设置IAP处理函数跳转

如需详细代码和程序移植可参考软件开发包的工程以及说明文档。

【IAP实验】

IAP实验说明

本次实验使用UM8004进行演示,通过IAP 将原本Lptimer功能的用户应用程序更新为ADC功能的用户应用程序。

IAP实验步骤

(1) 将IAP程序和用户应用程序进行打包

首先打开J-Flash工具。点击open data file,打开用户app程序的bin或者hex文

件。这里选择软件开发包里UM800Y_APP文件夹中的Lptimer工程中的bin文件。(可通过hex2bin工具将hex转换成bin文件)

950e9268-6b9d-11ed-8abf-dac502259ad0.png

图 9 J-Flash工具

打开成功后点击软件左上角File,点击Merge data file…

953ef098-6b9d-11ed-8abf-dac502259ad0.png

图 10 J-Flash工具

然后选择IAP工程的bin或者hex文件。

打开成功后,选择是,将两个文件合并打包。

95507d2c-6b9d-11ed-8abf-dac502259ad0.png

图 11 J-Flash工具合并文件

打包成功后。点击软件左上角File,选择Save data file as..将打包好的程序进行保存,保存的格式为bin或者hex。

95634ef2-6b9d-11ed-8abf-dac502259ad0.png

图 12J-Flash工具保存合并文件


9580a5ce-6b9d-11ed-8abf-dac502259ad0.png

图 13 J-Flash工具保存合并文件

(2)使用UNIC_BootTool_V2.0下载合并后的文件

使用UNIC_BootTool_V2.0工具下载程序流程如下:

芯片类型选择UM800Y,选择115200波特率

②点击Browse选择刚刚打包好的程序

③打开文件后点击Open,复位芯片,芯片进入到Boot模式。

④点击Auto Download,将程序下载到UM8004。

95a04f6e-6b9d-11ed-8abf-dac502259ad0.png

图 14 Bootloader的用户下载工具 由于本例子将IAP程序和LPTIMER程序打包合并后下载,在程序下载成功后,打开串口助手会看到LPTIMER计数功能。

95bb9116-6b9d-11ed-8abf-dac502259ad0.png

图 15 lptimer定时计数

(3)使用UNIC_IAPTool_V1.3更新程序

通过使用UNIC_IAPTool_V1.3上位机,可以让IAP程序引导更新用户应用程序。

95ce93b0-6b9d-11ed-8abf-dac502259ad0.png

图 16IAPTool上位机说明

使用UNIC_IAPTool_V1.3上位机更新具体操作流程如下

①打开上位机选择串口号以及波特率,选择芯片型号为UM8004。

②打开需要更新的用户应用程序的bin或者hex文件。打开后会显示该文件的CRC值。

③点击OPEN

④点击一键下载

⑤点击一键下载后,等待更新过程,更新成功后会提示“下载完成”,否则会提示下载失败。

95e108a6-6b9d-11ed-8abf-dac502259ad0.png


图 17 IAPTool上位机更新成功

⑥之后会运行用户的程序。(可以通过串口工具打印信息看到,通过IAP升级更新已将原来打包时的Lptimer应用程序更换为ADC功能应用程序。)


95ef6720-6b9d-11ed-8abf-dac502259ad0.png

图 18 IAP更新用户程序为ADC功能程序

最终通过IAP已更新升级了用户的应用程序。

【总结】

感谢大家参与学习广芯微MCU进阶篇1:8位MCU IAP实现,让我们期待后续的文章更新。

【关于广芯微】

广芯微电子(广州)股份有限公司专注于低功耗物联网芯片的研发、设计与销售,为客户提供面向个人与家庭、工业与商业物联网应用领域,以低功耗为差异化的8位/32位微控制器芯片、无线射频收发器芯片、数字电源管理芯片和传感与信号调理专用芯片等。

广芯微秉持客户第一、技术创新和市场领先的理念,以国际领先的技术为基础,为客户提供一流的产品与技术,打造值得信赖的集成电路设计品牌企业。公司独有的低功耗芯片设计方法、轻量化人工智能算法、大功率的PD协议控制以及多样性无线连接技术整合而成的低成本高收益的集成电路设计,在健康医疗电子消费电子、智慧家庭、工业控制传感器与表计等领域已经得到了广泛的应用。广芯微低功耗微处理器芯片与射频芯片具有超低睡眠功耗与更低的工作电流,有效地帮助电子设备降低能耗,积极助力节能减排。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17135

    浏览量

    351029
  • uart
    +关注

    关注

    22

    文章

    1235

    浏览量

    101358
  • IAP
    IAP
    +关注

    关注

    2

    文章

    163

    浏览量

    24279
  • 广芯微电子
    +关注

    关注

    0

    文章

    33

    浏览量

    190

原文标题:广芯微MCU进阶篇1:8位MCU IAP实现

文章出处:【微信号:广芯微电子,微信公众号:广芯微电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于触控型8MCU AiP8F3208循环风扇应用方案

    基于触控型8MCU AiP8F3208循环风扇应用方案
    的头像 发表于 11-18 09:42 157次阅读
    基于触控型<b class='flag-5'>8</b><b class='flag-5'>位</b><b class='flag-5'>MCU</b> AiP<b class='flag-5'>8</b>F3208循环风扇应用方案

    海通用 MCU 应用笔记 :CS32F103 系列 MCU IAP 升级指南

    本应用笔记旨在帮助指导用户针对海 CORTEX-M3 MCU CS32F103 系列单片机 IAP 应用的快速开发。本应用笔记实现了 CAN 和 USART 两种接口方式来开发
    发表于 05-16 11:40

    海通用 MCU 应用笔记: CS32F03x IAP 升级

    本技术文档旨在帮助客户实现 IAP 升级提供一个参考方案和模板。本文档提供基于 UART 升级的 MCU 参考代码和 PC 端的升级工具软件。适用 MCU 型号:CS32F030、CS
    发表于 05-16 10:55

    海 32 MCU 开发调试 ,基于 VS Code 插件实现海 32 MCU 开发调试

    编译/链接等脚本语法,只需要简单配置参数、新建工程、增加代码文件后,就可以开始编译 和调试了。如果要生成静态库文件也只需要修改输出格式,再编译就可能生成.a 的文件。*附件:基于VSCode插件实现海32
    发表于 05-16 10:46

    半导体宣布推出8RISC架构IO型OTP MCU SC8P05x系列

    近日,中半导体(深圳)股份有限公司(以下简称:中半导 股票代码:688380)宣布推出8RISC架构IO型OTP MCU SC
    的头像 发表于 04-18 18:09 1188次阅读
    中<b class='flag-5'>微</b>半导体宣布推出<b class='flag-5'>8</b><b class='flag-5'>位</b>RISC架构IO型OTP <b class='flag-5'>MCU</b> SC<b class='flag-5'>8</b>P05x系列

    MCU分类有哪些 soc芯片和mcu芯片区别

    MCU按照位数(数据总线宽度)划分,可分为48、16、32和64
    的头像 发表于 04-11 15:46 2023次阅读
    <b class='flag-5'>MCU</b>分类有哪些 soc芯片和<b class='flag-5'>mcu</b>芯片区别

    选用8和32MCU的关键考量

    基于位数的MCU核心架构:MCU使用的位数为8、16、32(有时称为深度或数据宽度)来表示寄存器的大小,如8
    发表于 03-26 11:14 631次阅读

    精通8MCU模拟外设:高手的进阶指南

    PIC 与 AVR MCU是目前最受欢迎的8MCU类别,相信不少小伙伴都上过手。PIC MCU易于编程,并且易于与其他外设接口;AVR
    发表于 02-29 14:16 1213次阅读
    精通<b class='flag-5'>8</b><b class='flag-5'>位</b><b class='flag-5'>MCU</b>模拟外设:高手的<b class='flag-5'>进阶</b>指南

    RT-Thread驱动开发指南进阶篇-动手驱动先楫未适配的外设LCD

    经过上一的《《RT-Thread设备驱动开发指南》基础--以先楫bsp的hwtimer设备为例》阐述,可以大致了解到RT-thread设备驱动开发的方法步骤,开发指南中的进阶篇外设主要是比基础
    的头像 发表于 02-25 11:04 2519次阅读
    RT-Thread驱动开发指南<b class='flag-5'>进阶篇</b>-动手驱动先楫未适配的外设LCD

    RK3568驱动指南|驱动基础进阶篇-进阶5 自定义实现insmod命令实验

    RK3568驱动指南|驱动基础进阶篇-进阶5 自定义实现insmod命令实验
    的头像 发表于 02-20 14:10 688次阅读
    RK3568驱动指南|驱动基础<b class='flag-5'>进阶篇</b>-<b class='flag-5'>进阶</b>5 自定义<b class='flag-5'>实现</b>insmod命令实验

    请问8mcu和32mcu的区别?

    8mcu和32mcu的区别?
    发表于 02-01 06:49

    RK3568驱动指南|驱动基础进阶篇-进阶8 内核运行ko文件总结

    RK3568驱动指南|驱动基础进阶篇-进阶8 内核运行ko文件总结
    的头像 发表于 01-31 14:58 1145次阅读
    RK3568驱动指南|驱动基础<b class='flag-5'>进阶篇</b>-<b class='flag-5'>进阶</b><b class='flag-5'>8</b> 内核运行ko文件总结

    32MCU RA8T1组用户手册

    电子发烧友网站提供《32MCU RA8T1组用户手册.pdf》资料免费下载
    发表于 01-30 15:14 0次下载
    32<b class='flag-5'>位</b><b class='flag-5'>MCU</b> RA<b class='flag-5'>8T1</b>组用户手册

    32MCU系列RENESAS RA8T1组应用说明

    电子发烧友网站提供《32MCU系列RENESAS RA8T1组应用说明.pdf》资料免费下载
    发表于 01-29 14:03 0次下载
    32<b class='flag-5'>位</b><b class='flag-5'>MCU</b>系列RENESAS RA<b class='flag-5'>8T1</b>组应用说明

    新品速递——WAYON维安推出8MCU—WY8S8003系列

    新品速递——WAYON维安推出8MCU—WY8S8003系列
    的头像 发表于 01-03 16:22 521次阅读
    新品速递——WAYON维安推出<b class='flag-5'>8</b><b class='flag-5'>位</b><b class='flag-5'>MCU</b>—WY<b class='flag-5'>8</b>S8003系列