您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于AVR单片机的双机通信三种实现方式
单片机的双机通信三种实现方式原理分析及应用比较施柏鑫北京邮电大学信息工程学院(100876)E-mail:boxin.shi@ieee.org摘要:本文基于AVR单片机ATmega16的三种硬件通信方式——SPI、USART、TWI,实现两片单片机的通信。通过分析这三种方式的硬件内部结构、寄存器的使用方法、数据传输过程及其各自的特点和扩展应用,比较他们的异同,为合理选择适当的通信方式提供了理论依据。关键词:AVR单片机、通信、SPI、USART、TWI0.引言在很多工程应用中,一片单片机往往不能达到预期的要求。这就需要两片或者两片以上的单片机协同工作。实现这一问题的核心技术是单片机之间的相互通信。Atmel公司的AVR系列单片机支持多种硬件通信方式,根据相应的通信协议,我们可以实现单片机之间高速、可靠的数据传输。本文以AVR单片机ATmega16为例,充分利用该芯片的硬件资源,不外接任何芯片,用三种方式——SPI、USART、TWI实现双机通信,并对三种通信方式的原理和应用进行分析和比较。1.串行外设接口SPI串行外设接口SPI(SerialPeripheralInterface)是由Motorola公司推出的工业标准的同步串行接口,是一种全双工、四线通信的系统。它可以用于单片机之间的互联,也可以外接支持该通信方式的外设。ATmega16的SPI接口支持7种可编程的比特率,可以设置传输结束中断标志、写碰撞标志检测,支持主机倍速模式和闲置模式唤醒[1]。两片用SPI互连的单片机有主从之分,为串行传输提供时钟信号SCK的一方是主机,接受时钟的另一方为从机。双机通信的方法是将主机和从机的四根信号线SS、SCK、MOSI、MISO直接对应相连。ATmega16的SPI内部结构框图如图1.1所示[3]。-1-内部结构框图从图中我们可以看出,ATmega16的SPI寄存器有三个:SPDR(数据寄存器),SPCR(控制寄存器)和SPSR(状态寄存器)。SPDR是一个8位可读写的移位寄存器,主要用于数据缓冲;SPCR可根据用户的定义控制中断使能、数据传送方向(从LSB开始还是从MSB开始)、主从机选择以及时钟的极性、频率和相位的选择。SPSR可以标志中断、冲突和主机倍速模式。各寄存器每一位的具体含义和具体编程方法请查阅相关手册。主从两片单片机分别设置和连接以后,就可以使用SPI端口进行“全双工”的数据传送了,即主机向从机输入信息的同时会接收到从机输出的信息。工作原理如图1.2所示[3]。图1.2SPI主从机连接的工作原理-2-了解了双机互联的工作原理以后,我们来看一下双机数据交换的时序图1.3[2]。图1.3SPI数据传输时序图从机信号SS拉低以后,在主机时钟SCK的控制下,MOSI每个时钟向从机写入1bit信息,与此同时,MISO每个时钟向主机读入1bit信息。从图中可知,每个SCK周期收发的数据为1bit,所以一个字节的传输需要8个SCK周期,并且收发是同步的,也就是前面反复强调的“全双工”。SPI接口还可以用于控制很多的外围器件,如FlashRAMAT25F512,AD转换器Max1270,DA转换器Max532,以及一些网络控制器和LCD液晶显示终端等。需要指出的一点是,SPI可以扩展为一主多从的总线结构,这需要主机有多个SS信号,所以ATmega16是不可以的。但是实际很少这样做,因为当总线上从机的个数多于一时,SPI会变得很复杂。2.通用同步异步串行收发器USART通用同步异步串行收发器USART(UniversalSynchronousandAsynchronousserialReceiverandTransmitter),也是一种常用的全双工通信系统。它只需要两根信号线就可以实现两片单片机的互联。ATmega16的USART接口的主要特点有:支持5到9个位数据位和1或2个停止位的数据格式,具有奇偶校验、数据过速检测、帧错误检测、噪声滤波功能,能响应三个独立的中断(发送、接收结束中断和数据寄存器空中断),可设置倍速异步模式和多处理器通讯模式。采用USART方式互连的两个单片机之间没有明确的主机和从机的区分,二者均可作为数据的发送方和接收方。连接时需要将两片单片机的RXD(接收数据线)和TXD(发送数据线)“交叉”相连,即单片机1的RXD连到2的TXD,1的TXD连到2的RXD。ATmega16的USART内部结构框图如图2.1所示[3]-3-内部结构有三个主要部分:时钟发生器,发送器和接收器,在图中用虚线框隔开。时钟发生器中的同步逻辑将波特率发生器和从机同步操作所使用的外部输入时钟同步起来。发送器包括一个写缓冲器,串行移位寄存器,奇偶发生器以及处理不同的帧格式所需的控制逻辑,其中写缓冲器可以保持连续发送数据而不会在数据帧之间引入延迟。接收器包括时钟和数据恢复单元、奇偶校验、控制逻辑、移位寄存器和一个两级接收缓冲器UDR,是USART模块中昀复杂的部分,其中数据恢复单元用于异步数据的接收,支持与发送器相同的帧格式,而且可以检测帧错误,数据过速和奇偶校验错误。USART主要有三个寄存器:数据寄存器UDR、控制和状态寄存器UCSR和波特率寄存器UBRR。USART发送数据缓冲寄存器和接收数据缓冲寄存器共享相同的I/O地址,称为USART数据寄存器UDR。将数据写入UDR时实际操作的是发送数据缓冲器存器,读UDR时实际返回的是接收数据缓冲寄存器的内容。UCSR又由A、B、C三个8位的寄存器构成,主要功能有:收发结束、寄存器空、数据溢出、帧错误、奇偶校验错误的状态显示,倍速模式、多处理器模式、中断使能、收发使能的设置,字符格式(数据位、停止位、奇偶校验位的个数)、同步或异步工作模式、时钟极性的选择等。波特率寄存器UBRR是一个16位的寄存器(由两个8位寄存器UBRRH和UBRRL组成),可以设置数据收发的波特率,波特率的范围是外部时钟的2、8或16分频值除以(UBRR+1),具体计算方法和分频设置请参-4-的使用手册。USART的数据传输过程与微机中常用的串行通信方式(如Intel的8251芯片)基本相同,此处不做过多的论述,请参考微机原理与接口技术的相关教材。USART的重要应用是可以通过RS232电平转换芯片(如Max232),将TTL电平转换成RS232电平。RS232是美国电子工业协会(EIA)批准的连接串行通信设备的串行通信接口标准。多数PC机都用RS232与鼠标、调制解调器、打印机以及其他的外围设备连接进行通信联络。所以,可以通过USART接口实现单片机和PC机串口的通信。另外,RS232可以实现总线结构,实现多个单片机个互连,在工业控制的各个领域有着极其广泛的应用。3.两线串行接口TWI两线串行接口TWI(TwoWireserialInterface),顾名思义是由两根信号线组成的,一根叫做SDA(serialdata,串行数据),另一根叫做SCL(serialclock,串行时钟),这是一种真正意义上的总线结构,所有的设备都连接在这两根线上,如图3.1所示[3]。图3.1TWI设备的连接ATmega16的硬件TWI接口支持7位地址128个从机的总线结构,当总线上有多个主机的时候可以支持多主仲裁。除此之外的特点还有:具有波形斜率限制器和毛刺噪声抑制器的输出驱动,可编程的从机地址、公共地址以及睡眠唤醒功能。用TWI接口使两片单片机相互通信是一种“浪费资源”的做法,它并不能发挥TWI总线的优势,具体的编程实现起来也有一定的难度。但是硬件连接却十分简单,只要将两片单片机的SDA和SCL管脚直接用导线相连即可。图3.1中的两个上拉电阻可以用ATmega16的I/O口内部上拉代替。两片互连的单片机有主从之分,与SPI类似,主机提供SCL信号,从机被主机寻址。双机互连的编程虽然比较复杂,但是通过TWI的双机互连,我们可以充分的理解用TWI协议通信的主从机各自在编程上的异同,对于TWI的四种工作模式——主机发送、主机接收、从机发送、从机接收,各自的工作原理和详细的数据传输过程均会有深刻的认识。ATmega16的TWI内部结构框图如图3.2所示[3]。-5-接口管脚。管脚的输出驱动器包含一个波形斜率限制器和毛刺噪声抑制器以满足TWI规范。比特率发生器单元在TWI主机模式时控制时钟信号SCL的周期。总线接口单元包括数据与地址移位寄存器TWDR,开始停止控制器和总线仲裁判定硬件电路。TWDR寄存器用于存放发送或接收的数据或地址。除了8位的TWDR,总线接口单元还有一个寄存器,包含了用于发送或接收应答的(N)ACK。开始停止控制器负责产生和检测TWI总线上的START、REPEATEDSTART与STOP状态。如果TWI以主机模式启动了数据传输,仲裁检测电路将持续监听总线,以确定是否可以通过仲裁获得总线控制权。如果总线仲裁单元检测到自己在总线仲裁中丢失了总线控制权,则通知TWI控制单元执行正确的动作,并产生合适的状态码。地址匹配单元将检测从总线上接收到的地址是否与TWAR寄存器中的7位地址相匹配。控制单元监听TWI总线,并根据TWI控制寄存器TWCR的设置作出相应的响应。当TWI总线上产生需要应用程序干预处理的事件时,TWI中断标志位TWINT置位。在下一个时钟周期,TWI状态寄存器TWSR更新为当前事件的状态码字。在其他时间里,TWSR的内容为一个表示无事件发生的特殊状态字。一旦TWINT标志位置“1”,时钟线SCL即被拉低,暂停TWI总线上的数据传输,让用户程序处理中断事件。TWI的五个寄存器TWAR、TWBR、TWCR、TWDR和TWSR在图3.2中用粗线的方框标示出,其主要功能在上面的结构框图分析中已经阐明,具体标志位含义和程序范例请参考手册。-6-数据传送过程[2]。图3.3一次完整的TWI数据传送过程首先由主机发送开始信号并控制时钟信号,接着主机发送一个唯一的7位从机地址,紧跟着的第8位是读/写信号位,置“0”代表从机接收,置“1”代表从机发送;接收方发出一位应答信号(ACK),然后发送方(主机还是从机发送由前面的读/写信号位决定)传输一个字节的数据;8bit数据发送完成后,接收方发出应答信号表示接收完毕。如果还有更多的字节需要传送,重复上面传送一个字节的步骤。停止位的确定有两种情况:主机发送模式下(主机向从机写入数据),主机在昀后一个字节发送完毕后,发出停止信号;主机接收模式下(主机读入从机传来的数据),主机不对昀后一个字节的传送完毕作出应答,直接发出停止信号告诉从机已完成读数据工作。了解了TWI的工作原理,可能有人会发现它和Philip的I2C总线结构非常的相似。没错,二者没有本质上的区别,只是为了避免版权问题Atmel给这种总线在AVR系列单片机上换了一个名字罢了。但这也为TWI的广泛应用创造了条件,也就是说TWI接口可以兼容市面上的各种I2C器件,比如:Atmel公司的AT24CXX系列EEPROM,Dallas公司的RTC(实时时钟)芯片DS1302,还有Philip公司的各种I2C器件等。另外,现在在定位系统中广泛应用的电子指南针用的也是这种接口。4.结语以上分析了ATmega16的三种硬件双机互连方式,针对每一种方式分别分析内部结构、寄存器作用、数据传输过程以及该通信方式的其他扩展应用。不难发现,这三种方式各具特点,很多方面存在异同。现将要点总结如下表,方便读者的深入理解并根据实际需求选择合适的通信方式。(指导教师:郭莉)
本文标题:基于AVR单片机的双机通信三种实现方式
链接地址:https://www.777doc.com/doc-315204 .html