您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 5串行接口及应用3(TWI).
5.4两线串行接口TWI5.4.1TWI主要特点•简单,但是强大而灵活的通讯接口,只需要两根线•支持主机和从机操作•器件可以工作于发送器模式或接收器模式•7位地址空间允许有128个从机•支持多主机仲裁•高达400kHz的数据传输率•可以抑制总线尖峰的噪声抑制器•完全可编程的从机地址以及公共地址•睡眠时地址匹配可以唤醒AVR1、两线串行接口总线定义TWI协议允许系统设计者只用两根双向传输线就可以将128个不同的设备互连到一起。这两根线一是时钟SCL,一是数据SDA。外部硬件只需要两个上拉电阻,每根线上一个。所有连接到总线上的设备都有自己的地址。TWI协议解决了总线仲裁的问题。器件1器件2器件3器件nVccR1R2SDASCL图5.9TWI总线的连接表5.5TWI词汇2、TWI的电气连接两根线都通过上拉电阻与正电源连接,TWI兼容的器件的总线驱动都是漏极开路或集电极开路的,TWI器件输出为“0”时,TWI总线会产生低电平。当所有的TWI器件输出为三态时,总线会输出高电平,允许上拉电阻将电压拉高。注意,为保证所有的总线操作,凡是与TWI总线连接的AVR器件必须上电。3、TWI的传输数据(位)TWI总线上数据位的传送与时钟脉冲同步。时钟线为高时,数据线电压必须保持稳定,除非在启动与停止的状态下。图5.10数据有效性4、START/STOP状态主机在总线上发出START信号启动数据传输,在总线上发出STOP信号停止数据传输。在START与STOP状态之间,需要假定总线忙,不允许其它主机控制总线,特例是在START与STOP状态之间发出一个新的START状态。如下所示,START与STOP状态是在SCL线为高时,通过改变SDA电平来实现的。图5.11启动、停止和重启动状态5、地址包格式在TWI总线上传送的地址包均为9位,包括7位地址位、1位READ/WRITE控制位与1位应答位。如果READ/WRITE为1,则执行读操作;否则执行写操作。从机被寻址后,必须在第九个SCL(ACK)周期通过拉低SDA作出应答。若该从机忙或有其它原因无法响应主机,则应该在ACK周期保持SDA为高。然后主机可以发出STOP状态或REPEATEDSTART状态重新开始发送。地址包包括从机地址与分别称为SLA+R或SLA+W的READ或WRITE位。6、数据包格式在TWI总线上传送的数据包为9位长,包括8位数据位及1位应答位。在数据传送中,主机产生时钟及START与STOP状态,而接收器响应接收。应答是由从机在第9个SCL周期拉低SDA实现的。如果接收器使SDA为高,则发出NACK信号。接收器完成接收,应该在收到最后的字节后发出NACK来告知发送器。图5.13数据包格式7、将地址包和数据包组合为一个完整的传输过程发送主要由START状态、SLA+R/W、至少一个数据包及STOP状态组成,可以利用SCL的线与功能来实现主机与从机的握手。图5.14说明了典型的数据传送。注意SLA+R/W与STOP之间传送的字节数由应用程序的协议决定。图5.14典型的数据传送8、多主机总线系统,仲裁和同步TWI协议允许总线上有多个主机。特别要注意的是即使有多个主机同时开始发生数据,也要保证发送正常进行。多主机系统中有两个问题:只能允许一个主机完成传送。当其余主机失去选择权后应停止传送,这个过程称为仲裁。当竞争中的主机发现其仲裁失败,应立即转换到从机模式检测是否被获得总线控制权的的主机寻址。不同的主机可能使用不同的SCL频率。为保证传送的一致性,必须设计一种同步主机时钟,这会简化仲裁过程。5.4.2TWI模块综述TWI模块由几个子模块组成,如图5.17所示。所有位于粗线之中的寄存器可以通过AVR数据总线进行访问。图5.17TWI模块概述5.4.3总线接口单元该单元包括数据与地址移位寄存器TWDR,START/STOP控制器和总线仲裁判定硬件电路。5.4.4地址匹配单元地址匹配单元将检测从总线上接收到的地址是否与TWAR寄存器中的7位地址相匹配。5.4.5控制单元:控制单元监控TWI总线,并根据TWI控制寄存器TWCR的设置作出相应的响应。5.4.6使用TWIAVR的TWI接口是面向字节和基于中断的。在字节发送和接收过程中,不需要应用程序的干预。TWCR寄存器的TWIE位和SREG寄存器的全局中断允许位一起决定了应用程序是否响应TWINT标志位产生的中断请求。1、TWI寄存器设置(1)TWI比特率寄存器(TWBR)Bits7..0–TWI比特率寄存器TWBR为比特率发生器分频因子。比特率发生器是一个分频器,在主机模式下产生SCL时钟频率。(2)TWI控制寄存器(TWCR)Bit7–TWINT:TWI中断标志Bit6–TWEA:使能TWI应答Bit5–TWSTA:TWISTART状态标志Bit4–TWSTO:TWISTOP状态标志Bit3–TWWC:TWI写碰撞标志Bit2–TWEN:TWI使能Bit1–Res:保留Bit0–TWIE:使能TWI中断(3)TWI状态寄存器(TWSR)Bits7..3–TWS:TWI状态Bit2–Res:保留Bits1..0–TWPS:TWI预分频位(4)TWI数据寄存器(TWDR)Bits7..0–TWD:TWI数据寄存器(5)TWI(从机)地址寄存器(TWAR)•Bits7..1–TWA:TWI从机地址寄存器其值为从机地址。•Bit0–TWGCE:使能TWI广播识别置位后MCU可以识别TWI总线广播。TWI数据传输过程中的规则总结如下:当TWI完成一次操作并等待反馈时,TWINT标志置位。直到TWINT清零,时钟线SCL才会拉低。TWINT标志置位时,TWDR寄存器必须载入下一个总线周期中要发送的值。当所有的TWI寄存器得到更新,而且其它挂起的应用程序也已经结束,TWCR被写入数据。写TWCR时,TWINT位应为置位状态。对TWINT写“1”清除此标志。TWI将开始执行由TWCR设定的操作。1、数据传输模式TWI可工作于4个不同的模式:主机发送器(MT)、主机接收器(MR)、从机发送器(ST)及从机接收器(SR)。同一应用程序可以使用几种模式。2、主机发送模式为进入主机模式,必须发送START信号。紧接着的地址包格式决定进入MT或MR模式。如果发送SLA+W进入MT模式;如果发送SLA+R则进入MR模式。本节所提到的状态字均假设其预分频位为“0”。(1)通过在TWCR寄存器中写入下列数值发出START信号:TWEN必须置位以使能两线接口TWSTA必须置“1”来发出START信号TWINT必须置“1”来对TWINT标志清零TWI逻辑开始检测串行总线,一旦总线空闲就发送START。接着中断标志TWINT置位,TWSR的状态码为0x08。(2)为进入MT模式,必须发送SLA+W,可对TWDR写入SLA+W来实现。完成此操作后软件清零TWINT标志,TWI传输继续进行。在TWCR寄存器中写入下述值完成此操作:当SLA+W发送完毕并接收到确认信号,主机的TWINT标志再次置位。此时主机的TWSR状态码可能是0x18、0x20。SLA+W发送成功后可以开始发送数据包,通过对TWDR写入数据实现。(3)TWDR只有在TWINT为高时方可写入。否则,访问被忽略,寄存器TWCR的写碰撞位TWWC置位。TWDR更新后,TWINT位应清零后继续传送。通过对TWCR寄存器中写入下述值完成操作:(4)这过程会一直重复下去,直到最后的字节发送完且发送器产生STOP或REPEATEDSTART信号。STOP信号通过在TWCR中写入下述值实现:(5)在REPEATEDSTART(状态0x10)后,两线接口可以再次访问相同的从机,或不发送STOP信号来访问新的从机。REPEATEDSTART使得主机可以在不丢失总线控制的条件下在从机、主机发送器及主机接收器模式间进行切换。REPEATEDSTART信号通过在TWCR中写入下述值实现:表:主机发送模式的状态码表主机发送模式的状态码(续表)典型数据传输中应用程序与TWI的接口(数据手册P171)3、主机接收模式在主机接收模式,主机可以从从机接收数据。为进入主机模式,必须发送START信号。紧接着的地址包格式决定进入MT或MR模式。如果发送SLA+W进入MT模式;如果发送SLA+R则进入MR模式。表:主机接收模式的状态码表主机接收模式的状态码(续表)4、从机发送模式如图5.20:从机发送模式下的数据传输器件1器件2器件3器件nVccR1R2SDASCL从机发送主机接收(1)启动从机发送模式,TWAR与TWCR设置:(2)前7位是主机寻址时从机响应的TWI接口地址。若LSB置位,则TWI接口响应广播地址0x00。否则忽略广播地址。TWEN必须置位以使能TWI接口。TWEA也要置位以便主机寻址到自己(从机地址或广播)时返回确认信息ACK。TWSTA和TWSTO必须清零。初始化TWAR和TWCR之后,TWI接口即开始等待,直到自己的从机地址(或广播地址,如果TWAR的TWGCE置位的话)出现在主机寻址地址当中,并且数据方向位为“1”(读)。然后TWI中断标志置位,TWSR则包含了相应的状态码。如果在传输过程中TWEA复位,TWI接口发送完数据之后进入状态0xC0或0xC8。接口也切换到未寻址从机模式,忽略任何后续总线传输。从而主机接收到的数据全为“1”。如果主机需要附加数据位(通过发送ACK),即使从机已经传送结束,也进入状态0xC8。TWEA复位时TWI接口不再响应自己的从机地址,但是会继续监视总线。一旦TWEA置位就可以恢复地址识别和响应。也就是说,可以利用TWEA暂时将TWI接口从总线中隔离出来。在除空闲模式外的其它休眠模式时,TWI接口的时钟被关闭。若使能了从机接收模式,接口将利用总线时钟继续响应广播地址/从机地址。地址匹配将唤醒CPU。在唤醒期间,TWI接口将保持SCL为低电平,直至TWCINT标志清零。当AVR时钟恢复正常运行后可以发送更多的数据。显然如果AVR设置为长启动时间,时钟线SCL可能会长时间保持低,阻塞其它数据的传送。当MCU从这些休眠模式唤醒时,和正常工作模式不同的是,数据寄存器TWDR的数据并不反映总线上出现的最后一个字节。表5.9:从机发送模式的状态码其他状态:有两个状态码没有相应的TWI状态定义。状态0xF8表明当前没有相关信息,因为中断标志TWINT为“0”。状态0x00表示在串行传输过程中发生了总线错误。当START或STOP出现在错误的位置时总线错误就会发生。这将导致TWI接口进入未寻址从机模式、标志TWSTO被清零(TWCR的其他位不受影响),以及SDA和SCL被释放,但是不会产生STOP。表5.10其它状态码将几个TWI模式组合到一起:在某些情况下,为完成期望的工作,必须将几种TWI模式组合起来。例如从串行EEPROM读取数据。典型的这种传输包括以下步骤:1.传输必须启动2.必须告诉EEPROM读取的位置3.必须完成读操作4.传送必须结束注意数据可从主机传到从机,反之也可。首先主机必须告诉读从机读取实际的位置,因此需要使用MT模式;然后数据必须由从机读出,需要使用MR模式,但传送方向必须改变。在上述步骤中,主机必须保持对总线的控制,且以上各步骤应该自动进行。如果在多主机系统中违反这一规则,即在第二步与第三步之间其它主机改变EEPROM中的数据指针,则主机读取的数据位置是错误的。传送方向改变是通过在发送地址字节与接收数据之间发送REPEATEDSTART信号来实现的。在发送REPEATEDSTART信号后,主机继续保持总线的控制权。下图给出传送的流程图(从机读流程)。例5.14在读方式下往从器件写入一个地址字节。voidf_I2cWriteAdd_R(unsignedcharuc_I2CAdd)//写从器件地址和读方式{TWDR=(uc_I2CAdd);TWCR=(1TWINT)|(1TWEN);//写数据到TWDR
本文标题:5串行接口及应用3(TWI).
链接地址:https://www.777doc.com/doc-2929026 .html