ATMEL公司的技术文档,在学习的过程中,写下这篇笔记。
TWI接口是两线制的串口,与I2C接口一样,2线的名称都是SDA(串行数据地址线)和SCL(串行时钟线)。在与设备相连时,2线都需要有上拉
电阻相连。如果设备输出为高阻时,上拉电阻将电平拉高。
一、地址包格式
所有在TWI总线上传送的地址包均为9位,包括7位地址位,1个R/W控制位和1个应答位,如果R/W为1,则执行读操作。如果R/W为0,则执行
写操作。
从机被寻址后,必须在第9个SCL(ACK)周期通过拉低SDA做出应答,若从机忙或者无法响应主机,则应该在ACK周期保持SDA为高。然后主机
可以发出STOP状态或者REP START状态重新开始发送。地址包包括从机地址和称为SLA+R或者SLA+W的READ或者WRITE位。
地址字节的MSB首先被发送。
所有1111xxxx的地址均保留,以便将来使用。
二、数据包格式
所有在TWI总线上传送的数据包均为9位,包括8个数据位和一个应答位。在数据传送中,主机产生时钟及START与STOP状态,而接收器响应
接收。应答是ACK在第9个SCL周期拉低SDA实现的。如果接收器使SDA为高,则发送NACK信号。如果接收器由于某种原因不能接受更多数据,应在
最后一个数据字节后发出NACK信号告诉发送器停止发送。
数据的MSB首先发送。
三、地址包和数据包组合成一个完整的传输过程
发送主要由START状态,SLA+R/W,至少一个数据包和STOP状态组成。只有START与STOP状态的空信息是非法的。
四、比特率发生单元
TWI工作于主机模式时,比特率发生器控制时钟信号SCL的周期。具体数值由TWI状态寄存器TWSR的预分频系数以及比特率寄存器TWBR设定。
当TWI工作在从机模式时,不需要对比特率或者预分频系数进行设定,但从机CPU时钟频率必须大于TWI时钟线SCL频率的16倍。
注意,从机可能会延长SCL低电平时间,从而降低TWI总线的平均时钟周期。
SCL频率计算公式:
SCL FRE = CPU FRE/(16+2(TWBR)4^TWPS)
其中:
TWBR 就是TWI比特率寄存器的数值。
TWPS 就是TWI状态寄存器预分频系数。
例子:
如果SCL频率为100KHz,CPU时钟频率为4MHz,则CPU FRE/SCL FRE = 40。
如果TWPS=0.则TWBR = 12。即TWSR=(TWPS1:TWPS0=00)。
值得注意的是,TWBR的值不应小于10,否则主机会在SDA与SDL产生错误输出作为提示信号,问题出现在TWI工作在主机模式下,向从机发送
START+SLA+R/W的时候。
五、总线接口单元
该单元包括数据与地址移位寄存器TWDR,START/STOP控制器和总线仲裁判定硬件电路单元。TWDR寄存器用于存放发送或者接收的数据或者地
址。除了8位的TWDR,总线接口单元还有一个寄存器,包含了用于发送或者接受应答的(N)ACK。这个寄存器不能由程序直接访问。当接收数据时
,它可以通过TWI控制寄存器TWCR来复位或者清零;在发送数据是,(N)ACK值由TWCR的值决定。
在下列情况出现时,TWINT标志位置位:
1)在TWI传送完START/REP START信号后。
2)在TWI传送完SLA+R/W信号后。
3)在TWI传送完地址字节后。
4)在TWI总线仲裁失败后。
5)在TWI被主机寻址后。
6)在TWI接收到一个数据字节后。
7)作为从机工作时,TWI接收到STOP或者REP START信号后。
8)由于非法的START或者STOP信号造成总线错误时。
文章评论(0条评论)
登录后参与讨论