宋庆华,宋庆国
(1.中国电子科技集团公司第13研究所,石家庄 050051;2.石家庄聆风畅想信息技术有限公司,石家庄 050000)
SPMC65P的算法设计与实现
宋庆华1,宋庆国2
(1.中国电子科技集团公司第13研究所,石家庄 050051;2.石家庄聆风畅想信息技术有限公司,石家庄 050000)
一次性编程(OTP)单片机具有一次性编程、经济实用、安全可靠、适合量产用户等特点。在充分研究了OTP版单片机芯片的程序存储器位元的结构特点、工艺特性、烧写技巧的前提下,针对6502CPU内核兼容型单片机的特殊性和专用烧写器操作流程的特殊性,规划了一种前所未见的算法设计和解决方案,解决了如何重复烧写和高效利用的实际问题。对于此类单片机的应用项目开发者特别具有启发作用和指导意义,对于其他流派OTP单片机的重复利用也会有借鉴意义。
单片机;烧写器;重复烧写;算法设计
对于专业人员把调试成功的用户程序烧写到单片机内部的程序存储器,是单片机应用开发过程后期的必不可少的一道工序。对于初学者在没有专业仿真器的情况下,采用“盲调法”(或叫烧试法)也可以达到实时检验用户程序和用户电路的基本目的。
针对窗口式电子可编程只读存储器(EPROM)单片机成本高、离线烧写、紫外线擦除等缺点,美国MicroChip公司率先推出价格低廉的OTP单片机PIC12C/16C系列,获得极大成功,随后许多世界著名公司也纷纷推出此类产品。比如, ELAN的EM78P系列,Holtek的HT46R/47R/48R/49R系列,Philips的P87C/P87LPC系列,NS的COP8系列,Hyundai的GMS97C/97L/87C系列,ST的ST62T系列,TI的MSP430P系列,Zilog的Z86E系列,SONiX的SN8P系列,MAXIM-DALLAS的DS87C系列,FreeScale的MC68HC705/MC68HC708/MC68HC711系列,MDT的MDT系列等。
其实OTP型就是不开天窗的EPROM型,它没有擦除手段,所以只供用户烧写一次。本文中讲解的样板机型SPMC65P系列就属于此类产品。虽然SPMC65P单片机的价格低廉(零售价不足10元),但是对于处于学习和演练阶段的初学者和开发者来说,如果烧写一次试验程序就报废一颗,多次积累下来也是一笔不小的代价。那么,能否通过精心安排和巧妙变通,把OTP版的SPMC65P单片机进行多次重复利用呢?答案是可行的!
凌阳科技最新推出的SPMC65系列单片机属于8 位的通用单片机系列,是针对家电产品以及工业控制领域的高抗干扰性、高性价比的工业级芯片。SPMC65系列单片机提供了从低档到高档一系列产品,以满足客户的不同需求,包括不带模/数转换器(ADC)的输入/输出(I/O) 控制型单片机、带ADC的I/O 控制型单片机等。SPMC65系列采用的8位通用CPU内核是凌阳公司在6502的基础上改进后的CPU内核(称为65B02),除了支持6502的全部指令之外,还扩充了一些位操作指令。
整个SPMC65系列的所有单片机型号,其硬件结构、寄存器的映射关系等都是相同的,不同的只是硬件模块的删减。SPMC65系列单片机根据片内资源的情况,目前划分了两大类芯片[1]:(1)不带ADC的通用单片机系列;(2)带ADC 的通用单片机系列。本文将以SPMC65P2408A(以下简称2408A)单片机为例,它是目前SPMC65系列上市型号中资源较全的一种芯片。其突出特点是内部资源丰富、性价比非常高、电磁兼容性好。
目前已经发现中国台湾和中国大陆地区出现了十余家生产以6502为CPU内核(或兼容6502CPU)的单片机的微电子公司,凌阳公司就是其中的典型代表。
在构思将一次性烧写型单片机变通为多次重复利用的实施方法时,需要精心分析和周密考虑以下几个方面。
3.1 OTP存储位元的特性
此类存储器的每个存储位元(Cell),也就是能够存储一位二进制数的最小单位,其结构是由一个浮动栅极场效应晶体管构成的。这个场效应管的浮栅是一个与周围绝缘的孤岛形导体,利用该导体内部是否存在积累电荷来记录一个比特数据。在原始状态或空白状态下,导体内没有蓄积电荷,场效应管处于截止状态,其漏极呈现高电平,以此来表示存储位元中存储的是一位“1”。在利用高电压进行烧写操作时,如果写入的是“1”,则场效应管不发生任何改变;如果写入的是“0”,则会在高电压激发下使一些载流子击穿绝缘层而进入场效应管的浮栅导体,这样就在导体内部形成一定的蓄积电荷,使得场效应管变为导通状态,其漏极呈现低电平,以此来表示存储位元中存储的是一位“0”。
每个存储位元具有以下的天然特性[2]: (1)在原始状态或空白状态下,本来的内容为1; (2)如果原来内容是1,在烧写0时,内容变为0; (3)如果原来内容是1,在烧写或重复烧写1时,内容不变,等于没写; (4)如果原来内容是0,在烧写或重复烧写0时,内容不变,等于没写; (5)如果原来内容是0,在烧写或重复烧写1时,内容不变,等于没写; (6)一旦写入0后,其内容再也无法恢复为1(空白值)。
由存储位元的特性可以总结出一个结论:OTP存储位元在1的基础上烧写0的次数只提供“1次”机会,而在1的基础上烧写1,或在0的基础上烧写0或1的次数都不受限制。
3.2 单片机的指令编码特点
SPMC65P指令系统的所有182条指令[1],其操作码字段统统都是利用8位二进制数编码的(并且指令总长度不固定)。8位二进制数码理论上最多可以表达28=256种不同的编码状态,实际上182条指令仅利用了其中的一部分。其中有2种特殊的编码在此需要引起特别的注意,那就是全1的“FFH”和全0的“00H”。前者对应着OTP存储器单元的空白状态,后者对应着OTP存储器单元的所有存储位全部被改写。
(1) 机器码为“FFFFH”的指令是“SET $FF,7”,既是一条2字节指令,也是一条位操作指令,也是一条把bit7置1的指令,还是一条携带着字节单元地址编码的指令。其实现的具体功能是把0页RAM的FFH单元的bit7给设置为1,并且不影响任何标志位。如果保留随机存取存储器(RAM)的FFH单元不用,那么,就可以认为这条位操作指令不会产生任何影响或者没有带来任何后果,只不过仅耗费2个系统周期的执行时间而已。
需要特别注意:操作码字段为“FFH”的指令也必然是一条2字节的“SET aa,7”。当CPU遇到FFH时,会自动顺延再提取1个字节,作为SET指令的第2字节。即把FFH邻接的高地址单元内容“aa”,提取出来作为被SET指令进行位操作的目标字节单元(aa为随机编码,这里应该是用户程序中第1条指令编码的第1个字节内容)。假若这样一条指令被执行,不仅指令本身带来破坏,而且更重要的是破坏了用户程序代码的本来提取顺序,导致用户程序不能被正常执行。因此,必须设法避免上述情况发生。
(2) 机器码为“00H”的指令是“BRK”,这是一条单字节的软件中断指令。尽管在凌阳公司公布的SPMC65P单片机产品手册中[1]的资料层面上删除了该指令,但是在语言工具层面上以及硬件芯片层面上,该指令仍然是存在的。该指令一旦被CPU执行,将会进入可屏蔽中断服务程序。为了回避该指令带来的负面影响,应该尽量避免执行到BRK指令。
在被烧写的用户程序中,合理地安排和填充上述2种指令代码,是重复利用OTP单片机的算法基础。
3.3 2408A片载OTP的分布特点
2408A单片机的OTP EPROM存储器,其宽度为8 bit、长度为8212=4 + 4 + 12 + 8 186 + 6个字节单元。如果按功能划分,可以分解为5个功能区段[2]。从低地址到高地址依次分别是:(1)4字节存放系统配置字节(7FE0H ~ 7FE3H);(2)4字节芯片串号(7FF0H ~ 7FF3H);(3)12字节存放产品信息(7FF4H ~ 7FFFH);(4)8 186(即8K - 6)字节用于存储程序代码(E000H ~ FFF9H);(5)6字节顺序存放3个用户矢量,NMI矢量、复位矢量和IRQ矢量(FFFAH ~ FFFFH)。
这些OTP存储器的功能区段与Q-Writer和FortisIDE的操作界面的对应关系,归纳如下:
(1) 系统配置字节:是在FortisIDE开发界面中由用户进行设置的(其中的加密位除外)。在如图1所示的项目设置对话框,当中的Mast Option卡页,对于其中6个选项的设置,将会记录到OTP中对应的4个系统配置字节中。FortisIDE开发环境自动对于这些选项进行了默认设置,其对应的系统配置字节值为:7FE0H~7FE3H=E7H,FFH,FEH,FFH。
图1 Mast Option卡页
(2) 芯片串号:是在Q-Writer烧写器操作界面中由用户进行设定的。Q-Writer系统默认的芯片串号值为:7FF0H~7FF3H=FFH,FFH,FFH,FFH。
(3) 产品信息:也是在Q-Writer烧写界面中由用户进行设定的。Q-Writer系统默认的12字节产品信息值为:7FF4H~7FFFH=FFH,FFH,……,FFH。
(4) 程序代码:就是在FortisIDE开发界面中,利用汇编器和连接器对源程序(.asm)进行汇编和连接之后所生成的机器码程序(.bin)。
(5) 用户矢量:在FortisIDE开发环境下,始终作为源程序中不可缺少的一个组成部分,并且以一个独特的逻辑段——矢量段的面貌出现在源程序中。在汇编、连接之后将被固定地定位到地址最高的FFFAH ~ FFFFH的6个字节单元中。
(6) 加密信息位:位于系统配置字节空间的加密位具有特殊性。将其改写为“0”来实施程序保护的唯一方法是,在Q-Writer界面中设置了一条加密命令“Secure”。
3.4 烧写器的工作特点
凌阳科技公司为SPMC65准备的套装开发工具——仿真烧写一体化开发装备,采用的是“一套硬件装备配合两套支持软件”的搭配方式[2]。即支持仿真器功能的PC机端软件为FortisIDE,支持烧写器功能的PC机端软件为Q-Writer。
(1) 烧写器需要与其支持软件Q-Writer相互配合才能工作。
(2) 在Q-Writer烧写界面中不能在下传和上传程序窗口内修改程序代码。
(3) 在烧写过程中,Q-Writer是把一个单片机内部的所有OTP单元划分为2个相对独立的部分,分别利用2条操作命令(Program和Secure),并且分别经历2次不同的烧写活动来单独实现烧写的。
(4) 对于一次代码烧写活动,烧写器总是把除了加密信息之外的所有OTP单元全部烧写一遍,而并不管具体程序的代码长度是多大。
(5) 在一次代码烧写过程中,总是从低地址到高地址的OTP单元依次逐个单元烧写的。
(6) 在代码烧写过程中每烧写完一个字节单元,都会再读回到上传缓冲区中来,并且与下传缓冲区的原始代码字节进行逐个比较。只有所有OTP单元完全对应相同才会宣告成功。
(7) 在伴随烧写过程所同步进行的比较活动中,如果发现某一个OTP单元内容不同于下传缓冲区的原始代码,则会宣告失败。
(8) 只要发现有任何一个OTP单元烧写失败就会立刻中途停止,同时也就放弃了对于后面高地址单元的烧写行为。
(9) 由于无论操作模式如何定义,自动烧写命令Function>Auto Run都是从空检操作开始的。只有芯片空白时才能够继续后面的烧写等操作,因此,在对于非空白片进行非首次的重复烧写时,该命令绝对不能使用!
针对OTP本身的固有特性,顺势而为,借力施力,就可以达到重复利用的目的。实质上,一片OTP单片机被重复利用的过程,就是在一个较大的OTP存储空间内,多次布局一些较小的实验程序代码的过程,其重复利用的效率和质量,就取决于对所有OTP空间重复布局方法的好坏程度。
2408A单片机具有的OTP,其主体部分的容量为8 kB。重复烧写的实现方法主要就是采取分块措施,来重复利用这8 kB的OTP。分割方案如图2所示。
图2 2408A的OTP分割方案
把8kB的OTP从低地址到高地址分割为一大一小的2块。大块为7 680字节,用于分段分次烧写程序代码;小块为512字节,用于分段分次烧写一条中断程序入口指令JMP。
这里设计的OTP分割方案,暂时没有考虑利用率极低的非屏蔽中断NMI。假如单片机应用项目中确实有必要启用NMI功能,在本方案的基础上实现起来也很容易。例如,将大块末尾的0.5 kB再分离出来,安置NMI服务程序的入口指令;可以参照可屏蔽中断程序的布局,及其IRQ中断矢量的设置等处理手法。
尽管“JMP xxxx”指令的代码长度只有3个字节,但是这里每次烧写时还是为它分配了4字节,以避免SET指令带来的破坏。同理,当用户代码长度为奇数时,为了凑成偶数,就在程序开端添加一条空操作指令“NOP”(也可以在程序的任何部位插入1条NOP)。
如果按照如图2所示的分割方案,1片2408A单片机最多可以提供126次的烧写机会。理由是,(512-6)字节÷4字节/次=126次(取整)。如果一片2408A单片机的市场价为8元人民币,均摊到每次试验的成本也就仅6分多钱。况且,开发一个小型项目也许用不着烧试这么多次。
如果在按照前面的一些方法重复利用OTP单片机的过程中,当剩余的OTP存储器空间只有2 kB(甚至1 kB)左右时就停止烧试。也就是不要再继续把该单片机用作练习品,而是把它保留起来以用于烧写成熟程序,即把它当作项目最终定型的单片机使用。具有2 kB程序空间的单片机,还是能够满足大部分小型电子产品项目的需要。如此以来,前面多次烧试的成本就几乎可以被忽略掉。这就是作者专门为广大SPMC65单片机初学者、应用开发者设计的一种“0成本OTP重复烧试算法”,对于我们这个单片机消费大国无疑具有巨大的经济效益和积极意义。
本文讲解重复利用OTP单片机的操作方法,以及重复烧写OTP单片机的算法设计。这些方法和算法都是针对SPMC65P系列单片机的特性、烧写器的工作特点、汇编器和连接器的处理方法等因素,经过作者精心设计和推敲、反复试验和改进之后探索出来的,可以供广大读者分享。
另外,作者根据自己的体验也想在此提出一点建议:如果把烧写器的操作流程和烧写算法由“逐个字节烧写后立即自动核对,不符即刻中止”修改为“整体烧写终了再自动核对,或者手动核对”,将会给重复烧写OTP型SPMC65P系列单片机带来更多的便利。
[1] 李学海.凌阳8位单片机——基础篇[M].北京:北京航空航天大学出版社,2005.
[2] 李学海.凌阳8位单片机——提高篇[M].北京:北京航空航天大学出版社,2006.
Algorithm Design and Realization of SPMC65P
SONG Qing-hua1,SONG Qing-guo2
(1.The 13th Electronic Research Institute,CETC,Shijiazhuang 050051,China;2.Shijianzhuang Leafchanson Information Technology Co.,Ltd,Shijiazhuang 050000,China)
One time programming (OTP) monolithic computer has characteristics of one-time programming,being economical and practical,safe and reliable,being suitable for mass production of user.Based on studying the structural characteristics,process characteristics,programming techniques of OTP monolithic computer chip's program memory bits,aiming at the particularity of 6502CPU kernel compatible monolithic computer and the particularity of special programmer operation processes,this paper plans an unprecedented algorithm design and solution scheme to solve the practical problems how to repeat programming and use effectively,which is of elicitation action and guidance meaning for the usage developers of such monolithic computer,and is of reference meaning for reuse of other genre OTP monolithic computers.
monolithic computer;programmer;repeat programming;algorithm design
2015-02-06
TP368
B
CN32-1413(2015)04-0116-05
10.16426/j.cnki.jcdzdk.2015.04.029