CN102568583A - Freescale HCS12系列MCU的Flash存储器在线编程方法 - Google Patents
Freescale HCS12系列MCU的Flash存储器在线编程方法 Download PDFInfo
- Publication number
- CN102568583A CN102568583A CN2011104267889A CN201110426788A CN102568583A CN 102568583 A CN102568583 A CN 102568583A CN 2011104267889 A CN2011104267889 A CN 2011104267889A CN 201110426788 A CN201110426788 A CN 201110426788A CN 102568583 A CN102568583 A CN 102568583A
- Authority
- CN
- China
- Prior art keywords
- write
- flash
- mcu
- programming
- erase
- 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
Images
Landscapes
- Read Only Memory (AREA)
Abstract
本发明涉及一种Freescale HCS12系列MCU的Flash存储器在线编程方法,包括选型、擦除和写入操作。其特征在于:设计一个数据库,将Freescale HCS12系列MCU的Flash差异参数值放置数据库中,以实现HCS12系列MCU在线编程的通用性。在RAM区中预置Flash存储器擦除和写入程序的机器码,这些机器码是在编程高压期间要运行到的语句,将其从Flash区移置RAM区执行,可以提高高压期间擦写操作的稳定性。根据BDM通信原理,独立编写一段模拟BDM串行通信的程序,目标芯片只从编程调试器接收用户目标代码,因此编程调试器不需要发送操作码与地址信息,也无需等待命令,从而提高了擦除和写入的速度。通过对擦除、写入等操作后的数据检验,确保了擦写操作的可靠性,并可方便地进行在线升级。
Description
技术领域
本发明涉及一种对Freescale HCS12系列MCU的Flash进行在线编程的方法。具体涉及对Freescale HCS12系列MCU的Flash在线擦除和写入操作具有通用性、稳定性、可靠性和高速性的方法。
背景技术
近几年Flash存储器技术趋于成熟,具有电可擦除、无需后备电源来保护数据、可在线编程、存储密度高、低功耗、低成本等特点。而这些特点,正是MCU所期望的。目前,许多MCU内部都集成了Flash存储器,具有在线编程(In-Circuit Program)功能。Flash 存储器的在线编程是指利用Flash 存储器的电可擦除特性,允许Flash 存储器内的用户程序在运行过程中调用驻留在Flash 存储器内部的擦除或写入子函数,对Flash 存储器内的数据或程序进行修改。Flash存储器在线编程是实现嵌入式应用产品程序的在线更新、重要参数的掉电保护与恢复、静态参数的在线修改等功能的重要技术手段。程序的在线更新提高了嵌入式系统应用产品的可扩展性与升级性能,参数的掉电保护与恢复,以及静态参数的在线修改等可以使用Flash 存储器的一部分取代传统EEPROM,提高了系统的稳定性。HCS12 系列MCU是2002 年后由飞思卡尔推出的16 位系列微控制单元(Micro Controller Unit, MCU),至今已经推出10 多个子系列60 多个型号,其片内集成了Flash存储器,具有单一电源电压供电、支持在线编程等特点,广泛应用于数据采集、通信、控制、工业自动化及汽车电子等领域。
一般情况下,固化MCU 的Flash 存储器中的程序是通过编程器来完成的,该方法称为监控模式(monitor mode)或写入器模式,与一般的EPROM、OTP、EEPROM 装入程序的操作相似。另一方面,由于Flash 存储器具有电可擦除功能,因此在程序运行过程中可以对Flash 存储器区的数据或程序进行更新,即用户模式(user Mode)或在线编程模式。一般来说,这2 种编程模式对Flash 存储器的编程操作程序是一致的,差别在于调用这些程序的方式和环境不同,但不是所有类型的MCU 内的Flash 存储器都具有在线编程功能。
对Flash 存储器的读写不同于一般的RAM 读写,需要专门的编程过程。Flash 编程的基本操作有2 种:擦除(erase)和写入(program)。擦除操作是将存储单元的内容由二进制的0变成1,而写入操作是将存储单元的必要位由二进制的1 变成0。擦除操作包括整体擦除和扇区擦除。而写入操作是以字节为单位进行的。在擦除及写入过程中一般需要高于正常工作时的电压(即编程高压)。HCS12 系列MCU由片内电荷泵产生编程高压。由于Flash 在线编程时需要对Flash 阵列加上高于正常工作时的电压,因此这个高电压会导致对Flash 区域读取不稳定。Flash在线编程是通过运行Flash 存储器内部的函数去擦除和写入另一些Flash 区域。编程高压会导致读取的不稳定,使得运行擦除和写入程序也不稳定,给Flash 存储器在线编程带来困难。
通过对HCS12系列MCU的深入分析和程序跟踪研究,发现Flash 擦写程序的执行过程中,需要加高压运行,也正由于在Flash区中加高压运行引起了Flash 存储器读取不稳定。因此,本发明将擦除和写入程序的机器码预先放入RAM 区中,高压时在RAM中执行,从而克服了高压读写不稳定的问题,提高了程序运行的效率。
今后,嵌入式应用软件趋向于大型化,复杂化,代码量较大,因此,64KB以上Flash的MCU需要采用页面Flash ROM的寻址技术来增加存储容量,以适应嵌入式应用软件发展的需求,这也给大部分HCS12系列MCU的Flash在线编程增加难度。
显然,根据以上的技术背景分析,如果能找到一种可对所有HCS12系列MCU进行在线编程的方法,不仅能实现在线编程的通用性,同时又能保证在线编程的稳定性、可靠性和高速性,则对Freescale HCS12系列MCU的产品开发具有重要的意义。
发明内容
本发明的目的是提供一种Freescale HCS12系列MCU的Flash进行在线编程的方法,该方法不仅能实现在线编程的通用性,同时又能保证在线编程的稳定性、可靠性和高速性。
为了达到上述目的,发明人发现,可以在PC机方建立一个数据库,将所有HCS12系列MCU与Flash擦写操作有关的参数及每种MCU擦写子函数的机器码的存放路径置于数据库中,供擦写操作前选型时读取,从而实现在线编程的统一性;在Flash擦写操作时,高压期间运行的擦除和写入程序会引起F lash读取不稳定,通过预先把这一部分程序机器码移植到RAM区,需要执行时再转过去执行,执行完后再回到Flash区,这样便可解决Flash在线编程的稳定性问题;独立编写一段模拟BDM串行通信的程序,目标芯片只从编程调试器接收用户目标代码,编程调试器也不需要发送操作码与地址信息,也无需等待命令而延时,从而提高了擦除和写入的速度。通过对擦除、写入等操作后的数据检验,确保了擦写操作的可靠性。
由此,本发明采用的技术方案:一种Freescale HCS12系列MCU的Flash存储器在线编程方法,包括选型、擦除和写入操作。同时,Freescale HCS12系列MCU的擦除和写入操作具有通用性、稳定性、可靠性和高速性。
1)在线编程的通用性设计
编程器通用性设计的关键技术在于如何处理HCS12系列MCU的FLASH参数。要对不同芯片的FLASH参数进行深入理解、比较和总结之后,才能对程序下载模块进行设计。找出这些芯片有差异的FLASH参数后,将其放在数据库中,以便下载程序时,从该数据库中读取相关参数。设计好参数数据库之后,PC方下载界面可以根据所选择的芯片型号从配置文件和数据库中获取相应芯片的擦写操作所需的参数值。表1给出了HCS12系列MCU中的几款芯片的参数,这些参数针对不同的MCU,其值可能不同。
用户数据起始地址:将一页用户数据写入相应空白芯片之前,要先将这一页数据通过BDM头写入到RAM区,然后运行写入程序,实现数据从RAM区写入到ROM区。但由于不同芯片的RAM区大小和起始地址可能不同,把一页用户数据写入到RAM区时,其起始地址也会有所不同,所以将其设置为可变参数,使用时,从数据库中读取。
标志位首地址:该参数是RAM区的一个地址,用于存放擦写成功或出错的标志信息,占两个字节。每写完一页面用户数据之后,PC机方可从该地址处读出一个字的内容,判断Flash写入操作是否成功,只有写入成功后,才写下一页用户数据。
写入文件路径和擦除文件路径:由于每个芯片的Flash参数和空间不尽相同,因而每种芯片的擦除和写入子程序也会有差异,因PC机方要根据当前所选的MCU型号以及当前是擦除还是写入操作来决定调用哪个MCU的写入程序代码文件(*Write.s19)或擦除程序代码文件(*Erase.s19),以实现写入或擦除操作。
2)Flash擦写操作的稳定性设计
Freescale HCS12系列MCU的Flash的擦除和写入操作包括:
① 清除Flash状态寄存器FSTAT中的出错标志位ACCERR和PVIOL;
② 写Flash配置寄存器FCNFG的b1和b0。以MC9S12DP256为例,这两位表示选择256KB的Flash中的哪一个64KB;0x00表示PPAGE号为0x3F、0x3E、0x3D、0x3C这64KB,0x01表示PPAGE号为0x3B、0x3A、0x39、0x38这64KB,0x02表示PPAGE号为0x37、0x36、0x35、0x34这64KB,0x03表示PPAGE号为0x33、0x32、0x31、0x30这64KB;
③ 写PPAGE寄存器,选择要擦写的页。如果要擦除或写入的Flash是存储空间窗口0x8000~0xBFFF中的某一页,这一步是必须的。如果是0x3E、0x3F这两页,这一步可以省去;
④检查上一次Flash处理的命令是否执行完成,能否写入新的命令,这是通过判断Flash状态寄存器FSTAT中的命令缓冲区的标志位CBEIF是否为1,即命令缓冲区是否可以使用而实现的,若不能使用,则等待,直到可以使用;
⑤ 将要写入的数据字写到相应的地址中,地址必须为偶数地址;
⑥ 向FCMD命令寄存器写命令字,0x41表示整体擦除,0x20表示单字节写入;
⑦ 向Flash状态寄存器FSTAT中的命令缓冲区的标志位CBEIF写1清零。这时状态寄存器中的CCIF位将置位,说明操作成功。
上述方案中,所有HCS12系列MCU的Flash擦除和写入程序都封装成子函数,根据擦写操作之前所选的MCU型号,决定调用相应的擦写子函数,以实现对HCS12系列MCU的Flash在线编程。解决Flash擦写不稳定的因素主要有两种:一是将擦除和写入子函数机器码存放在不需要擦写的Flash块区域,这样擦写子函数就可以直接在Flash中运行。因为,擦写操作时只对其中的一块加高压,并不影响别的块,从而避免程序代码的移动。但该方法只能适用于Flash区在2块或2块以上的MCU,像常用的MC9S12NE64和MC9S12UF32都只有一块Flash,为了实现在线编程方法对HCS12系列的MCU通用,所以该方法不适用。二是在执行擦除和写入操作之前,将擦除和写入子函数的机器码预置在指定的RAM区,需要执行时,由BDM指令将PC指针定位到相应机器码存放的起始位置,从而实际执行这段代码,实现对Flash区的擦写操作,这样加高压时,就不在从Flash区中执行程序。该方法不仅解决了高压读取不稳定的问题,也能解决对HCS12系列的MCU在线编程的通用性问题。
3)在线编程的高速下载设计
通过对BDM通信原理和通信过程的分析和研究,发现使用BDM命令,除了发送2个字节的用户数据之外,还需要发送额外的字节,并且命令的完成都需要较长的延迟时间。同时由于BDM采用单线引脚串行通信,所以BDM通信时间较长。为了减少编程调试器与目标芯片间的单线数据发送,减少程序下载时间,研究发现可以通过优化通信子程序代码来实现。根据BDM采用单线引脚串行通信的原理,自己编写一段模拟BDM串行通信的程序,目标芯片只从编程调试器接收用户目标代码,不需要参与其他的数据通信,从而提高通信速度。
具体实现方案是,将编程调试器中的M68HC908JB8的引脚PTB.0与目标芯片PTA.0引脚相连来传送数据,使得数据通信过程不影响BKGD引脚。过程如下:
①按照编程调试器发送1位时序,在编程调试器方编写以PTB.0为发送引脚的字节发送代码;
②按照目标芯片接收1位的过程,编写目标芯片以PTA.0为接收引脚的字节接收代码,进而编写好目标芯片接收程序;
③将自定义的目标芯片接收程序编译成目标代码,通过基本的BDM命令发送到目标芯片RAM区;
④执行目标芯片中自定义的接收程序,将接收到的字节写入目标芯片指定的内存空间。
由于自己定义目标芯片的接收程序,因此编程调试器不需要发送操作码与地址信息,也无需等待命令完成而延迟时间。目标芯片接收程序代码量少于50字节,这部分时间很短。因而假如从编程调试器发送100KB的数据到目标芯片RAM区,需要花费的时间计算如下:
(100×1024)个字节×809个周期÷(24×106)=3.45 s
使用自定义目标芯片接收程序,在原有系统编程调试器内存与目标芯片内存的数据通信速度上提高了8倍多。
上述技术方案均在实践中等到运用,跟现有的相关技术相比,具有下列优点:
① 在线编程具有通用性。通过设置Flash参数数据库和运用合适的Flash在线擦写方法,实现了对HCS12系列MCU的在线编程的通用性;
② 在线编程具有稳定性。通过采用预置Flash擦写程序代码于RAM区的方法,避免了在Flash区中加高压运行擦写程序代码而造成读取不稳定的问题;
③ 在线编程具有高速下载性。编写一段模拟BDM串行通信的程序,启用编程调试器与目标芯片的其他两个引脚进行数据传送,目标芯片只从编程调试器接收用户目标代码,不需要参与其他的数据通信。BKGD引脚通信的负载下降,从而提高通信速度;
④在线编程的可靠性。通过对擦除、写入等操作后的数据进行检验,确保了擦除和写入操作的可靠性。
附图说明
图1是本发明的硬件平台(主控MCU为M68HC908JB8)在线编程的关系图,图2是Flash存储器MCU方擦写操作流程图,图3是Flash存储器PC机方写入操作流程图,图4是PC机方实现在线编程的主流程图。
具体实施方式
如图1所示,本发明的硬件平台工作的关系图。PC机方编写了一个Freescale HCS12系列MCU通用编程器的操作界面软件,以USB方式与硬件平台相连;硬件平台与目标板之间以BDM方式通信和串行通信的方式相连。
如图2所示, MCU方擦除和写入子函数的流程图。详细的擦写操作过程如下:1)擦写操作之前,需要禁止所有保护,相应语句为:FPROT = 0xFF;2)清错误标志位,相应语句为:FSTAT|= 0x30;3)选择要擦写的块,如擦写BLOCK0,则相应语句为:FCNFG = 0x00;4)选择擦写的页面,如,以MC9S12DG128为例,要擦写BLOCK0的第0x3C页,则相应语句为:PPAGE=0x3C;5)检查前一次Flash处理命令是否执行完毕,能否写入新的命令,相应的语句为:等待指令执行完成语句while(!(FSTAT&0x40));6)加载擦写数据,相应语句:加载擦除数据addr=0xFFFF,加载写入数据addr=data,data为上位机传过来的一个16位数据;7)加载擦写指令:整体擦除指令FCMD=0x41,写一个字指令FCMD=0x20;8)向FSTAT寄存器的CBEIF置1,清标志位,若CCIF自动置位,则本次擦写操作成功。
如图3所示,在取得写入命令后,程序首先取一页数据,将数据以USB发送到编程调试器,再由编程调试器的PTB.0脚发送到目标芯片的PTA.0接收脚,进而写入到相应RAM区,接着判断写入程序是否已全部写入RAM区中,若没有再继续写入下一页。然后执行GO PC指令转向目标芯片写入程序所在RAM区中的地址处开始执行写入,写入过程如超时则中途退出,否则接着进行下一页的写入操作,直到最后一页。
如图4所示,启动程序后首先检测设备是否已经连接,如果没有连接则返回错误信息,禁止以下的擦除和写入操作。在初始化成功后,即进入BDM模式,系统开始等待用户的操作指令,根据相应的指令作出操作。用户在完成所需操作后按“退出”,则退出主程序。
Claims (4)
1.一种Freescale HCS12系列MCU的Flash存储器在线编程方法,包括选型、擦除和写入操作,其特征在于: Freescale HCS12系列MCU的擦除和写入操作通用性、稳定性、可靠性和高速性,Flash的擦除和写入操作应按以下步骤进行:
① 清除Flash状态寄存器FSTAT中的出错标志位ACCERR和PVIOL;
② 写Flash配置寄存器FCNFG的b1和b0,以MC9S12DP256为例,这两位表示选择256KB的Flash中的哪一个64KB;
③ 写PPAGE寄存器,选择要擦写的页;
④ 检查上一次Flash处理的命令是否执行完成,能否写入新的命令;
⑤ 将要写入的数据字写到相应的地址中,地址必须为偶数地址;
⑥ 向FCMD命令寄存器写命令字,0x41表示整体擦除,0x20表示单字节写入;
⑦ 向Flash状态寄存器FSTAT中的命令缓冲区的标志位CBEIF写1清零,这时状态寄存器中的CCIF位将置位,说明操作成功。
2.根据权利要求1所述的Freescale HCS12系列MCU的Flash存储器在线编程方法,其特征在于:擦写前的预操作包括不同MCU的型号选型、目标芯片频率设置、Flash相关参数值获取。
3.根据权利要求1所述的Freescale HCS12系列MCU的Flash存储器在线编程方法,其特征在于:所有Freescale HCS12系列MCU的擦除和写入操作都封装成相应的擦除子函数和写入子函数,当选定MCU型号后,则调用相应的擦除和写入子函数,以实现对指定MCU的Flash在线编程。
4.根据权利要求1所述的Freescale HCS12系列MCU的Flash存储器在线编程方法,其特征在于:根据BDM通信原理,独立编写一段模拟BDM串行通信的程序,目标芯片只需从编程调试器接收用户目标代码,不需要返回其他响应信息,同时编程调试器也不需要再发送操作码与地址信息,也无需等待命令,从而提高了擦除和写入的速度;通过对擦除、写入等操作后的数据进行检验,确保了擦除和写入操作的可靠性。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011104267889A CN102568583A (zh) | 2011-12-19 | 2011-12-19 | Freescale HCS12系列MCU的Flash存储器在线编程方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011104267889A CN102568583A (zh) | 2011-12-19 | 2011-12-19 | Freescale HCS12系列MCU的Flash存储器在线编程方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102568583A true CN102568583A (zh) | 2012-07-11 |
Family
ID=46413786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011104267889A Pending CN102568583A (zh) | 2011-12-19 | 2011-12-19 | Freescale HCS12系列MCU的Flash存储器在线编程方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102568583A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106126211A (zh) * | 2016-06-17 | 2016-11-16 | 山东超越数控电子有限公司 | 一种支持调试接口的mcu在线编程系统 |
CN106571163A (zh) * | 2016-11-04 | 2017-04-19 | 上海华虹集成电路有限责任公司 | 非易失性存储器编程方法 |
CN113391755A (zh) * | 2020-02-26 | 2021-09-14 | 北京君正集成电路股份有限公司 | 一种并行双片nand flash中物理擦除块动态关联的方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101409106A (zh) * | 2008-10-29 | 2009-04-15 | 苏州大学 | Flash存储器在线编程控制方法 |
-
2011
- 2011-12-19 CN CN2011104267889A patent/CN102568583A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101409106A (zh) * | 2008-10-29 | 2009-04-15 | 苏州大学 | Flash存储器在线编程控制方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106126211A (zh) * | 2016-06-17 | 2016-11-16 | 山东超越数控电子有限公司 | 一种支持调试接口的mcu在线编程系统 |
CN106571163A (zh) * | 2016-11-04 | 2017-04-19 | 上海华虹集成电路有限责任公司 | 非易失性存储器编程方法 |
CN113391755A (zh) * | 2020-02-26 | 2021-09-14 | 北京君正集成电路股份有限公司 | 一种并行双片nand flash中物理擦除块动态关联的方法 |
CN113391755B (zh) * | 2020-02-26 | 2023-09-22 | 北京君正集成电路股份有限公司 | 一种并行双片nand flash中物理擦除块动态关联的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100383737C (zh) | 单片机在线加载升级方法及系统 | |
CN105279127B (zh) | 一种基于PCI或PCIe总线的FPGA程序下载系统及方法 | |
CN106293807A (zh) | 一种基于DSP的Flash芯片引导加载方法 | |
CN105373407A (zh) | 嵌入式系统dsp和fpga在线升级方法 | |
CN105930186B (zh) | 多cpu的软件加载方法及基于多cpu的软件加载装置 | |
CN104898546B (zh) | 一种基于soc的plc在线调试系统和方法 | |
CN109062827A (zh) | 闪存控制装置、闪存控制系统以及闪存控制方法 | |
CN109522033B (zh) | 一种基于器件运行自编程和双中断向量表的ecu程序与数据升级方法 | |
CN103677885A (zh) | 一种arm flash简易程序烧写的方法 | |
CN101008898A (zh) | 一种智能化设备软件升级与修复的方法和系统 | |
CN112000351B (zh) | Bmc固件的更新方法、更新装置、更新设备及存储介质 | |
CN106708586B (zh) | 一种用于嵌入式系统程序自动在线更新的手持式仪器及方法 | |
CN101017424A (zh) | 基于usb接口的打标控制器 | |
CN102520961B (zh) | 片外在线可编程的soc系统及其控制方法 | |
CN104679559A (zh) | 单片机在线编程的方法 | |
CN1154042C (zh) | 用于嵌入式微控制单元的更新程序码方法 | |
CN102568583A (zh) | Freescale HCS12系列MCU的Flash存储器在线编程方法 | |
CN105759778B (zh) | 一种热泵热水器控制调试系统及调试方法 | |
CN102033811A (zh) | 用于管理闪存多个区块的方法和相关记忆装置及其控制器 | |
CN202632773U (zh) | 一种基于sd卡的便携式串行flash烧写装置 | |
CN105373403A (zh) | 控制器的升级方法及系统 | |
CN102629212A (zh) | 一种基于j-link间接烧写程序到nandflash的方法 | |
CN101409106B (zh) | Flash存储器在线编程控制方法 | |
CN103577344A (zh) | 数据写入方法、存储器控制器与存储器储存装置 | |
CN113946481B (zh) | Risc-v内核mcu调试的下载程序方法及调试器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120711 |