支持一次性可编程存储器多次编程的微控制器和编程方法转让专利

申请号 : CN201010285653.0

文献号 : CN102364430B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 郑尊标

申请人 : 杭州士兰微电子股份有限公司

摘要 :

本发明公开了一种在一次性可编程(OTP)存储器上可进行多次编程,充分利用存储空间,并且便于批量生产和操作的微控制器。通过在复位、中断响应、调用子程序、绝对跳转等环节调整程序指针值,使得相同的目标代码存储在不同的OTP地址空间时,MCU的运行仍然正确。在此基础上,本发明提出了该种微控制器内嵌OTP存储器的编程方法。

权利要求 :

1.支持一次性可编程存储器实现多次编程的微控制器,所述微控制器包括微控制器(MCU)核、一次性可编程(OTP)存储器、OTP编程接口;其特征在于:所述一次性可编程存储器包含一配置信息区,所述配置信息区用于存储复位地址信息;所述微控制器核在MCU复位时获取所述复位地址信息并将其解释为对应的复位地址值(RSTADDR);在MCU复位和响应中断时将原始复位入口地址即复位向量或中断入口地址即中断向量与所述复位地址值(RSTADDR)相加作为新的复位向量或中断向量、在执行调用子程序指令和绝对跳转指令时将从指令数据码中获取的绝对地址值与所述复位地址值(RSTADDR)相加赋给程序计数器(PC);所述OTP编程接口可对一次性可编程存储器进行全地址访问。

2.如权利要求1所述的微控制器,其特征在于:所述一次性可编程存储器内的复位地址信息,是用一个MTP配置字节(MTPCON)来表达。

3.如权利要求2所述的微控制器,其特征在于:所述一次性可编程存储器内的配置信息区还包含一OTP状态字节(OTPSTA),用于表达下一个复位地址信息,间接表达出一次性可编程存储器已经被使用的地址区域。

4.一种针对权利要求1所述的微控制器的编程方法,其特征在包括以下步骤:

(1)编程器获取即将编程到一次性可编程存储器中的目标代码;

(2)编程器计算步骤(1)所述目标代码需要占用的存储空间的大小;

(3)编程器通过OTP编程接口读取一次性可编程存储器内的配置信息区,获取MTP配置字节(MTPCON),进而获得:复位地址值(RSTADDR)、下一次复位地址值即将编程的目标代码的复位地址值、一次性可编程存储器剩余空间大小;

(4)编程器判断一次性可编程存储器剩余空间是否足够存储步骤(1)所述的目标代码;如果一次性可编程存储器剩余空间不够存储步骤(1)所述的目标代码,则终止编程步骤;反之,则继续以下步骤;

(5)编程器将步骤(1)所述的目标代码存储在以下一次复位地址值为起始地址的存储区域内;

(6)编程器更新配置信息区中的MTP配置字节(MTPCON)。

说明书 :

支持一次性可编程存储器多次编程的微控制器和编程方法

技术领域

[0001] 本发明涉及一次性可编程(One Time Programmable,OTP)存储器的编程技术,尤其涉及在一次性可编程存储器上实现多次编程的技术。

背景技术

[0002] 微控制器(MCU)芯片中嵌入的程序可编程存储器分为一次性可编程(One Time Programmable,OTP)存储器和多次可编程(Multiple-Time Programmable,MTP)存储器。一次性可编程(OTP)存储器的编程过程是不可逆的破坏活动,仅允许数据写入一次。一般OTP存储器在编程之前的所有位存储单元的逻辑状态都相同(例如所有位存储单元均为逻辑“1”),编程之后,某些位存储单元的状态被取反(例如原来是“1”,编程之后变成“0”),这些状态被取反的位存储单元无法再回到原来缺省的逻辑状态。MTP存储器通常有可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)和闪存(FLASH)等几种,多次可编程(MTP)存储器虽然制造成本会高于OTP存储器,但是允许多次修改,因此在生产备货上具有灵活性,例如有一批电子设备中采用了MCU,厂家对这批MCU的可编程存储器进行编程,当销售了一部分设备后发现这个型号的设备已经没有市场或程序有缺陷,需要升级MCU程序后才能继续销售,这时,如果MCU内嵌的是OTP存储器,那这批MCU可能就要报废,为了应对类似的风险,许多厂家现在更倾向于采用MTP存储器。
[0003] 上述提到的MTP的三种类型存储器的可编程次数是很多的,有几十次至上万次,但很多时候,其实只需要几次(甚至两次)可重复编程就可以解决前面提到的备货的问题。而且,我们知道制造某个容量的MTP存储器产品比制造2倍(甚至4倍)于该容量的OTP存储器产品可能要花更多的成本。这一方面是由于MTP的制造工艺复杂,另一方面,某个容量的MTP面积可能本身就比2倍于该容量的OTP的面积大。因此,我们可以很容易想到利用OTP存储器实现少量的多次编程技术。不过,要在OTP存储器上实现商用的多次编程还要解决很多具体问题。
[0004] 我们都知道,OTP存储器的存储单元经过编程可以从初始状态变成逻辑相反的状态(例如从“1”变成“0”),反之,则不行。那么,其实对于任何一个OTP存储器来说,如果经过一次编程后仍有未改变初始状态的存储单元的话,这些存储单元还是可以编程使用的,例如:对于一个4K容量的OTP存储器,一次编程用掉了0.5K的容量,则余下的3.5K容量仍然可以被再次编程。但这样简单考虑是不够的,还要考虑大批量生产的方便性和可行性。例如:某厂商对A程序备货1万颗MCU,而对B程序备货2万颗相同型号的MCU,这种MCU内嵌4K OTP存储器,A程序的容量是0.8K,B程序的容量是1.2K。经过一段时间的销售后,A程序的MCU还剩1千颗,B程序的MCU还剩5千颗,这时候发现需要改成C程序销售1万颗,C程序的容量为1.5K。我们知道,可以利用A程序和B程序的库存芯片共6千颗,再新编程4千颗空白片,当然,为了备货需要,可能生产上会安排更多的空白片写入C程序。现在的问题是,我们不能简单地把已经编译好的C程序编程进A程序MCU和B程序MCU的剩余存储空间,那样的话,执行时程序中的很多绝对地址跳转指令就会发生错误。还有一个问题是,如何让程序从不同的入口地址开始执行。如果我们事先知道库存芯片的程序空间使用情况,那么根据不同的芯片修改C程序并编译出不同版本的C程序,这两个问题比较容易解决,但是,过多的程序版本会给生产管理带来很大的麻烦。这里举的例子还比较简单,如果有很多程序版本的库存芯片,且有些芯片已经经过二次编程了,那生产管理的难度就更大了。况且,有时还不仅仅是编译不同版本的程序就能解决问题的,如果之前已经编入的程序没有留出相应的接口,新程序是无法替代老程序执行功能的。

发明内容

[0005] 本发明的主要目的旨在提供一种在一次性可编程(OTP)存储器上可进行多次编程,充分利用存储空间,并且便于批量生产和操作的微控制器和编程方法。
[0006] 支持一次性可编程存储器实现多次编程的微控制器,所述微控制器包括微控制器(MCU)核、一次性可编程(OTP)存储器、OTP编程接口;所述一次性可编程存储器包含一配置信息区,所述配置信息区用于存储复位地址信息;所述微控制器核在MCU复位时获取所述复位地址信息并将其解释为对应的复位地址值(RSTADDR);在MCU复位和响应中断时将原始复位入口地址(复位向量)或中断入口地址(中断向量)与所述复位地址值(RSTADDR)相加作为新的复位向量或中断向量、在执行调用子程序指令和绝对跳转指令时将从指令数据码中获取的绝对地址值与所述复位地址值(RSTADDR)相加赋给程序计数器(PC);所述OTP编程接口可对一次性可编程存储器进行全地址访问。
[0007] 所述一次性可编程存储器内的复位地址信息,是用一个MTP配置字节(MTPCON)来表达。
[0008] 所述一次性可编程存储器内的配置信息区还可以包含一OTP状态字节(OTPSTA),用于表达下一个复位地址信息,也可以间接表达出一次性可编程存储器已经被使用的地址区域。
[0009] 一种针对支持一次性可编程存储器实现多次编程的微控制器的编程方法,包括微控制器及编程器,其中所述微控制器包括微控制器(MCU)核、一次性可编程(OTP)存储器、OTP编程接口;编程方法包括以下步骤:
[0010] (1)编程器获取即将编程到一次性可编程存储器中的目标代码;
[0011] (2)编程器计算步骤(1)所述目标代码需要占用的存储空间的大小;
[0012] (3)编程器通过OTP编程接口读取一次性可编程存储器内的配置信息区,获取MTP配置字节(MTPCON),进而获得:复位地址值(RSTADDR)、下一次复位地址值(即将编程的目标代码的复位地址值)、一次性可编程存储器剩余空间大小;
[0013] (4)编程器判断一次性可编程存储器剩余空间是否足够存储步骤(1)所述的目标代码;如果一次性可编程存储器剩余空间不够存储步骤(1)所述的目标代码,则终止编程步骤;反之,则继续以下步骤;
[0014] (5)编程器将步骤(1)所述的目标代码存储在以下一次复位地址值为起始地址的存储区域内;
[0015] (6)编程器更新配置信息区中的MTP配置字节(MTPCON)。
[0016] 本发明的有益效果在于:
[0017] (1)采用本发明提供的支持一次性可编程存储器实现多次编程的微控制器装置和方法,可以灵活和充分利用一次性可编程存储器的空间,既可以一次编入容量较大的程序,也可以分多次编入容量较小的程序。
[0018] (2)采用本发明提供的方法和编程装置,用户可以批量修改、升级一次性可编程存储器内的程序,减少内嵌OTP的MCU芯片的库存风险,及时响应市场需求的变化。附图说明:
[0019] 图1为支持一次性可编程存储器实现多次编程的微控制器框图。
[0020] 图2为复位地址为0000H情况下示例目标代码的执行顺序图。
[0021] 图3为复位地址为2000H情况下示例目标代码的执行顺序图。

具体实施方式

[0022] 下面以改造一个内嵌64K字节OTP存储器的8051MCU为例,对本发明内容进一步说明。
[0023] 如图1所示的微控制器包括微控制器(MCU)核、一次性可编程(OTP)存储器、OTP编程接口。通常情况下,64K字节容量的OTP存储器,其绝对地址范围是0000H~FFFFH,MCU核用一个16位的程序计数器(PC)来指向OTP存储器的存储单元,从而能够对该存储单元进行访问,获取指令码或数据。
[0024] MCU复位以后,PC=0000H,程序从复位地址0000H开始顺序执行,除非遇到执行跳转指令、调用子程序指令、子程序返回指令、中断、中断返回等情况。
[0025] 为了将该OTP MCU改造成支持多次编程的MTP MCU,可将OTP存储器的FFFFH地址设为MTP配置字节(取名:MTPCON),将OTP存储器的FFFEH地址设为OTP状态字节(取名:OTPSTA)。这两个字节的定义如下:
[0026] MTPCON=11111111B:表示复位地址为0000H;
[0027] MTPCON=11111110B:表示复位地址为2000H;
[0028] MTPCON=11111100B:表示复位地址为4000H;
[0029] MTPCON=11111000B:表示复位地址为6000H;
[0030] MTPCON=11110000B:表示复位地址为8000H;
[0031] MTPCON=11100000B:表示复位地址为A000H;
[0032] MTPCON=11000000B:表示复位地址为C000H;
[0033] MTPCON=10000000B:表示复位地址为E000H。
[0034] OTPSTA=11111111B:表示下一次复位地址为0000H;
[0035] OTPSTA=11111110B:表示下一次复位地址为2000H;
[0036] OTPSTA=11111100B:表示下一次复位地址为4000H;
[0037] OTPSTA=11111000B:表示下一次复位地址为6000H;
[0038] OTPSTA=11110000B:表示下一次复位地址为8000H;
[0039] OTPSTA=11100000B:表示下一次复位地址为A000H;
[0040] OTPSTA=11000000B:表示下一次复位地址为C000H;
[0041] OTPSTA=10000000B:表示下一次复位地址为E000H;
[0042] OTPSTA=00000000B:表示下一次复位地址为10000H,也表示OTP存储器已经被写满。
[0043] 在MCU复位后,正式执行取指令之前,先从FFFFH地址读取MTPCON的值,根据MTPCON的值译码为对应的复位地址,并将该复位地址值保存到寄存器RSTADDR(本说明书就将RSTADDR指代复位地址值)。获得复位地址(RSTADDR)之后,PC的复位值就改为RSTADDR,并且,在响应中断时,也会将中断入口地址改为原始入口地址+RSTADDR。调用子程序和绝对跳转时,都会将从指令中获得的绝对地址加上RSTADDR后的新地址作为目标地址。
[0044] 举例来说,假设有如下一段程序:
[0045]
[0046] 其中,LOC列表示该行指令的起始地址,OBJ列为该行指令的目标代码,SOURCE列为对应源代码。
[0047] 如果MTPCON=11111111B,且这段程序存储在地址从0000H开始的OTP存储器内。则程序执行顺序如图2所示,请特别关注每条指令执行完之后对应PC值的变化。复位时,PC会以0000H+RSTADDR作为初始值;当绝对跳转(LJMP)、调用子程序(LCALL)时,都会将从指令中获得的绝对地址加上RSTADDR后的新地址作为目标地址。
[0048] 如果MTPCON=11111110B,且这段程序存储在地址从2000H开始的OTP存储器内。则程序执行顺序如图3所示。虽然RSTADDR=2000H,但根据上述方法,依然能够将相同的目标代码正确执行。
[0049] 如果程序中有中断程序,则响应中断时,原理与复位时相同,即MCU会以原始中断向量+RSTADDR作为真正的中断入口地址赋给程序计数器(PC)。
[0050] 上述实施例举例说明了支持一次性可编程存储器实现多次编程的微控制器的原理。所述微控制器包括微控制器(MCU)核、一次性可编程(OTP)存储器、OTP编程接口;所述OTP存储器包含一配置信息区,所述配置信息区用于存储复位地址信息;所述MCU核在MCU复位时获取所述复位地址信息并将其解释为对应的复位地址值(RSTADDR);在MCU复位和响应中断时将原始复位入口地址(复位向量)或中断入口地址(中断向量)与所述复位地址值(RSTADDR)相加作为新的复位向量或中断向量、在执行调用子程序指令和绝对跳转指令时将从指令数据码中获取的绝对地址值与所述复位地址值(RSTADDR)相加赋给程序计数器(PC)。
[0051] 所述OTP编程接口对OTP存储器进行全地址访问即可。
[0052] 针对上述支持一次性可编程存储器实现多次编程的微控制器,可采取以下方法对目标代码进行编程,包括以下步骤:
[0053] (1)编程器获取即将编程到OTP存储器中的目标代码;
[0054] (2)编程器计算步骤(1)所述目标代码需要占用的存储空间的大小;
[0055] (3)编程器通过OTP编程接口读取OTP存储器内的配置信息区,获取MTP配置字节(MTPCON)和OTP状态字节(OTPSTA),进而获得:复位地址值(RSTADDR)、下一次复位地址值(即将编程的目标代码的复位地址值)、OTP存储器剩余空间大小;
[0056] (4)编程器判断OTP存储器剩余空间是否足够存储步骤(1)所述的目标代码;如果OTP存储器剩余空间不够存储步骤(1)所述的目标代码,则终止编程步骤;反之,则继续以下步骤;
[0057] (5)编程器将步骤(1)所述的目标代码存储在以下一次复位地址值为起始地址的存储区域内;
[0058] (6)编程器更新配置信息区中的MTP配置字节(MTPCON)和OTP状态字节(OTPSTA)。
[0059] 当第一次对OTP空片进行编程时,MTPCON和OTPSTA的值均为缺省的11111111B,表示复位地址为0000H,下一次编程的复位地址也是0000H。以将本说明书中举例的目标代码编入OTP存储器为例,执行以下步骤:
[0060] (1)编程器获取即将编程到OTP存储器中的目标代码;
[0061] (2)编程器计算步骤(1)所述目标代码需要占用的存储空间的大小为69字节;
[0062] (3)编程器通过OTP编程接口读取OTP存储器内的配置信息区,从而获得当前程序的复位地址为0000H、即将编程的目标代码的复位地址为0000H、OTP存储器剩余空间大小为64K字节;
[0063] (4)编程器判断OTP存储器剩余空间足够存储步骤(1)所述的目标代码;继续以下步骤;
[0064] (5)编程器将步骤(1)所述的目标代码存储在以0000H为起始地址的存储区域内;
[0065] (6)编程器更新配置信息区,将OTPSTA改为11111110B,MTPCON保持不变。
[0066] 如果下一次对该OTP进行编程时,假设目标代码的容量为10K字节,则执行以下步骤:
[0067] (1)编程器获取即将编程到OTP存储器中的目标代码;
[0068] (2)编程器计算步骤(1)所述目标代码需要占用的存储空间的大小为10K字节;
[0069] (3)编程器通过OTP编程接口读取OTP存储器内的配置信息区,从而获得当前程序的复位地址为0000H、即将编程的目标代码的复位地址为2000H、OTP存储器剩余空间大小为56K字节(64K-即将编程的目标代码的复位地址);
[0070] (4)编程器判断OTP存储器剩余空间足够存储步骤(1)所述的目标代码;继续以下步骤;
[0071] (5)编程器将步骤(1)所述的目标代码存储在以2000H为起始地址的存储区域内;
[0072] (6)编程器更新配置信息区,将MTPCON改为11111110B,OTPSTA改为11111000B。
[0073] 许多OTP存储器IP还提供额外的信息区,那么MTP配置字节(MTPCON)和OTP状态字节(OTPSTA)可以安排在信息区内,从而可获得完整的程序空间。
[0074] 另外,OTP状态字节(OTPSTA)并非必须,编程器完全可以通过对整个OTP空间进行读取和判断,从而计算出下一次复位地址值。不过,这样会大大降低多次编程的效率。因此,OTP状态字节(OTPSTA)的引入还是很有必要的。
[0075] 应该理解到的是:上述实施例只是对本发明的说明,而不是对本发明的限制,任何不超出本发明实质精神范围内的发明创造,均落入本发明的保护范围之内。