I2C读写流程

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

I2C读写流程

I2C数据通信是由数据线(SDA)和一根时钟线(SCL)组成

先对I2C初始化:

主模式、xx向量IRQxx、总线速率

数据读写流程:

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

开始信号(Start):

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

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

如AT24C256地址:

100A1A0R/W

时钟IC:

M41T81

11000R/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总容量时发生回卷。

相关文档
最新文档