好文档 - 专业文书写作范文服务资料分享网站

TWI学习心得

天下 分享 时间: 加入收藏 我要投稿 点赞

Atmega8a TWI学习总结

丁炳亮

经过一个多星期的折腾终于搞懂的TWI的协议。刚开始看的时候感觉这是个非常强大的东西,看到后面越感觉到Atmega这么好的单片机这么会存在一个很不相称的TWI,太不简洁了。设置了过多的状态,其实很多都是没必要的。整个通信协议其实就是IIC,只是TWI增加了很多状态显得是画蛇添足。

USART、SPI、IIC这三种常用的通信接口个人认为个有优缺点,需要针对不同的需求选择。IIC和其他两种相比最大的不同点应该是IIC的主机仲裁机制,有了主机仲裁机制的存在就使能IIC总线上的每个设备都可以经过仲裁成为主机。

1工作原理

1.1电气连接

TWI使用两根总线,一根用于传输数据(SDA),另一根用于传输时钟(SCL)。由于总线上可以挂载多个设备,所以设备的TWI总线接口不可能使用推挽输出,但是可以使用内部上拉电阻,在挂载的设备数量过多时等效上拉电阻为所有设备上拉电阻的并联值,可能会非常小,为此还是建议不要把相应的IO上拉电阻打开,使用外部上拉更妥(其实如果只用内部上拉电阻,在传输数据时很容易出错,因为内部上拉电阻太大了)。

总线上不允许出现没有上电的AVR设备。因为在单片机没有上电时IO口之间存在比较小的导通电阻,相当于在SDA和SCL之间接了一个电阻,这会造成传输的数据出错。同时手册中还规定了通信总线间的最大分布电容。

(图一)TWI总线的连接

1.2数据格式

TWI 总线上数据位的传送与时钟脉冲同步。时钟线为高时,数据线电压必须保持稳定(应该是下降沿移位,高电平采样),除非在启动与停止的状态下。

和USART一样,TWI也没有使用使能端口,所以数据传输时需要一个起始信号和一个停止信号。TWI的起始信号(START)和停止信号(STOP)并不是用数据”1”和”0”表示,START的产生是在SCL高电平时,SDA上输出一个下降沿。STOP的产生是在SCL高电平时,SDA上输出一个上升沿。在START 与STOP 状态之间发出的START 状态,这被称为REPEATED START 状态,如下图所示:

(图二)START/STOP

从机时刻会监视总线的变化,如果有出现START则开始接收地址,如果出现的是STOP则切换到未寻址状态。从机是如果检测START和STOP的呢?根据这两个信号的特点自己推测了下面的逻辑方框图:

(图三)START/STOP检测逻辑方框图

去控制 边沿检测 SDA SCL 图中的传输门是高电平导通,即SCL为”1”时传输门导通,SDA的跳变就会被边沿检测器检测到,再传到控制单元。

所有在TWI 总线上传送的数据包均为 9 位(第9位是由接收设备发出的应答),在第9个时钟周期内通过拉低SDA作出应答。若接收设备有其它原因无法响应,则应该保持SDA 为高。

开始通信时,主机在总线上产生一个START,接着是从机地址数据包(7 位地址位、1 位READ/WRITE 控制位。如果READ/WRITE 为1,则执行读操作,否则执行写操作)从机被寻址后在第9个时钟周期通过拉低SDA作出应答,若该从机忙或有其它原因无法响应主机,则应该在应答周期保持SDA为高,主机可以发出STOP 状态或REPEATED START 状态重新开始发送。

地址字节的MSB 首先被发送。从机地址由设计者自由分配,但需要保留地址0000 000

作为广播地址。当发送广播呼叫时,所有的从机应在应答周期通过拉低SDA作出应答。当主机需要发送相同的信息给多个从机时可以使用广播功能。注意在广播时发送Read 位没有意义,因为如果几个从机发送不同的数据会带来总线冲突。所有形如1111 xxx 格式的地址都需要保留,以便将来使用。

(图四)典型的数据传送

1.3总裁机制

总线上可能会出现多个主机同时传输数据,当一个主机要产生”1”,而另一个主机要产生”0”,就出现了错误,所有需要一个总裁机制来保证从机接收到的数据是正确的。

多个主机传输数据第一个要解决的问题就是统一时钟,因为每个主机使用的时钟不一定是相同的。TWI协议使用了一种称为“时钟与”的方式解决时钟不统一的问题。有种叫做“两人三足”的游戏可以解释“时钟与”的原理。游戏是一个人的左脚与另一个人的右脚绑在一起走路,假设这两个人就是总线上的两个主机,两人原来的走路速度就是两个主机的时钟频率,绑在一起的脚就是两个时钟相与后的共用时钟。脚抬起为时钟高电平,脚踏地为时钟低电平。开始走路,当脚抬起时其中一个人要塌下,则都塌下了。在塌下时只有两个都打算抬起才能抬起(因为塌下省力,抬起费力)。所以两人的速度只能一致了。为了便于理解自己根据“时钟与”的实现原理绘制了下面的逻辑方框图。

系统时钟 预分频器 复位 VCC SCL (图五)时钟结构逻辑方框图

图四中预分频器的复位端是高电平复位,复位状态下输出是低电平,MOS管高电平导通低电平截止。假设现在预分频器输出的是低电平,MOS截止,SCL为”1”,现在有另一个设备把SCL端拉低,则带非门输入的与门输出为”1”,使预分频处于复位状态,MOS管继续处于截止状态。当SCL被释放后,预分频器从复位状态恢复,开始输出时钟。

TWI学习心得

Atmega8aTWI学习总结丁炳亮经过一个多星期的折腾终于搞懂的TWI的协议。刚开始看的时候感觉这是个非常强大的东西,看到后面越感觉到Atmega这么好的单片机这么会存在一个很不相称的TWI,太不简洁了。设置了过多的状态,其实很多都是没必要的。整个通信协议其实就是IIC,只是TWI增加了很多状态显得是画蛇添足。USART、SPI、IIC这三
推荐度:
点击下载文档文档为doc格式
83sqt9n6rd036ax5ujyg
领取福利

微信扫码领取福利

微信扫码分享