CN111679839A - 一种mcu flash的在线烧写方法 - Google Patents
一种mcu flash的在线烧写方法 Download PDFInfo
- Publication number
- CN111679839A CN111679839A CN202010517520.5A CN202010517520A CN111679839A CN 111679839 A CN111679839 A CN 111679839A CN 202010517520 A CN202010517520 A CN 202010517520A CN 111679839 A CN111679839 A CN 111679839A
- Authority
- CN
- China
- Prior art keywords
- flash
- program
- code
- mcu
- application program
- 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.)
- Granted
Links
Images
Classifications
-
- 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
- G06F8/63—Image based installation; Cloning; Build to order
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
Abstract
本发明公开了一种MCU FLASH的在线烧写方法,通过MCU的引脚电平设置,将启动模式固定为FLASH启动模式,同时,在FLASH中固化启动引导代码,这样,MCU上电后将跳转运行FLASH中的启动引导代码:通过波特率检测是否超时,作为是否进行程序固化依据,这样,在不再判断GPIO引脚电平的情况下,实现FLASH的在线烧写即程序固化,可以适用于MCU所在板卡位于封闭的外壳内部,并且对外接口数有限,无法提供Boot ROM所需的GPIO引脚来判断启动模式的极端场合。
Description
技术领域
本发明属于FLASH存储器技术领域,更为具体地讲,涉及一种MCU FLASH 的在线烧写方法。
背景技术
在TI((Texas Instruments,德州仪器)公司C28x实时控制MCU (MicrocontrollerUnit,微控制单元)的开发过程中,一般使用仿真器(JTAG port) 把应用程序固化到MCU的FLASH存储器(简称FLASH)中。但在很多应用场合,MCU所在板卡可能位于封闭的外壳内部,并且对外接口数有限,用仿真器刷写存在很多不便,因此TI公司提供了TI Boot ROM的解决方案:在MCU的 ROM(Read Only Memory,只读存储器)中放置启动引导代码即Bootloader,启动时通过判断固定的GPIO(General-Purpose Input/Output,通用型之输入输出) 引脚电平来判断启动模式,在SCI(Serial Communication Interface,串行通信接口)、TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)、USB(Universal Serial Bus,通用串行总线)和CAN(Controller Area Network,控制器局域网络)等启动模式下,可通过启动模式对应外设接口来实现应用程序固化,再配合上位机端(电脑或手持设备)的程序固化工具,基本解决了仿真器(JTAG port)刷写程序不便的问题。
但在某些极端应用场合,对外接口数存在极大限制,无法提供Boot ROM所需的GPIO引脚来判断启动模式,也就无法使用Boot ROM方案实现程序刷写。在这种应用场合下,需要在不判断GPIO引脚的方式下实现基于SCI、CAN、 USB或TCP/IP等接口的程序固化。
发明内容
本发明的目的在于克服现有技术的不足,提供一种MCU FLASH的在线烧写方法,在不判断GPIO引脚电平的情况下,实现FLASH的在线烧写即程序固化。
为实现上述发明目的,本发明MCU FLASH的在线烧写方法,其特征在于,包括以下步骤:
(1)、对MCU的引脚电平进行设置,将启动模式固定为FLASH启动模式;
(2)、将启动引导代码(Bootloader代码)固化到FLASH中;
(3)、MCU上电后,检测引脚电平,满足FLASH启动模式设置时,跳转到默认入口地址,运行FLASH中的启动引导代码:
判断波特率检测是否完成(判断是否进行程序固化);
若在设定的时间内完成了波特率检测,则MCU与上位机的程序固化工具已经连接,进行程序固化,返回SBL程序入口地址,执行SBL程序:擦写FLASH,下载应用并把应用固化到FLASH中;
若在设定的时间内完成了波特率检测(超时),则说明MCU不需要进行程序固化,返回相应的应用程序入口地址,执行应用程序;
所述应用程序入口地址通过修改应用程序的CMD文件(命令文件),可以把应用程序入口地址放到一个固定地址,然后在启动引导代码中调用这个固定地址;应用程序入口地址可以根据自己的需要修改,但不能放在Bootloader代码存储的FLASH扇区中,以防止Bootloader代码和应用程序的程序空间冲突,例如,Bootloader代码存放在FLASH A中,那么应用程序入口地址就要放置到即应用程序存储到FLASH A以外的FLASH区域。
本发明的发明目的是这样实现的:
本发明MCU FLASH的在线烧写方法,通过MCU的引脚电平设置,将启动模式固定为FLASH启动模式,同时,在FLASH中固化启动引导代码,这样, MCU上电后将跳转运行FLASH中的启动引导代码:通过波特率检测是否超时,作为是否进行程序固化依据,,这样,在不再判断GPIO引脚电平的情况下,实现FLASH的在线烧写即程序固化,可以适用于MCU所在板卡位于封闭的外壳内部,并且对外接口数有限,无法提供Boot ROM所需的GPIO引脚来判断启动模式的极端场合。
附图说明
图1是现有技术TI Boot ROM中汇编程序InitBoot的执行流程图;
图2是本发明MCU FLASH的在线烧写方法一种具体实施方式流程图;
图3是Bootloader main()的执行流程图。
具体实施方式
下面结合附图对本发明的具体实施方式进行描述,以便本领域的技术人员更好地理解本发明。需要特别提醒注意的是,在以下的描述中,当已知功能和设计的详细描述也许会淡化本发明的主要内容时,这些描述在这里将被忽略。
实施例
为配合程序固化,上位机的程序固化工具有很多选择,工具的易用性和可靠性也存在较大差异。不正确的固化过程,很大可能导致芯片死锁,无法继续使用。因此选取或开发一个易用性强、可靠性高的工具也是非常有必要的,也会大大提高固化过程体验。
在本实施例中,参考TI公司的C28x系列的Boot ROM代码,模拟SCI模式启动过程,在完成初始化操作后,接收第三方刷写软件所带的FLASH刷写程序SBL,后续由第三方刷写软件和它的上位机通信,完成程序刷写。本发明为 MCU的FLASH刷写提供了类似桥梁的功能,实现接口通信和SBL接收,并利用第三方刷写软件完成程序的刷写。
在本实施例中,选择C2Prog作为上位机的程序固化工具,C2Prog是codeskin 公司专门基于TI公司的C2000系列MCU开发的工业级程序固化工具。以SCI 模式举例,使用C2Prog进行程序固化有两个步骤:
1、MCU中,TI Boot ROM通过判断GPIO引脚进入SCI启动模式,在SCI 启动模式下初始化串口SCIA,C2Prog通过SCIA与MCU建立通信。通信建立后,下载C2Prog自带的Bootloader程序(简称SBL)到芯片中;
2、执行SBL,擦写FLASH,下载应用并把应用固化到FLASH中。
对于C2Prog支持的除SCI外的接口方式,也可以修改Bootloader对应的接口驱动完成。
使用TI Boot ROM的启动模式需要对GPIO进行判断,但由于接口限制,无法实现,因此发明中将实现用一段代码,来模拟TI Boot ROM启动模式的功能,这个模拟的过程就是本发明要实现的Bootloader。
具体的执行流程如图1所示:
MCU上电后,会调用汇编程序InitBoot,首先,对设备的各参数进行初始化。初始化完成后会读取代码安全模块(CSM)的密码位置,如果密码被擦除将会解锁CSM,如果没有就不执行操作。接下来会调用“SelectBootMode”函数,来通过GPIO引脚电平判断启动模式。当启动模式为FLASH启动模式时,程序会自动跳转到默认的入口地址,这个入口地址会放置4个字节程序地址,用来跳转到code_start汇编函数。code_start函数会默认关闭开门狗,并跳转到开门狗执行函数wd_disable,然后跳转到_c_int00函数进行C语言环境初始化。最后InitBoot会调用ExitBoot函数来完成程序入口跳转。
由于设备对外接口数有限,无法把GPIO引脚接到设备上进行控制,因此本发明将启动模式固定为FLASH启动模式,固定启动模式的操作需要通过硬件来完成。通过查阅C2000系列MCU芯片手册可以知道,当GPIO37和GPIO34都为高电平时,会进入FLASH启动模式,因此将GPIO37和GPIO34引脚接电源,使它们保持在高电平,就可以实现将启动模式固定为FLASH启动模式。
为了实现Bootloader代码的功能,在本实施例中编写的Bootloader main()函数,放在开门狗执行函数和复位中断服务函数c_int00函数之间执行,如图2所示。
对MCU的引脚电平进行设置,将启动模式固定为FLASH启动模式,这样上电后,跳转到默认入口地址。这个默认入口地址会放置4个字节程序地址,用来跳转到code_start汇编函数。code_start函数会默认关闭开门狗,并跳转到开门狗执行函数wd_disable,再执本实施例中编写的Bootloader main()函数,通过判断波特率检测是否完成来判断是否进行程序固化,并返回SBL程序入口地址或相应的应用程序入口地址,然后调用c_int00函数进行C语言环境初始化,最后执行SBL程序或应用程序。
在本实施例中,Bootloader main()的执行流程如图3。在Bootloader的main()函数中,首先会判断是否需要程序固化,并根据是否需要固化返回相应的程序入口地址。如果需要进行程序固化,则返回SBL程序入口地址;如果不需要程序固化,则返回相应的应用程序入口地址,最后,调用ExitBoot函数,跳转到 Bootloader main()函数返回的地址,然后执行SBL程序或应用程序。
C28x支持硬件自动波特率检测功能,当C28x和C2Prog建立通信时,会进行自动波特率检测,来实现同步波特率,这个过程可以通过串口接收信息来判断。在启动引导代码(Bootloader)的执行过程中,判断波特率检测是否完成,若在设定的时间内完成了波特率检测,则说明C2Prog已经通过串口连接,准备进行程序固化;若超时,则说明不需要进行程序固化。这里的超时等待时间可以根据需求自行调整,只要满足最小的自动波特率检测时间即可。
此外,在具体实施过程,还需要注意以下问题:
1、启动引导代码(Bootloader代码)在FLASH中的存放地址
若判断需要进行程序固化,接下来就要将SBL程序下载到FLASH中。下载SBL程序前需要考虑该下载到C28x的什么地方。通过对C2Prog的SBL程序所涉及的文件进行分析,可以得到SBL程序在FLASH中的载入地址空间为M0 SARAM和M1 SARAM。通常,M0 SARAM和M1SARAM段是程序运行的堆栈空间,因此,Bootloader代码的运行堆栈空间要避开SBL程序所要载入的内存地址,以防止Bootloader代码的运行堆栈被SBL程序载入的代码覆盖,产生未知后果。在工程参数配置页面中,可以具体定义Bootloader代码的堆栈空间,将SBL程序下载和运行所使用的堆栈空间留出来。
2、应用程序的入口地址
应用程序的跳转地址需要与Bootloader共同定义一个应用程序入口地址,来完成应用程序的跳转工作。通过修改应用程序的CMD文件,可以把程序入口放到一个固定地址,然后在启动引导代码中调用这个固定地址;应用程序入口地址可以根据自己的需要修改,但不能放在Bootloader代码存储的FLASH扇区中,以防止Bootloader代码和应用程序的程序空间冲突,例如,Bootloader代码存放在FLASH A中,那么应用程序入口地址就要放置到即应用程序存储到 FLASH A以外的FLASH区域。
需要注意的是,Bootloader固化到FLASH后,在应用程序下载时要避免擦除Bootloader所在的FLASH区域,以免Bootloader被应用程序覆盖。
在本实施例中,实现了TI公司C28x系列MCU不需要通过GPIO引脚垫片判断的启动模式下的Bootloader,可以进行固件升级以及非升级模式下的应用程序运行。针对C28x系列的不同MCU,修改对应的地址也可以实现Bootloader。对于C2Prog支持的不同接口方式,可以通过修改Bootloader对应的接口驱动完成。
尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
Claims (2)
1.一种MCU FLASH的在线烧写方法,其特征在于,包括以下步骤:
(1)、对MCU的引脚电平进行设置,将启动模式固定为FLASH启动模式;
(2)、将启动引导代码(Bootloader代码)固化到FLASH中;
(3)、MCU上电后,检测引脚电平,满足FLASH启动模式设置时,跳转到默认入口地址,运行FLASH中的启动引导代码:
判断波特率检测是否完成(判断是否进行程序固化);
若在设定的时间内完成了波特率检测,则MCU与上位机的程序固化工具已经连接,进行程序固化,返回SBL程序入口地址,执行SBL程序:擦写FLASH,下载应用并把应用固化到FLASH中;
若在设定的时间内完成了波特率检测(超时),则说明MCU不需要进行程序固化,返回相应的应用程序入口地址,执行应用程序;
所述应用程序入口地址通过修改应用程序的CMD文件(命令文件),可以把应用程序入口地址放到一个固定地址,然后在启动引导代码中调用这个固定地址;应程序入口地址可以根据自己的需要修改,但不能放在Bootloader代码存储的FLASH扇区中,以防止Bootloader代码和应用程序的程序空间冲突(例如,Bootloader代码存放在FLASH A中,那么应用程序入口地址就要放置到即应用程序存储到FLASH A以外的FLASH区域)。
2.根据权利要求1所述的MCU FLASH的在线烧写方法,其特征在于,启动引导代码(Bootloader代码)固化到FLASH后,在应用程序下载时,要避免擦除启动引导代码所在的FLASH区域,以免启动引导代码被应用程序覆盖;同时,启动引导代码的运行堆栈空间要避开SBL程序所要载入的内存地址,以防止Bootloader代码的运行堆栈被SBL程序载入的代码覆盖,产生未知后果;在工程参数配置页面中,可以具体定义Bootloader代码的堆栈空间,将SBL程序下载和运行所使用的堆栈空间留出来。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010517520.5A CN111679839B (zh) | 2020-06-09 | 2020-06-09 | 一种mcu flash的在线烧写方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010517520.5A CN111679839B (zh) | 2020-06-09 | 2020-06-09 | 一种mcu flash的在线烧写方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111679839A true CN111679839A (zh) | 2020-09-18 |
CN111679839B CN111679839B (zh) | 2023-04-18 |
Family
ID=72454141
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010517520.5A Active CN111679839B (zh) | 2020-06-09 | 2020-06-09 | 一种mcu flash的在线烧写方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111679839B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112269589A (zh) * | 2020-10-16 | 2021-01-26 | 江苏吉泰科电气股份有限公司 | Bootloader在线刷写方法 |
CN113127043A (zh) * | 2021-03-19 | 2021-07-16 | 力高(山东)新能源技术有限公司 | 一种单片机APP在线升级BootLoader的方法 |
CN113138777A (zh) * | 2021-04-09 | 2021-07-20 | 长芯盛(武汉)科技有限公司 | 适用多种烧写协议的低成本通用多路烧写器和烧写方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104102514A (zh) * | 2014-07-18 | 2014-10-15 | 江苏兆伏新能源有限公司 | 一种固件升级方法及其装置 |
CN204759400U (zh) * | 2015-06-04 | 2015-11-11 | 上海哈诚电子科技有限公司 | 一种自动匹配与固件离线下载装置的电路 |
CN108845897A (zh) * | 2018-05-25 | 2018-11-20 | 北京无线电测量研究所 | 串口通信调试方法、装置及存储介质 |
CN109117151A (zh) * | 2018-07-18 | 2019-01-01 | 珠海市杰理科技股份有限公司 | 烧写器以及程序烧写方法、装置、计算机设备和存储介质 |
US20190050356A1 (en) * | 2017-08-10 | 2019-02-14 | Infineon Technologies Ag | Virtual Machine Monitor Interrupt Support for Computer Processing Unit (CPU) |
CN109710296A (zh) * | 2018-12-14 | 2019-05-03 | 上海航天控制技术研究所 | 一种空天飞机惯导嵌入式软件在线更新方法 |
US20190155614A1 (en) * | 2017-11-22 | 2019-05-23 | Hewlett Packard Enterprise Development Lp | Serving images to server groups |
CN110865822A (zh) * | 2019-11-11 | 2020-03-06 | 摩登汽车有限公司 | 整车控制器用Bootloader刷写程序的启动架构及方法 |
-
2020
- 2020-06-09 CN CN202010517520.5A patent/CN111679839B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104102514A (zh) * | 2014-07-18 | 2014-10-15 | 江苏兆伏新能源有限公司 | 一种固件升级方法及其装置 |
CN204759400U (zh) * | 2015-06-04 | 2015-11-11 | 上海哈诚电子科技有限公司 | 一种自动匹配与固件离线下载装置的电路 |
US20190050356A1 (en) * | 2017-08-10 | 2019-02-14 | Infineon Technologies Ag | Virtual Machine Monitor Interrupt Support for Computer Processing Unit (CPU) |
US20190155614A1 (en) * | 2017-11-22 | 2019-05-23 | Hewlett Packard Enterprise Development Lp | Serving images to server groups |
CN108845897A (zh) * | 2018-05-25 | 2018-11-20 | 北京无线电测量研究所 | 串口通信调试方法、装置及存储介质 |
CN109117151A (zh) * | 2018-07-18 | 2019-01-01 | 珠海市杰理科技股份有限公司 | 烧写器以及程序烧写方法、装置、计算机设备和存储介质 |
CN109710296A (zh) * | 2018-12-14 | 2019-05-03 | 上海航天控制技术研究所 | 一种空天飞机惯导嵌入式软件在线更新方法 |
CN110865822A (zh) * | 2019-11-11 | 2020-03-06 | 摩登汽车有限公司 | 整车控制器用Bootloader刷写程序的启动架构及方法 |
Non-Patent Citations (3)
Title |
---|
F.J.FERRERO MARTÍN: ""Low-cost open-source multifunction data acquisition system for accurate measurements"", 《MEASUREMENT》 * |
FLYDREAM0: ""STM32F412擦除内部FLASH时间过长"", 《HTTPS://BLOG.CSDN.NET/FLYDREAM0/ARTICLE/DETAILS/53998315》 * |
聂宏艳: ""基于MIPS的Bootloader的设计和实现"", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112269589A (zh) * | 2020-10-16 | 2021-01-26 | 江苏吉泰科电气股份有限公司 | Bootloader在线刷写方法 |
CN112269589B (zh) * | 2020-10-16 | 2022-07-26 | 江苏吉泰科电气股份有限公司 | Bootloader在线刷写方法 |
CN113127043A (zh) * | 2021-03-19 | 2021-07-16 | 力高(山东)新能源技术有限公司 | 一种单片机APP在线升级BootLoader的方法 |
CN113138777A (zh) * | 2021-04-09 | 2021-07-20 | 长芯盛(武汉)科技有限公司 | 适用多种烧写协议的低成本通用多路烧写器和烧写方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111679839B (zh) | 2023-04-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111679839B (zh) | 一种mcu flash的在线烧写方法 | |
CN102945173B (zh) | 用户程序在线升级系统和升级方法 | |
US20050268195A1 (en) | Apparatus and method for improving emulation speed of high-level languages in on-chip emulation systems | |
CN104407878B (zh) | C6000数字信号处理器在线升级方法 | |
CN103136002B (zh) | 一种基于UBoot的自动升级的控制方法及系统 | |
CN108170494B (zh) | 一种用于智能终端的应用程序启动方法及启动系统 | |
CN106775855B (zh) | 一种基于eclipse的flash烧写方法、插件和系统 | |
CN109710320B (zh) | 一种两级驱动的启动引导BootLoader方法 | |
CN110187909B (zh) | 一种基于安卓系统的单片机固件升级方法 | |
JP2009252194A (ja) | データ処理装置、ハードウェアアクセス方法、及びハードウェアアクセスプログラム | |
CN107729090A (zh) | 一种基于串口传输的用户程序下载方法 | |
CN115934114A (zh) | 一种软件固件在线烧写方法、设备及计算机可读存储介质 | |
CN110825421A (zh) | 一种固件升级方法、系统及可读存储介质 | |
CN113946481B (zh) | Risc-v内核mcu调试的下载程序方法及调试器 | |
KR100601164B1 (ko) | 플래시 롬을 이용한 에뮬레이터 및 펌웨어 업그레이드 방법 | |
CN113157329A (zh) | 启动应用的方法、系统、服务器和存储介质 | |
KR100303307B1 (ko) | 실시간 오퍼레이팅 시스템에서 디버깅동작을 위한 다운로드장치 및 방법 | |
CN112346769A (zh) | 一种基于tms320f28335的dsp软件在线升级方法 | |
CN107229457B (zh) | 电子控制器的引导加载方法、装置、电子控制器及汽车 | |
CN112764379B (zh) | 一种基于dsp系统的iap控制方法 | |
CN217640186U (zh) | 一种基于tms320f28335的iap在线升级模组 | |
US6550027B1 (en) | Method and article of manufacture for differentiating between a non-volatile memory device and an emulator for purposes of in-circuit programming | |
CN102799466B (zh) | 一种应用于PowerPC最小系统的引导装置及引导方法 | |
US20020147968A1 (en) | Method for emulating a program-controlled unit | |
CN115756555A (zh) | 一种基于stm32的安全稳定串口升级方法与装置 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |