I2C读写流程

更新时间:2023-10-28 09:55:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

I2C读写流程

I2C数据通信是由数据线(SDA)和一根时钟线(SCL)组成 先对I2C初始化:主模式、中断向量IRQ中断、总线速率 数据读写流程:

1、 主设备发出开始信号(Start):

开始信号(Start):时钟线(SCL)为高电平期间,数据线(SDA)由高变低,即为一个开始信号。

2、主设备发出1字节的从设备地址信息,其中最低位为读写控制码(0为写,1为读),高7

位为从机器地址码。

如AT24C256地址: 1 0 1 0 0 A1 A0 R/W

时钟IC:M41T81 1 1 0 1 0 0 0 R/W 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总容量时发生回卷。

本文来源:https://www.bwwdw.com/article/h1e2.html

Top