TWI的特性
- 两线模式,简单快捷;
- 支持主机模式和从机模式;
- 允许发送数据和接收数据;
- 支持多主机通讯的仲裁功能;
- 具有低电平总线超时判断;
- 在空闲模式可唤醒系统;
- 地址可编程;
TWI串行总线采用两根线(SDA和SCL)在总线和装置之间传递信息。 一些芯片符合这个通讯协议的总线规范,自动对字节进行传输进行处理,并对串行通讯进行跟踪。TWI时钟为系统的时钟,典型TWI通讯如下图所示,最高可以支持128个不同的期间进行通讯。
数据传输格式
数据传输中数据线上的每一个位的传输均需要时钟线上的脉冲。在时钟高电平是数据线应该保持稳定,但是始发条件和终止条件时不需要遵守这个规定。
和IIC通讯协议相似,TWI定义了两个特殊的波形:起始条件和终止条件。在时钟线为高电平的时候数据线的下降沿定义为起始条件和终止条件之间,总线定义为“busy”状态。其他主机不应该去试图发起传输。在“busy”状态下,如果主机再一次发送起始条件,那么就定义为“重复起始条件”,表示主机不放弃总线的情况下开始一次新的传输。发送重复起始条件后,总线仍处于“busy”状态,一直到总线出现终止条件。
所有的数据包(包括地址包)均有9位组成,包括1个字节和一个应答位。主机负责发出时钟和起始以及终止条件,接收这负责给出应答信号。接收者通过在第九个时钟脉冲处将数据线拉低发出“应答”信号;或维持第九个脉冲处维持高电平表示“不应答”信号。当接收放接收到最后一个字节,或因为某种原因没有继续接收数据的时候,应回应“不应答”信号。TWI采用从高到低诸位进行传输。
一次传输通常包括一个起始条件,地址+读写位,一个或者多个数据包和一个终止条件。仅仅包含起始条件和终止条件的数据格式是不合通讯规则的。值得注意的是“线与”结构给主机和从机之间的握手信号提供了方便。当主机相对太快或者从机需要处理其他事物的时候,从既可以通过拉低时钟线的低电平时间,从而降低通讯频率。从机可以拉低时钟线的低电平周期但不会影响到时钟线高电平的周期。
当产生应答信号的时候,拉低SDA信号线。中断标志位置起期间,拉低SCL信号线,释放SDA信号线。中断处理完毕 后清楚TWINT标志,释放SCL信号线。
时钟同步
当多个主机同时希望控制总线的时候,总线将一句“线与”原则决定时钟线高低电平。对于所有参与传输的主机来说,定义清楚每一个时钟脉冲的起始是相当重要的。
时钟线电平的由高到低跳变导致所有参与传输的钱开始低电平计时。每一个期间及时到达自己低电平要求释放时钟线,早时钟线变为高电平之前进入高电平等待期;当所有期间均计满低电平周期,时钟线才变为高电平。之后所有期间开始对高电平进行计时,第一个计满高电平周期的期间将拉低时钟线,进入下一个时钟周期。
数据仲裁
主机只有在总线处于空闲状态的时候才能开始一次传输。两个或者多个主机可能在最小保持时间内同时发送起始条件,从而在总线上只看到一个起始条件。
由于发送起始条件的主机无法知道是否有其他主机在竞争总线,只能靠时钟高电平是读数据先的仲裁判断哪个主机占用总线。当有主机传输低电平的时候,传输高电平的主机将失去仲裁必须放弃总裁。
失去仲裁的主机将继续发送时钟,直到当前传输字节发送完毕。当两个主机同时访问一个从机的时候,可能会顺利通过地址阶段,在传输数据的时候将继续进行仲裁。这种机制要求所有的TWI器件在进行数据传输的时候可以检测数据线上的真实状态。
如果这个主机同时开启了从机模式,在发送地址阶段失去仲裁后应检测线上的地址是否与自己相匹配;如果是对自己的访问,应立即切换到从机模式,接收信息。
每次传输中,仍要检测线上的“重复起始条件”,当检测到并非自己发出的“重复起始条件”时,应立即退出当前传输。
仲裁不应发生在如下的情况:
1、重复起始条件和数据;
2、终止条件和数据;
3、重复起始条件和终止条件.
功能描述
总线接口单元
总线接口单元包括数据和地址移位寄存器(TWIDAT),开始/终止条件控制器,仲裁和总线超时检 测单元。 寄存器TWIDAT存储了即将发送的数据或地址和接收到的数据和地址。 开始/终止条件控制器负责发送和检测总线上的开始条件,重复开始条件和终止条件。 如果SH79F6441已经作为主机开始一次传输,仲裁单元将始终检测是否有仲裁发生。当失去仲裁时,控制单元可以进行合 适的动作,并产生相应的状态码。 SH79F6441在传输数据/地址时,必须在SCL由低跳高前维持数据稳定。 SH79F6441在传输ACK/NACK时,在SCL由低跳高后产生TWINT中断,并在SCL由高跳低时拉低SCL,在TWINT中断清零 时释放SCL。 SH79F6441在传输ACK/NACK信号时,若TWINT已被清零,SCL仍为高电平时,SDA产生跳变,则重新产生TWINT中断, 状态为00H。SH79F6441当前通讯终止,该状态与普通00H状态处理一致。 SH79F6441在传输ACK/NACK信号时,若TWINT未被清零,SCL仍为高电平时,SDA产生跳变,则状态直接切换到00H, 不会再次产生中断。SH79F6441作为从机进入该状态,则当前通讯终止,可发生STA开始主机传输,或重新接受STA+ADR对 自己地址的访问。SH79F6441作为主机进入该状态,则当前通讯终止,可发生STA开始主机传输,或重新接受STA+ADR对自 己的访问。 SH79F6441在当前通讯终止后,不会再参与当前传输。SH79F6441若作为主机存在,请开启EFREE功能,防止进入逻辑 死区。 SH79F6441规定总线维持高电平超过TFREE = TSYS X TWTFREE X 256(必须保证TFREE大于tSCL/2(tSCL为时钟线的周期)) 所定义的系统时钟个数时为“空闲”状态,释放总线。该功能仅适用于一个数据包传输过程中(8+1个位)。SH79F6441处于 从机发送模式,且所传输的第一个字节为低电平时适用该功能。起始条件(STA、RSTA)不适用于该功能。SH79F6441产生 中断,寄存器TWICON中的TFREE会被置位(如果控制位EFREE已置位)。 如果时钟线SCL被从机拉低时,通讯会暂时中止;而主机也没有办法将时钟线拉高。为解决此问题,TWI协议规定参与传 输的所有器件,将时钟线维持低电平超过N X TSYS(N值由TWITOUT寄存器决定)所定义的时钟个数时为“总线超时”,寄存 器TWICON中的TOUT会被置位(如果控制位ETOT已置位)。
频率生成单元
在主机模式下,可以通过寄存器TWICON的CR[1:0]分频系数以及TWIBR寄存器来设定通讯的频率。
地址匹配单元
地址匹配单元检验所收到的地址是否与寄存器TWIADR中的七位地址相匹配。如果通用地址使能拉GC被置位,也将检测是否与通用地址00H相匹配。当地址匹配的时候,控制单元将产生·1合适的动作以及相应的状态码。
控制单元
控制单元监视TWI总线,并依据控制寄存器TWICON的设置进行相应的回应。当TWI总线有需要应用层注意的事件时,TWI 中断标志被置起,标明当前事件的状态码会被写入状态寄存器TWISTA。状态寄存器TWISTA只表示TWI通讯中断产生时的通讯 状态信息;其它情况下状态寄存器内是一个用于表示没有有效状态码的状态码。在中断清除之前,时钟线将维持低电平。应用 软件可在处理完任务后才允许TWI通讯继续。
传输模式
TWI通讯是以字节为基础和中断驱动的通讯总线。诸如接收到一个字节或发送一个开始条件的所有总线事件均会产生一个 中断。所以在字节传输期间,应用软件可以进行其它的操作。需注意的是,控制寄存器TWICON中的TWI使能位ENTWI和中断 控制寄存器IEN0中的所有中断控制位EA和TWI中断控制位ETWI将共同决定TWI中断标志TWINT被置位时是否会产生中断。如 果ETWI或EA未置位,应用软件必须对TWINT标志进行枚举检测才能知道是否有TWI事件发生。 当TWINT位置起时,表示一次TWI传输已完成,等待应用软件的回应,此时状态寄存器TWISTA包含了当前的状态。应用 软件可通过寄存器TWICON和TWISTA决定TWI进行哪种通讯。 下面将分别介绍TWI通讯的四种主要模式,并对所有可能的状态码进行了描述。下图中有如下缩写:
圆形用于表示中断标志已被置起。其中的数字表示当前状态寄存器TWISTA中被掩去低三位的状态码。在TWINT被清除之 前,TWI通讯会暂停,应用软件必须决定是继续通讯还是终止当前传输。对每一个状态码,所需要的软件动作和随后的传输细 节均有描述。
主机发送模式
主机发送模式中,主机发送一系列数据到从机。为进入主机发送模式,一个开始条件,随后一个从机地址+写控制字(SLA+W) 地址包表示进入主机发送模式(MT)。 通过设置控制寄存器TWICON中的ENTWI和STA,清除STO和TWINT,TWI逻辑将检测TWI总线并在允许时发出一个开始 条件(STA)。当开始条件(STA)传输完毕,通讯中断(TWINT)被置起,状态寄存器(TWISTA)为08H,中断服务程序 应将从机地址和写控制字(SLA+W)写入数据寄存器TWIDAT。在开启下一个传输前清除TWINT标志。 当从机地址和写控制字传输完毕并收到一个“应答”信息时,中断(TWINT)被置起,状态寄存器TWISTA中有几个可能 的状态:对主机模式有18H,20H和38H,对从机模式有68H,78H和B0H。
主机接收模式
主机接收模式中,主机从从机接收一系列数据。为进入主机接收模式,一个开始条件,随后一个从机地址+读控制字(SLA+R) 地址包表示进入主机接受模式(MR)。 通过设置控制寄存器TWICON中的ENTWI和STA,清除STO和TWINT,TWI逻辑将检测TWI总线并在允许时发出一个开始 条件(STA)。当开始条件(STA)传输完毕,通讯中断(TWINT)被置起,状态寄存器(TWISTA)为08H,中断服务程序 应将从机地址和读控制字(SLA+R)写入数据寄存器TWIDAT。在开启下一个传输前清除TWINT标志。 当从机地址和写控制字传输完毕并收到一个“应答”信息时,中断(TWINT)被置起,状态寄存器TWISTA中有几个可能 的状态:对主机模式有40H,48H和38H,对从机模式有68H,78H和B0H。
从机发送模式
从机发送模式中,从机发送一系列数据到主机。为初始化从机发送模式,必须对控制寄存器TWICON和地址寄存器TWIADR 进行初始化:置位控制寄存器TWICON中的ENTWI和AA,清除STA、STO和TWINT;地址寄存器TWIADR中高7位为SH79F6441 准备相应的地址。如果GC置位,SH79F6441也将响应通用地址(00H);否则将不响应通用地址。 在TWIADR和TWICON初始化后,SH79F6441将等待总线对自己地址或通用地址(如果GC被置位)的响应。如果方向标 志位是“读”,则TWI进入从机发送模式,否则将进入从机接收模式。在地址和读标志位接收完毕后,中断标志(TWINT)置 位,状态寄存器TWISTA有效。 在传输中,如果将应答使能位“AA”清零,TWI将传送最后一个字节,并依据主机接收方发送的应答或不应答信息位进入 C0H或C8H状态。总线将切换到非地址从机模式,不在响应主机传输。从而主机接收方将接收到一串“1”。最后一个字节发送 完毕后,如果主机仍需额外的数据(传输“应答”信号),则进入C8H状态。
从机接收模式
从机接收模式中,从机从主机接收一系列数据。为初始化从机接收模式,必须对控制寄存器TWICON和地址寄存器TWIADR 进行初始化:置位控制寄存器TWICON中的ENTWI和AA,清除STA、STO和TWINT;地址寄存器TWIADR中高7位为SH79F6441 准备相应的地址。如果GC置位,SH79F6441也将响应通用地址(00H);否则将不响应通用地址。 在TWIADR和TWICON初始化后,SH79F6441将等待总线对自己地址或通用地址(如果GC被置位)的响应。如果方向标 志位是“写”,则TWI进入从机接收模式,否则将进入从机发送模式。在地址和写标志位接收完毕后,中断标志(TWINT)置 位,状态寄存器TWISTA有效。 在传输中,如果将应答使能位“AA”清零,TWI将接收最后一个字节并回应“不应答”信息。回应“不应答”可以表示当 前从机无法接收更多字节。当AA = 0时,SH79F6441无法回应对自己地址的访问;但仍然监视总线状态,并可以通过AA = 1恢 复对自己地址的相应。可以通过AA = 0暂时将SH79F6441从总线隔离。