单片机以其功能强、体积小、可靠性高及价格低廉等优势,被广泛应用在各种智能化仪器、仪表以及各种小型控制系统中。但其本身结构较为简单,自身资源少,在一些较为复杂的应用系统中就显出其硬件资源不足,速度太慢等缺点。在这种情况下,往往采取双CPU或多CPU的设计方案,以弥补其不足。但是由于单片微机不像通用的微机系统具有其它总线主控设备向CPU请求总线使用申请信号输入端,以及CPU对系统中其他总线主控设备请求使用权的应答信号输出端,这就给双CPU系统的设计带来一定的困难。本文提出一种双CPU共享外部数据存储器的设计方案,并介绍了该系统的几种应用实例。
1系统的硬件设计
ATMEL公司的89系列是目前广泛应用的单片微机,图1所示的是用两片89C52和一片6264构成的双CPU共享一个外部存储器系统。其中89C52(1)为主CPU,89C52(2)为从CPU,两个CPU分别用P1.0来执行对6264地址线、数据线的控制权,6264既可作为两个CPU共享的数据存储器,也可作为两个CPU共享的程序存储器。双CPU之间的通信分别通过各自的和P1.1实现。当从CPU需获得6264的访问权时,可以通过P1.1口线向主CPU提出中断申请,主CPU同意从CPU享有对6264的控制权时,则首先使P1.0为“1”,让出总线使用权,随后通过P1.1向从CPU送出应答信号。从CPU得到主CPU的应答信号后,便将P1.0变为“0”,从而获得了总线控制权。当从CPU操作完毕,便通过P1.1通知主CPU恢复总线控制权。当从CPU正处于对总线的使用状态中,而主CPU需立即恢复控制权时,也可通过主CPU的P1.1向从CPU发出中断申请,从而恢复总线的使用权。
2应用之一(主、从处理器工作模式)
当某些单片机系统需处理的问题较多时,例如,需快速进行数据采集与分析,键盘扫描,显示与打印,执行机构的驱动信号输出等,这些操作都必须依据数据的最终处理结果,使用一个CPU来同时完成,时序上安排较困难,对故障分析和系统升级都会带来麻烦。如采用图1所示的双CPU系统就能较为轻松地完成这些任务。主CPU负责数据处理、执行机构驱动信号的输出、显示、打印等工作,而从CPU负责数据采集、键盘扫描等。从CPU将采样的数据或键盘的键值送入共享的数据存储器后便通知主CPU负责处理。主CPU则从数据存贮器中读取采集的数据或键码后进行必要的处理,再进行显示、打印,并根据需要驱动相应的执行机构。设计人员可以将主、从CPU的程序分别设计调试,只要按照预先约定的控制规则,主、从CPU的程序可以由不同的设计人员同时完成。这就节省了大量的研发时间,加快了研制进度。
3应用之二(系统软件加密)
89C52单片机其内部驻留有8KB程序存储器,自带软件加密字,以防软件被窃。但就目前技术而言,通过专用破解工具进行程序解密是轻而易举的事。一旦源程序被解密,极易被分析后进行非法修改或升级,这样整个系统就被窃取了。而采用双CPU构成的复杂系统,就可以通过软件加密的方法使非法窃取者不易获得两个CPU运行的源程序,具体方法如下:
我们可以将两个CPU运行程序中的关键程序段不放在各自89C52的内部程序存储器中,而是将这些关键的程序段通过汇编成机器码后,分别让另一个CPU以数据的形式写入外部数据存储器。如主CPU的一部分程序段汇编成机器码后,由从CPU以数据的形式写入图1中所示的6264中,数据写入后,从CPU通过P1.1向主CPU发出中断请求,主CPU响应中断,转向外部6264中取指令,而这些指令正是刚才从CPU以数据形式写入的程序段,这些程序段可以是系统程序的一些关键部分,如标志位、重要数据等,一旦主CPU执行完这些程序后,又返回至内部程序执行,同时通知从CPU程序执行完毕。从CPU随后用其他数据覆盖6264中刚才写入的程序部分。系统设计者也可以用时间估算的办法来覆盖程序,如写入6264的程序估计需执行500μs,此时从CPU可启动定时器,于1ms后将刚才写入的数据覆盖,使用这种方法可避免通过单步仿真操作来获得这些程序。用同样的方法也可对从CPU进行程序加密处理。
采用这种方法来进行软件加密的特点是:一般情况下软件窃取者很难获得全部源程序,因此,不能对系统的软件进行修改、升级或仿制,从而能有效地保护设计者的权利。
以下程序是主、从CPU进行程序加密的一个例子。首先,从CPU将主CPU执行的程序以数据格式写入6264。
4结束语
单片机双CPU构成复杂系统提高了整个系统的性能,用这种方法还可以构成两个以上CPU的复杂系统,从而完成更复杂的控制。用这种方法构成的系统实际上是一个多CPU共享资源的问题,也是对总线使用权合理分配的问题。图1所示介绍的是双CPU共享SRAM,可以设想,只要是通过总线扩展的外设,只需CPU间通过约定的通信和使用协议,同样可以实现共享。