CN109062562A - Mcu固件程序的下载方法 - Google Patents

Mcu固件程序的下载方法 Download PDF

Info

Publication number
CN109062562A
CN109062562A CN201810844547.8A CN201810844547A CN109062562A CN 109062562 A CN109062562 A CN 109062562A CN 201810844547 A CN201810844547 A CN 201810844547A CN 109062562 A CN109062562 A CN 109062562A
Authority
CN
China
Prior art keywords
flash
program
mcu
firmware
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201810844547.8A
Other languages
English (en)
Inventor
姚杰
韩大强
蒲显城
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sichuan Changhong Electric Co Ltd
Original Assignee
Sichuan Changhong Electric Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sichuan Changhong Electric Co Ltd filed Critical Sichuan Changhong Electric Co Ltd
Priority to CN201810844547.8A priority Critical patent/CN109062562A/zh
Publication of CN109062562A publication Critical patent/CN109062562A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提出一种MCU固件程序的下载方法,涉及MCU固件程序的下载领域。本发明解决了目前MCU固件程序的下载方法操作步骤繁琐、效率低下,且对于非专业技术人员来说,操作过程难以理解,极易出错,从而导致固件程序下载失败的问题。其技术方案要点为:首先,编写MCU内嵌Flash的驱动和下载程序;其次,利用ARM集成开发工具编译、链接程序生成可执行的二进制bin文件,作为下载到Flash中的固件程序;然后,安装ARM开发工具包;再然后,利用VS集成开发环境编写程序,制作烧写工具;最后,连接JLink下载器和目标板,使用烧写工具向MCU内嵌Flash中下载固件程序。本发明的有益效果是,简化了操作步骤和复杂性,提高了下载效率,不需要专业的技术知识就可以完成固件下载。

Description

MCU固件程序的下载方法
技术领域
本发明涉及MCU技术,特别涉及如何进行MCU固件程序的下载的技术。
背景技术
针对不同的MCU处理器,所搭配的内嵌式Flash各不相同,其中有部分MCU的内嵌式Flash为非通用型IP模块,它与常用型号MCU芯片所集成的内嵌式Flash模块并不相同,这种情况尤其针对芯片开发和设计厂商更为常见。芯片开发商出于对应用环境、技术特性和开发成本等多方面考虑,常常使用特定的内嵌式Flash模块来搭配MCU内核,使得整个芯片性能满足用户的使用需求。然而,在这种情况下,通常使用的第三方下载器(如适用于ARM芯片的JLink下载器)并不能支持MCU内嵌Flash的固件下载功能。因为JLink的驱动程序库中并没有集成这种非通用型内嵌Flash模块的驱动,所以无法直接使用JLink下载器向MCU内嵌Flash中下载固件。多数开发者解决这个问题的通常办法是放弃使用JLink自带的Flash下载工具,根据Flash手册编写驱动代码,利用JLink仿真调试功能运行程序,通过JTAG接口将固件程序读入MCU内部SRAM中,再将SRAM中的固件程序写入到内嵌Flash中。然而,这种方法操作步骤繁琐,效率底下,且对于非专业技术人员来说,操作过程难以理解,极易出错,从而导致固件程序下载失败。
参见申请号为CN 201611081505.0的专利申请,其公开了一种通用编辑器通用固件的更新方法,并具体公开了如下内容:下载固件代码并设置更新标记位,将其一同保存至非易失性存储器中;MCU重新上电后,boot程序根据所述更新标记位判断是否需要更新固件程序;若需要更新固件程序,boot程序从所述非易失性存储器中读取固件代码,并将所述固件代码写入MCU的程序存储器中,同时修改所述更新标记位的值并保存;之后,boot程序跳转到更新后的固件程序的入口地址执行更新后的固件程序;若不需要更新固件程序,boot程序跳转至原有固件程序的入口地址执行固件程序;其中,所述boot程序为预先烧录至MCU中。
可见,采用该专利申请方法,无需外接编程接口等硬件电路即可完成MCU固件的更新,方便简单,并提高固件更新效率。但是,其针对的并不是MCU内嵌Flash的固件下载,因此,如何进行MCU固件程序的下载已成为一个亟待解决的问题。
发明内容
本发明的目的是提供一种MCU固件程序的下载方法,解决目前MCU固件程序的下载方法操作步骤繁琐、效率低下,且对于非专业技术人员来说,操作过程难以理解,极易出错,从而导致固件程序下载失败的问题。
本发明解决其技术问题,采用的技术方案是:MCU固件程序的下载方法,包括如下步骤:
步骤1、编写MCU内嵌Flash的驱动和下载程序;
步骤2、利用ARM集成开发工具编译、链接程序生成可执行的二进制bin文件,作为下载到Flash中的固件程序;
步骤3、安装ARM开发工具包;
步骤4、利用VS集成开发环境编写程序,制作烧写工具;
步骤5、连接JLink下载器和目标板,使用烧写工具向MCU内嵌Flash中下载固件程序。
具体地,步骤1中,所述编写MCU内嵌Flash的驱动和下载程序具体包括如下步骤:
步骤101、复位MCU计数器值,设置MCU时钟频率,选择外部晶振为时钟源,设置PLL分频系数,使能主时钟;
步骤102、根据Flash手册,编写Flash驱动函数,实现将数据从SRAM拷贝到Flash,并对数据进行验证的功能;
步骤103、编写下载程序,利用Flash驱动函数,将当前程序代码从SRAM地址D_Addr处拷贝到Flash的起始地址0x01000000处。
进一步地,步骤102中,所述Flash驱动函数包括Sram_Copy_To_Flash()、Flash_Verify()、Flash_Block_Erase()函数。
具体地,步骤2中,所述利用ARM集成开发工具编译、链接程序生成可执行的二进制bin文件具体包括如下步骤:
步骤201、用ARM集成开发工具设置内存映射地址,把代码存储空间的首地址设置为SRAM的D_Addr地址;
步骤202、利用ARM集成开发工具编译、链接程序,生成二进制bin文件,作为写入Flash中的固件。
再进一步地,步骤201中,所述内存映射地址包括RAM、ROM地址。
具体地,步骤4中,所述利用VS集成开发环境编写程序,制作烧写工具具体包括如下步骤:
步骤401、用VS集成开发工具创建基于WINDOWS人机界面的工程,将JLinkARM.dll库文件和JLink.exe可执行文件拷贝到工程目录下,并在工程中引用JLinkARM.dll库文件;
步骤402、编写程序,创建一个线程,打开JLink.exe可执行文件;
步骤403、利用JLink.exe可执行文件调用JLinkARM.dll库文件的接口函数,将固件程序bin读入SRAM存储空间的D_Addr地址处;
步骤404、复位CPU,将PC指针指向D_Addr地址处;
步骤405、退出JLink.exe,关闭线程;
步骤406、根据Flash下载程序,CPU从D_Addr地址处开始执行,利用Flash驱动函数将当前执行的代码段拷贝到Flash起始地址0x01000000中,实现下载固件和校验功能;
步骤407、编译、链接程序,生成可执行文件FlashTool.exe,完成Flash烧写工具的制作。
再进一步地,步骤404中,通过r命令进行复位CPU,使用SetPC命令将PC指针指向D_Addr地址处。
具体地,步骤5中,所述连接JLink下载器和目标板,使用烧写工具向MCU内嵌Flash中下载固件程序具体包括如下步骤:
步骤501、将JLink.exe可执行文件和JLinkARM.dll库文件,放在与FlashTool烧写工具所在的同一目录下,作为其资源文件;
步骤502、利用烧写工具上的选择固件功能,选择bin文件所在目录;
步骤503、利用烧写工具上的下载固件和校验功能,将bin文件写入Flash中并进行正确性验证。
本发明的有益效果是,通过上述MCU固件程序的下载方法,将Flash驱动、JLink驱动和读写功能,以及带可视化界面的固件下载功能,都集成到一个烧写工具中,简化了操作步骤和复杂性,提高了下载效率。另外,针对编写Flash驱动和下载程序,使用ARM集成开发工具编译、链接生成固件;使用VS集成开发工具制作烧写工具。以上操作步骤,只需要在初期做一次性开发,之后在不同平台再下载同类型的MCU固件程序时,仅需在平台上安装ARM开发工具包,并把JLink.exe、JLinkARM.dll放在和烧写工具FlashTool.exe的同一目录下,就可以使用FlashTool.exe完成固件下载。该下载方法不需要专业的技术知识就可以完成固件下载,大大简化了流程,提高了效率,具有较大的推广和使用价值。
具体实施方式
下面结合实施例,详细描述本发明的技术方案。
本发明所述MCU固件程序的下载方法,包括如下步骤:
步骤1、编写MCU内嵌Flash的驱动和下载程序;
步骤2、利用ARM集成开发工具编译、链接程序生成可执行的二进制bin文件,作为下载到Flash中的固件程序;
步骤3、安装ARM开发工具包;
步骤4、利用VS集成开发环境编写程序,制作烧写工具;
步骤5、连接JLink下载器和目标板,使用烧写工具向MCU内嵌Flash中下载固件程序。
这里,将Flash驱动、JLink驱动和读写功能,以及带可视化界面的固件下载功能,都集成到一个烧写工具中,简化了操作步骤和复杂性,提高了下载效率。
实施例
实际应用过程中,执行本实施例的MCU固件程序的下载方法,包括如下步骤:
1、首先,根据芯片Flash模块手册,编写Flash读、写、擦除功能的接口函数,因为Flash为块操作,且每一块大小为512字节,因此利用写和擦除函数构成实际上的Flash写块操作函数,该函数实现了数据从SRAM到Flash的拷贝,即构成了Sram_Copy_To_Flash()函数,再利用Flash读函数实现把Flash中的数据读取到SRAM中,即构成Flash_Verify()函数,Flash块擦除构成Flash_Block_Erase()函数。
2、其次,根据MCU型号和芯片手册编写MCU初始化程序,并根据已实现的Flash读、写、擦除程序,编写下载程序,以本实施例所选用的MCU型号HCM32为例进行说明,具体步骤如下:
(1)先初始化MCU,包括设置系统控制单元SCU的CKCFG_LOCK和RSTCFG_LOCK寄存器,解锁系统时钟设置和系统软件复位设置;设置RC_CTRL寄存器,选择外部8MHz晶振为时钟源;设置SYS_PLLC寄存器调整倍频系数为9,使主时钟经过PLL倍频后,输出72MHz时钟;设置SYS_CLK_EN寄存器,使能主时钟;再设置CKCFG_LOCK和RSTCFG_LOCK寄存器,锁定系统时钟设置和系统软件复位设置。
(2)编写程序,利用Sram_Copy_To_Flash()、Flash_Verify()和Flash_Block_Erase()函数实现从SRAM固定地址D_Addr处拷贝数据到Flash起始地址0x01000000处。
3、然后,选用ARM集成开发工具,以本实施例所选用开发工具IAR为例进行说明。打开IAR工具,创建一个新工程,并导入编写好的程序代码;进入Project->Options->Linker->Config,在Override Default项前打钩,并在下面的文件路径栏中填入$PROJ_DIR$\sram.icf;之后进入工程目录,并在目录下新建一个.icf后缀名文件,再编辑文件。本实施例设置固定地址D_Addr为0x20000000,在文件中加入内容define symbol__ICFEDIT_region_ROM_start__=0x2000000,和define symbol__ICFEDIT_region_ROM_end__=0x20007fff两行。由此,就设置了程序代码在SRAM中的起始地址为0x20000000;之后,进入Project->Options->Output Converter->Output,在Generate additional output项前打钩,并在Output format下拉列表框中选择binary;在Override default项前打钩,并在下面的文本框中填写bootloader.bin;最后,点击Project->Make完成程序代码的编译链接过程,之后可以在工程目录下的Debug/Exe/文件夹中发现生成了bootloader.bin文件。此文件就是需要下载的二进制文件。
4、再然后,安装Segger公司的ARM工具包,安装好之后,可以在安装目录下找到名称为JLink.exe的可执行文件,和名称为JLinkARM.dll的库文件。
5、再然后,打开VS集成开发工具,以本实施例所创建基于MFC的可视化界面程序为例进行说明。创建一个新的MFC工程,在其中引用JLinkARM.dll库文件;编写程序,创建一个新的线程打开JLink.exe,并调用JLinkARM.dll文件中的命令;先使用“r”命令复位MCU,再使用“loadbin”命令将指定路径的二进制文件载入SRAM地址0x20000000处,再使用“r”命令再次复位MCU,最后使用“SetPC”命令将CPU指针指向0x20000000地址处;完成程序编写后,执行编译,生成可执行文件FlashTool.exe。
6、最后,将JLink.exe、JLinkARM.dll文件放在与执行文件FlashTool.exe的同一目录下,连接JLink下载器和目标板,再执行FlashTool.exe文件;在程序界面中填写好二进制文件的路径后,点击运行,此时程序会先将二进制文件载入SRAM固定地址0x20000000处,再通过下载程序将二进制文件拷贝到Flash地址0x01000000处。

Claims (8)

1.MCU固件程序的下载方法,其特征在于,包括如下步骤:
步骤1、编写MCU内嵌Flash的驱动和下载程序;
步骤2、利用ARM集成开发工具编译、链接程序生成可执行的二进制bin文件,作为下载到Flash中的固件程序;
步骤3、安装ARM开发工具包;
步骤4、利用VS集成开发环境编写程序,制作烧写工具;
步骤5、连接JLink下载器和目标板,使用烧写工具向MCU内嵌Flash中下载固件程序。
2.根据权利要求1所述的MCU固件程序的下载方法,其特征在于,步骤1中,所述编写MCU内嵌Flash的驱动和下载程序具体包括如下步骤:
步骤101、复位MCU计数器值,设置MCU时钟频率,选择外部晶振为时钟源,设置PLL分频系数,使能主时钟;
步骤102、根据Flash手册,编写Flash驱动函数,实现将数据从SRAM拷贝到Flash,并对数据进行验证的功能;
步骤103、编写下载程序,利用Flash驱动函数,将当前程序代码从SRAM地址D_Addr处拷贝到Flash的起始地址0x01000000处。
3.根据权利要求2所述的MCU固件程序的下载方法,其特征在于,步骤102中,所述Flash驱动函数包括Sram_Copy_To_Flash()、Flash_Verify()、Flash_Block_Erase()函数。
4.根据权利要求1所述的MCU固件程序的下载方法,其特征在于,步骤2中,所述利用ARM集成开发工具编译、链接程序生成可执行的二进制bin文件具体包括如下步骤:
步骤201、用ARM集成开发工具设置内存映射地址,把代码存储空间的首地址设置为SRAM的D_Addr地址;
步骤202、利用ARM集成开发工具编译、链接程序,生成二进制bin文件,作为写入Flash中的固件。
5.根据权利要求4所述的MCU固件程序的下载方法,其特征在于,步骤201中,所述内存映射地址包括RAM、ROM地址。
6.根据权利要求1所述的MCU固件程序的下载方法,其特征在于,步骤4中,所述利用VS集成开发环境编写程序,制作烧写工具具体包括如下步骤:
步骤401、用VS集成开发工具创建基于WINDOWS人机界面的工程,将JLinkARM.dll库文件和JLink.exe可执行文件拷贝到工程目录下,并在工程中引用JLinkARM.dll库文件;
步骤402、编写程序,创建一个线程,打开JLink.exe可执行文件;
步骤403、利用JLink.exe可执行文件调用JLinkARM.dll库文件的接口函数,将固件程序bin读入SRAM存储空间的D_Addr地址处;
步骤404、复位CPU,将PC指针指向D_Addr地址处;
步骤405、退出JLink.exe,关闭线程;
步骤406、根据Flash下载程序,CPU从D_Addr地址处开始执行,利用Flash驱动函数将当前执行的代码段拷贝到Flash起始地址0x01000000中,实现下载固件和校验功能;
步骤407、编译、链接程序,生成可执行文件FlashTool.exe,完成Flash烧写工具的制作。
7.根据权利要求6所述的MCU固件程序的下载方法,其特征在于,步骤404中,通过r命令进行复位CPU,使用SetPC命令将PC指针指向D_Addr地址处。
8.根据权利要求1或6所述的MCU固件程序的下载方法,其特征在于,步骤5中,所述连接JLink下载器和目标板,使用烧写工具向MCU内嵌Flash中下载固件程序具体包括如下步骤:
步骤501、将JLink.exe可执行文件和JLinkARM.dll库文件,放在与FlashTool烧写工具所在的同一目录下,作为其资源文件;
步骤502、利用烧写工具上的选择固件功能,选择bin文件所在目录;
步骤503、利用烧写工具上的下载固件和校验功能,将bin文件写入Flash中并进行正确性验证。
CN201810844547.8A 2018-07-27 2018-07-27 Mcu固件程序的下载方法 Pending CN109062562A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810844547.8A CN109062562A (zh) 2018-07-27 2018-07-27 Mcu固件程序的下载方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810844547.8A CN109062562A (zh) 2018-07-27 2018-07-27 Mcu固件程序的下载方法

Publications (1)

Publication Number Publication Date
CN109062562A true CN109062562A (zh) 2018-12-21

Family

ID=64836743

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810844547.8A Pending CN109062562A (zh) 2018-07-27 2018-07-27 Mcu固件程序的下载方法

Country Status (1)

Country Link
CN (1) CN109062562A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109800012A (zh) * 2019-03-01 2019-05-24 四川长虹电器股份有限公司 一种mcu固件升级方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010105932A (ko) * 2000-05-19 2001-11-29 정재현 인터넷 환경에서의 시스템들간에 호환을 이루게 하도록컨넥터 기능을 갖는 운영시스템
CN102629212A (zh) * 2012-04-28 2012-08-08 广东宝莱特医用科技股份有限公司 一种基于j-link间接烧写程序到nandflash的方法
CN103514018A (zh) * 2013-10-08 2014-01-15 上海电力学院 基于stm32f4控制器的程序远程下载的实现方法
CN103677885A (zh) * 2012-09-21 2014-03-26 厦门雅迅网络股份有限公司 一种arm flash简易程序烧写的方法
CN105117354A (zh) * 2015-07-23 2015-12-02 小米科技有限责任公司 固件的烧写方法、装置及系统
CN106648759A (zh) * 2016-11-30 2017-05-10 苏州华芯微电子股份有限公司 一种通用编程器固件的更新方法
CN107066301A (zh) * 2017-04-27 2017-08-18 北京安控科技股份有限公司 一种嵌入式计算机固件程序的下载方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010105932A (ko) * 2000-05-19 2001-11-29 정재현 인터넷 환경에서의 시스템들간에 호환을 이루게 하도록컨넥터 기능을 갖는 운영시스템
CN102629212A (zh) * 2012-04-28 2012-08-08 广东宝莱特医用科技股份有限公司 一种基于j-link间接烧写程序到nandflash的方法
CN103677885A (zh) * 2012-09-21 2014-03-26 厦门雅迅网络股份有限公司 一种arm flash简易程序烧写的方法
CN103514018A (zh) * 2013-10-08 2014-01-15 上海电力学院 基于stm32f4控制器的程序远程下载的实现方法
CN105117354A (zh) * 2015-07-23 2015-12-02 小米科技有限责任公司 固件的烧写方法、装置及系统
CN106648759A (zh) * 2016-11-30 2017-05-10 苏州华芯微电子股份有限公司 一种通用编程器固件的更新方法
CN107066301A (zh) * 2017-04-27 2017-08-18 北京安控科技股份有限公司 一种嵌入式计算机固件程序的下载方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109800012A (zh) * 2019-03-01 2019-05-24 四川长虹电器股份有限公司 一种mcu固件升级方法

Similar Documents

Publication Publication Date Title
US9348730B2 (en) Firmware ROM patch method
US7772882B2 (en) Robust and economic solution for FPGA bit file upgrade
US20020194313A1 (en) Method and apparatus for distributing computer platform firmware across a network
US20040088694A1 (en) Systems and methods for updating software
US20090254898A1 (en) Converting a device from one system to another
US20070101115A1 (en) Information processing device, bios processing method and program
CN109800012A (zh) 一种mcu固件升级方法
US7536536B1 (en) Method, system, and computer readable medium for updating and utilizing the contents of a non-essential region of a memory device
CN108762797A (zh) 一种ssd固件在线更新方法、系统及ssd
CN109062562A (zh) Mcu固件程序的下载方法
CN110716721A (zh) 兼容网口和串口的tms320c6748程序加载方法
BR102013006506B1 (pt) método de atualização e sistema multidomínio incorporado
CN105204896A (zh) 一种数字存储示波器的BootLoader设计方法
WO2023092994A1 (zh) 嵌入式软件的加密式差分升级方法、装置、设备及介质
CN107066301A (zh) 一种嵌入式计算机固件程序的下载方法
González Embedded Linux Projects Using Yocto Project Cookbook
KR101113342B1 (ko) 이동통신 단말기의 부트로더 버전 관리 방법
Gerzo Introduction to nanobsd
Cheng et al. Transplantation and debugging analysis of embedded Linux kernel based on S3C2440
Pandit et al. Development of BSP for ARM9 Evaluation Board
Guo et al. BOOTLOADER Analysis Construction and U-BOOT Porting Based on S3C2440
CN115469921A (zh) 一种文件包管理方法、装置及计算设备
CN116166611A (zh) 一种基于amd平台动态适配主板的方法、系统及终端
Waldén Customizing BIOS/UEFI From OS Using EFI Variables
CN117492794A (zh) 固件更新方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20181221

RJ01 Rejection of invention patent application after publication