CN109062562A - Mcu固件程序的下载方法 - Google Patents
Mcu固件程序的下载方法 Download PDFInfo
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
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处理器,所搭配的内嵌式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中并进行正确性验证。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109800012A (zh) * | 2019-03-01 | 2019-05-24 | 四川长虹电器股份有限公司 | 一种mcu固件升级方法 |
Citations (7)
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 | 北京安控科技股份有限公司 | 一种嵌入式计算机固件程序的下载方法 |
-
2018
- 2018-07-27 CN CN201810844547.8A patent/CN109062562A/zh active Pending
Patent Citations (7)
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)
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 |