原创 AVR TWI总线学习笔记

2010-6-8 16:03 3448 5 5 分类: MCU/ 嵌入式
ATMEL公司的AVR芯片上的TWI总线兼容I2C总线。如何利用该硬件功能读写I2C设备网上的资料不多,而且很多很难得懂。因此我查阅了

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条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /2 下一条