1、主设备发出开始信号(Start):
开始信号(Start):时钟线(SCL)为高电平期间,数据线(SDA)由高变低,即为一个开始信号。
2、主设备发出1字节的从设备地址信息,其中最低位为读写控制码(0为写,1为读),高7
位为从机器地址码。
如AT24C256地址:

3、从设备发出认可信号:
应答信号(Ack):即认可信号,分为两种情况:(a)、主设备在写从设备时,每正确写完1字节数据,从设备将在下一个时钟周期把数据线(SDA)拉低,即为一个应答信号。(b)、主设备在读从设备时,每正确读完1字节数据,主设备将在下一个时钟周期把数据线(SDA)拉低,即为一个应答信号。注:在读从设备时,主设备在最后一个字节数据接收完毕以后不发出应答信号,而是直接发出结束信号。
4、主设备开始对从设备进行读写操作。如果是读操作,则每读取1字节,主设备会发送一个应答
信号(Ack)给从设备,如果是写操作,则每写入1字节,从设备会发送一个应答信号(Ack)给主设备。
5、主设备发出结束信号(Stop)
时钟线(SCL)为高电平期间,数据线(SDA)由低变高,即为一个结束信号。也就是说,I2C总线在通信过程中,所有的数据读写操作都必须在时钟线(SCL)为低电平进行,而在钟线(SCL)为高电平时必须保持数据线(SDA)信号的稳定,任何发生在钟线(SCL)为高电平期间数据线(SDA)上的电平变化都被视为是开始或结束信号。
附件:
挂在I2C总线上的EEPROM设备
EEPROM称为电擦除式只读存储器,一般容量很小、用于保存产品的固化参数,此次跟我狭路相逢的是一款来自ATMEL公司的AT24C512B,总容量为64K,支持以页的方式写入数据,页大小128字节,以下是这款设备的相关信息和操作方法(其他型号类同):
硬件连接。在AT24C512B硬件连接中,跟软件编程相关的引脚有三个,除了连接在I2C总线上的时钟线(SCL)、数据线(SDA)引脚之外,还有一个写保护引脚(WP)连接在GPIO上。寻址方式。EEPROM可以让你精确地访问到每一字节,AT24C512B采用16位的寻址方式共计可以访问65536字节的地址空间。
读写时序。AT24C512B支持的写操作有单字节写入、按页写入,支持的读操作有随机单字节或连接读取、当前位置单字节或连续读取,EEPROM一般在电路中做从设备,我此次面对的也是,以下是主设备对EEPROM进行各种操作的操作方法:
单字节写入:START->发送从设备地址(写控制码)->处理Ack->发送字节地址->处理Ack[->发送1字节数据->处理Ack]->STOP。
按页写入:将单字节写入的[]中的操作重复进行128次即可实现。
随机单字节读取:START->发送从设备地址(写控制码)->处理Ack->发送字节地址->处理Ack->START->发送器件地址(读控制码)->处理Ack->接收1字节数据->STOP。随机连续读取:在随机单字节读取操作的STOP信号发送之前,加入若干个[->发送Ack->接收1字节数据]即可实现。
当前位置单字节读取:START->发送从设备地址(读控制码)->处理Ack->发送字节地址->处理Ack->接收1字节数据->STOP。当前指的是之前进行过读取操作但是没有发送STOP信号,EEPROM芯片内部指针所在的位置即为当前位置。
当前位置连续读取:在当前位置单节读取操作的STOP信号发送之前,加入若干个[->发送Ack->接收1字节数据]即可实现。
关于EEPROM的按页写入。为提高数据写入效率,有的EEPROM设备用一个内部的RAM来提供按页写入的功能,进行写操作的时候,先记录下要写入的首地址,然后将接收到的数据都缓存在RAM中,在接收到STOP信号时再把缓存数据一次性保存到先前记录的地址处。有两个需要注意的问题:(a)、如果写入的数据超过一页的长度,将发生回卷,即从RAM的0地址处进行数据覆盖。(b)、如果页大小为128字节,即0-127字节为第一页、128-255为第二页,即页的边界位置是绝对的,而不是从写入数据的起始位置开始计算。在进行数据读取操作没有页的问题,可以从任意位置开始读取任意大小的数据,超过EEPROM总容量时发生回卷。