TWI 接口和 TWI 接口器件使用 AVR 单片机的很多型号也具有两线制接口,即 TWI 接口
实际上 TWI 接口时序和常见的CI2总线是兼容的
我们这本书结合讲的单片机 Atmega16 就有这种接口
这种接口的使用也十分广泛
比如本文会结合介绍的 EEPROM AT24C64;MAXIM 公司的温度传感器(查出型号);有的 A/D 转换器;菲利普还有专门的用这种总线的 I/O 扩展芯片
TWI 电路接线简单,占用 I/O,并且可以很多期间共享一个总线,使用比较方便,系统也很简洁
AVR 单片机用硬件实现了这种总线的时序,省去了很多编程工作
同时支持一条总线多个主设备的通讯
我们只需要控制相关寄存器就能实现通过 TWI 传输数据
很大程度上减少了我们的工作量,从而使代码更简洁,开发更容易
下面我们会介绍CI2的基本知识,AVR 的 TWI 接口的功能和使用,给出一个用 TWI 接口读写CI2接口的 EEPROM 的例子,最后给出适用于AVR-GCC 编译器的示例程序
一、CI2总线的基本知识 CI2总线的信号线有两条,一条是时钟线 SCL,另一条是数据线 SDA
总线连接起来的时候,需要两个上拉电阻,器件内部这两个信号引脚是集电极开路(或者是漏极开路)的
这样总线上的器件只要有一个输出低电平总线就会被拉低(实际上就是所谓线与的逻辑),这主要用于总线仲裁
在CI2总线上,有几个状态表示特殊的总线信号
开始和停止信号时序如下图所示: 图上可以看出,在 SCL 位高电平时 SDA 的变化将产生总线开始和停止信号
SDA 从高电平跳变到低电平表示开始,从低电平跳变到高电平表示停止
数据的建立和有效: 上图表示在传输数据时,SCL 高电平的时候,SDA 上的数据不能变化,因为前面已经说明,这是数据的变化将会认为是开始或者结束的信号
在 SCL 低电平时数据可以改变