杨镇首 李军
(广东工业大学自动化学院)
基于SPI接口的多机扩展和通信方法
杨镇首 李军
(广东工业大学自动化学院)
以一主两从的多机系统为例,介绍了一种多个微控制器柔性扩展和可靠通信的方法。基于SPI接口,外加一根地址分配控制线实现了对从机的地址分配,应用软件寻址方式和自定义通信协议实现了主机对从机的数据查询和发送。实际应用表明,该方法占用较少的I/O资源、通信速率高且稳定可靠,可推广应用于其他多机系统。
微控制器;SPI接口;多机通信;通信协议
现代测控领域中,工业电子产品往往不是孤立存在的,而是需要能够数据共享,实现多机通信的功能,因而在大多数电子产品的设计中要考虑多机扩展和通信问题。比如在各种采用微处理器的控制系统中,就要求能实现多微处理器的柔性扩展和它们之间的数据通信。本文以广泛应用于工业实时控制、通信设备、家用电器等各个领域的AVR单片机组成的一主两从系统为例,介绍一种基于SPI接口的高速可靠的多微处理器扩展和通信方法,包括该方法的实现原理、硬件连接和软件实现。
通信接口的选择关系到整个多机扩展的构成和通信方案的设计。微控制器的通信方式包括并行通信和串行通信,其中串行通信方式有SPI通信接口、UART通信接口、I2C通信接口等。在通信接口的选择中,通信的可靠性要放在首位。由于并行通信方式通道间会有互相干扰,当传输出错时,要重新传送数据,而且要求数据同时到达接收端,但往往各通道由于布线长度不一等原因难以保证真正的一致性。另外采用并行通信方式占用了较多的I/O资源,不适合于小型系统,所以本文选择了串行通信方式。基于SPI通信接口的速度较快,而且通信协议也较为简单,相对来说也比较稳定等优点,本设计就选用SPI接口来实现多机通信。
SPI接口是全双工同步串行外设接口,采用主从模式架构,支持单主多从模式应用。时钟由主机控制,在时钟移位脉冲下,数据按位传输,输入输出为全双工通信方式。SPI数据通信时的主-从连接与数据传送方式如图1所示[1]。
图1 SPI数据通信时的主-从机连接与数据传送方式
由图1可知,SPI数据传输系统是由主机和从机两部分组成;主要是由主、从双方的两个移位寄存器和主机SPI时钟发生器组成,主机为SPI数据传输的控制方。由SPI的主机将SS输出线的电平拉低,作为同步数据传输的初始化信号,通知从机进入传输状态,然后主机启动时钟发生器产生同步时钟信号SCK,预先存在两个移位寄存器中的数据在SCK的驱动下进行循环移位操作,完成主-从机之间的数据交换,传输的数据为8位,按位传输。
SPI通过一根时钟引线SCK将主机和从机同步,主机的数据由MOSI进入从机,而同时从机的数据由MISO进入主机。因此,它的串行数据交换不需要增加起始位、停止位等用于同步的格式位,直接将要传送的数据写入到主机的SPI发送数据寄存器,这个写入过程自动启动主机的发送过程。对于从机,同样在SCK的节拍下将出现在引脚MOSI上的数据逐位移到从机的移位寄存器,当接收完一个完整的数据块后,设置中断标志,通知从机这个数据块已接收完毕,同时将移位寄存器接收到的内容复制到从机的SPI接收数据寄存器。可以看出,用户编程只需在发送数据时写数据到SPI发送数据寄存器,在接收数据时读SPI接收数据寄存器,其余的移位、同步、置位收发标志等工作都由内置的SPI模块自动完成。
以一主两从的系统结构、主从都为Atmega128单片机为例,介绍多机扩展和通信方案。系统框图如图2所示,主机分别同两个从机的SPI接口相连,另外主从机间还增加了地址分配使能线AD。在理论上这种扩展方法可以实现无数个从机的扩展和通信,笔者在实际的应用中扩展到了8个从机。下面就主从机之间的通信方法作详细的介绍。
图2 系统框图
3.1 地址分配
在多机通信系统中,主机通过从机地址对各个从机进行访问,因此,要求每个从机都有唯一的地址。为确保地址的唯一性和可靠性,就必须对从机进行统一编址。
常用编址方式是将拨码开关连接在从机的I/O上,用人工拨码来实现编址。拨码开关打开和关闭分别代表着0和1,这也就代表着一定的数据,这个数据就是该从机的地址。这种硬编址方式简单且容易操作,但是占用从机的I/O资源。当从机数量增加时,用于拨码开关的I/O口也要相应地增加,而且编址需要人工操作来实现,在实际应用中很不方便[2]。
本文设计了一种软件编址方式,采用主机自动给从机分配地址的方法。在硬件上,只需在SPI通信接口的基础上增加一根地址分配使能线就能实现,如图2所示。其实现原理是:
主机通过AD线向从机1发出处理地址分配使能信号,与此同时,从机1通过AD线禁止从机2地址分配使能,保证在地址分配期间某一时刻只有一个从机进行地址信息处理。主机通过SPI接口向各从机发出地址分配信息,从机都接收到主机传来的地址信息,但此时只有从机1的地址分配是使能的,所以只有从机1对地址分配信息进行处理,通过以下时序对从机1进行地址分配:
① 主机向从机发送地址分配起始标识符‘(’,告诉从机此时进行地址分配操作,从机1向主机反馈确认信息;
② 主机向从机发送地址,从机1进行地址存储并向主机反馈确认信息;
③ 主机向从机发送地址分配结束标识符‘)’,告诉从机已完成地址分配。
主机成功对从机1进行地址分配后,主机关闭从机1的地址分配使能,从机1开启从机2的地址分配使能,同理,依照以上时序,主机完成对所有从机的地址分配。
3.2 数据查询
主机对所有的从机进行了统一编址后,每个从机都拥有了唯一的地址,这样主机和从机之间就可以进行数据查询和发送操作了。
数据查询操作时,首先主机向所有从机发出其要查询从机的地址,所有从机接到主机发来的地址后和自己的地址信息进行比较,地址匹配的从机就响应主机并将数据传给主机,这样就完成了主机对一个从机的数据查询。数据查询操作的时序为:
① 主机向从机发送数据查询起始标识符‘[’,从机以此识别为数据查询操作;
② 主机向从机发送数据查询的地址值,从机接收地址信息并和自己的地址比较,相同者才进行下面的操作,不同者就不做任何操作;
③ 对应地址的从机向主机发回数据,主机进行数据接收;
④ 从机向主机发送数据结束标识符‘]’,告诉主机数据传送结束。
依照时序,主机就可以对全部从机或者某个从机进行数据查询。
3.3 数据发送
数据发送操作时,首先主机向所有需要向其发送数据的从机发出地址信息,所有从机接到主机发来的地址后和自己的地址信息进行比较,地址匹配的从机就响应主机并做好接受数据的准备,这样就完成了主机向一个从机发送数据的过程。数据发送的时序为:
① 主机向从机发送数据及起始标识符‘<’,从机以此识别为数据发送操作;
② 主机根据从机地址发送数据,从机接收地址信息并和自己的地址比较,相同者才进行下面的操作,不同者就不做任何操作;
③ 主机向从机发送数据;
④ 结束后主机向从机发送数据结束标识符‘>’,告诉从机数据传送结束。
依照时序,主机就可以根据需要向全部或者某个从机进行数据发送。
根据以上对多机扩展和通信方法的介绍,我们可以进入软件实现。图3和图4分别给出了主从机中地址分配部分的程序流程图,根据前面介绍的原理,主从机的数据查询和发送程序也类似于地址分配部分,限于篇幅不再赘述。
本文介绍了一种多机扩展和通信的实现方法,该方法在标准SPI接口的基础上加上一根普通I/O线并采用软件编址的方式来实现了对从机的地址分配,与硬件编址方式比较更节省I/O资源且简单并容易实现,理论上这种方法扩展的从机数量可达到无数个。
图3 地址分配程序流程图(主机)
图4 地址分配程序流程图(从机)
基于SPI接口,数据查询发送的通信速率更快,理论上可以达到从机CPU总线频率的四分之一,笔者在扩展的8个从机系统中SPI速率完全可以达到从机总线频率的最大值即四分之一。在扩展和通信中使用了自定义通信协议,更确保了通信的安全可靠。相比于文献[2]~[4]介绍的方法,本文所提出的多机扩展和通信方法更为简单可行、安全可靠。
[1] 马潮.高档8位单片机ATmega128原理与开发应用指南[M].北京:北京航空航天大学出版社,2004:123-130.
[2] 胡文,胥布工.一种PLC扩展板寻址方法的实现[J].制造业自动化,2003(11):36-38.
[3] 赵学军.基于多机SPI协议的多机通信[J].单片机与嵌入式系统应用,2006(7):67-68.
[4] 张志利.基于RS232协议的单片机多机通信网络研究[J].自动化技术与应用,2009,28(4):54-55.
A Method of Multi-Microcontroller Expansion and Communication Based on SPI Interface
Yang Zhenshou Li Jun
(School of Automation of Guangdong University of Technology.)
Taking a multi-microcontroller system with one host microcontroller and two slave microcontrollers as example, a method of multi-microcontroller’s flexible expansion and reliable communication is introduced in this paper. Based on SPI interface, the distribution of the slave address is realized with an additional address assignment control line. The dates receiving and sending between host microcontroller and slave are also realized with using the software addressing and author's communication protocol. Practice has proved that this method takes up less I/O resources, has higher communication rate and reliability communication, and can be wildly used.
Microcontroller; SPI Interface; Multi-Microcontroller Communication; Communication Protocol
杨镇首,男,1988生,硕士研究生,主要研究方向:嵌入式测控装置。
李军,男,1962生,副教授,硕士生导师,主要研究方向:嵌入式测控装置,智能控制技术。