51系列单片机资源有限,当开发者面对很复杂的控制任务时,51单片机就力不从心了。在这种情况下,用户都能够选用比较高档的单片机机型,比如ARM系列32位单片机等来完成目标控制的任务。还有一种选择方案,就是采用51单片机多机系统方案,用分散控制的方法来实现最终的复杂目标控制任务。
在多机系统的实现过程中,首先要解决的就是多机之间的相互通信连接问题,以保证数据在单片机之间的高效、可靠的传递。MCU之间的通信功能是多机系统实现的基础,也是多机系统可靠运行的关键。
SPI接口最大能够给大家提供1 Mb的串行数据传输能力。理论上,比传统的串行通信接口RS232通信速率高得多,因此它很适合多CPU系统中的CPU之间的数据交换,绝大多数情况下,能够很好的满足通信需求。
与RS232不同的是,SPI采用的是移位寄存器方式实现串行通信的,SPI工作方式如图1所示。
其工作过程是:主机对SPI接口的写数据操作完成后,SPI启动数据发送,数据就从主机的MOSI引脚移位输出,按位移位到从机中;一个字节传输完毕后,SPI接口传输标志置位,供软件开发者测试控制编程。由于每位数据传输最快只需要一个机器周期,故其通信速率很快。
这种通信方式,决定了SPI只可以在一定程度上完成近距通信,通常通信距离为数十公分,不超过1 m,而且 SPI的通信双方对通信过程的控制能力比较弱,在系统模块设计时要保证通信可靠性,一定要采用固定主从、连续收发的工作模式。
而UART方式对通信过程的控制能力较强,可以是互为主从、随机收发的工作模式。由于这个区别,决定了SPI的通信编程与传统的RS232有本质的区别。在编程中,应当明确地定义系统中谁是主机,谁是从机,在系统工作过程中,不得变更。并且,所有的通信过程,都是由主机发动。否则,很难保证通信的可靠性。
采用的单片机是NXP公司的P89V51RD2,其内部集成有大容量的存储器(64 KB Flash、1 KB RAM),除此之外,还集成有3个定时计数器、UART、PCA、WDT等丰富的接口。它是一款性价比较高的51单片机,为复杂的目标控制提供了物理支持。
其内部也集成了SPI通信接口,由于SPI每位数据传输最快只需要一个机器周期,如果单片机系统采用12 MHz晶振,则传输1位数据,最短只需要1μs。而采用支持RS232标准的UART接口,若以最高9 600 bps波特率通信,传输1位数据需要104μs。SPI快速的数据传输能力,为用户编制复杂的通信协议提供了支持。
SPI通信虽然传输速率高,但由于其有主机、从机角色固定,连续传输的特点,不足以满足大多数用户的通信要求。比如,SPI通信只能由主机单向发动,用户怎么可以在一定程度上完成主从双方的数据双向传输呢?再如,SPI通信工作过程是连续的,通信双方又怎样实现数据的随机收发呢?SPI接口仅提供了一种基本的通信机制,用户无法直接用。用户要使用SPI接口实现两机数据的随机双向交换,就必须编制通信协议。SPI双机电气连接图如图2所示。
综上所述,SPI基本通信协议构造的目的是要满足通信双方双向数据传递、数据随机收发的要求。