I2C总线是Philips公司推出的芯片间串行传输总线。它用两根线实现了完备的全双工同步数据传送,可以极为方便地构成多机系统和外围器件扩展系统。I2C总线采用了器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有简单灵活的扩展方法,按照I2C总线规范,总线传输中的所有状态都生成相对应的状态码,系统中的主机能够依照这些状态码自动地进行总线管理,用户只要在程序中装入这些标准处理模块,根据数据操作要求完成I2C总线的初始化,启动I2C总线,就能自动完成规定的数据传送操作。I2C总线接口电路结构如图1所示。
I2C总线接口为开漏或开集电极输出,需加上拉电阻。系统中所有的单片机、外围器件都将数据线SDA和时钟线SCL的同名端相连在一起,总线上的所有节点都由器件和管脚给定地址。系统中可以直接连接具有I2C总统接口的单片机,也可以通过总线扩展芯片或I/O口的软件仿真与I2C总线相连。在I2C总线上可以挂接各种类型的外围器件,如RAM/EPROM、日历/时钟、A/D转换器、D/A转换器以及由I/O口、显示驱动器构成的各种模块。
I2C总线上数据传送的基本单位为字节,采用低位在前的格式。主从器件之间一次传输的数据称为一帧,由启动信号、若干个数据字节和应答位以及停止信号组成。可以看出,I2C
图1 I2C总线接口电路结构
的主要命令只有读、写两种,虽然读写的字节根据具体器件的不同而不同,但其时序关系不会发生改变。根据这一点,下位机只要具备I2C的基本时序即可。这些基本时序包括:启动、写字节、读字节、应答位、停止信号,并可以组合成两个子程序:读N字节子程序、写N字节子程序。
带有I2C器件的读写操作有多种形式,写操作有两种类型:字节写和页面写;读操作有三种类型:读当前地址内容、读随机地址内客和读顺序地址内容。以AT24C01为例,写N个字节数据的操作时序如图2所示,AT24C01读N个字节技据的操作时序如图3所示。
<?XML:NAMESPACE PREFIX = U1 /> | 8位 | | 8位 | | 8位 | | 8位 | | | 8位 | | |
起始信号 | 器件地址 | 响应信号 | 字地址 | 响应信号 | 数据1 | 响应信号 | 数据2 | 响应信号 | … | 数据N | 响应信号 | 结束信号 |
| | | 写操作 | | 写操作 | | 写操作 | | | 写操作 |