操作时序图整理
1. 起始和停止信号
SCL为高时,输入数据
输入数据时,数据发生变化,表示开始或者结束
开始:SDA数据由高变低
结束:SDA数据由低变高

2. 数据有效性
由于接收数据时,数据发生变化表示开始或者结束
因此在真正接收数据时,为了保证其有效性,一般让SDA变化早于开始接收和晚于结束接收时变化

3. 响应和非响应
接收方和发送方不占用总线时,一直保持高电平
发送方接收完毕之后将一直保持高电平,让出总线,此时接收方变为低电压,表示应答信号,发出响应
模拟时,由于不会用到I2C芯片,而是使用usart模拟
由于同时具有输入输出功能,而且是总线方式互相连接,因此在设置工作模式时,应该设置为通用开漏输出
开漏输出时,上拉下拉电阻只有下拉电阻工作,上拉电阻直接断开,当下拉电阻通时,可以输出0,当下拉电阻关闭时,总线上的上拉电阻将电位拉高,可以输出1

4. 写入一个字节时序
WC是读写使能,一直低电平让M24C02一直可以写入数据
传入数据时,先发送开始信号
然后传递一个字节的设备选择码,其中7位是设备地址,最后一位是读写位低位为写,高位为读,这里选择0
接收完设备选择码之后,从设备返回一个应答
然后主设备再发送一个要写入数据在从设备储存的地址位
从设备再返回一个应答后主设备再发送要写入的数据
从设备再发送应答之后主设备发送结束信号
由于M24C02芯片有个写入周期,为5ms,因此在进行另外的写入操作时,要等待5ms

5. 读出一个字节时序
主设备发出设备选择码,读写位为读时,从设备将会接管总线,输出数据,主设备不能在发送要操作的地址来读取想要的地址
读写数据时,如果不给我们要操作从设备的哪个地址的数据的地址时,M24C02会用到一个特殊的寄存器
这个寄存器叫地址计数器,专门用来储存之前访问的数据的地址,且如果操作是读取数据时,在操作结束后,计数器自动+1,如果一直不给要操作的地址的写操作时,由于地址计数器内的数据并没有变化,所以会一直在同一个地址上面写入数据
如果下次访问该芯片时没有提供要操作的地址时,直接使用地址计数器的地址
因此如果想要读取M24C02中特定地址的数据时,可以使用假写再读取数据的做法,以实现更改地址计数器的数据之后再进行读操作
具体为,先进行一次写操作,跟上要操作的地址之后但是不给要写入的数据,这操作被称为假写
发送完上组数据之后主设备再发送开始信号,然后发送读操作的地址选择码,此时M24C02芯片接管总线,读取自己的地址计数器,输出我们改好的特定地址的寄存器的数据
因为只需要接收一个数据,所以主设备不用发送响应信号,直接发出终止信号即可打到我们的目的

6. 单词写入多个字节时序
一次性写入多个字节,也被称为页输入
M24C02每一页只有16个字节,每次写入操作只能写入到一个单独的页中,所以每次最多只能写入16个字节的数据
当一次性写入超过16个字节的数据时,超出的部分会重新回到这页的首地址重新写入
写入多个数据即在写入一个数据的基础上继续发送数据,芯片写入周期为5ms,因此等5ms继续发送即可
发送完了之后主设备主动发送结束信号结束即可
由于地址计数器会储存上次访问的地址的地址,因此在写完多个数据之后,地址计数器储存的地址为写入的最后一个数据的地址

7.单次读出多个字节时序
和单词一个字节时序差不多,想要接收多个字节时序只用让主设备在接收完一个数据之后,主设备发送一个响应信号给从设备,让从设备知道接收完毕之后从设备会继续发送数据,直到主设备不发送响应信号直接停止为止
