打印

I2C总线详细介绍

[复制链接]
1314|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianli1980|  楼主 | 2014-10-29 15:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
I2C总线详细介绍  
I2C是一种串行总线的外设接口,它采用同步方式串行接收或发送信息,两个设备在同一个时钟下工作。I2C总线只用两根线:串行数据SDA(Serial Data)、串行时钟SCL(Serial Clock)。
由于I2C只有一根数据线,因此其发送信息和接收信息不能同时进行。信息的发送和接收只能分时进行。I2C串行总线工作时传输速率最高可达400K bit/s。
I2C总线上的所有器件的SDA线并接在一起,所有器件的SCL线并接在一起,且SDA线和SCL线必须通过上拉电阻连接到正电源。
I2C总线的数据传输协议要比SPI总线复杂一些,因为I2C总线器件没有片选控制线,所以I2C总线数据传输的开始必须由主器件产生通信的开始条件(SCL高电平时,SDA产生负跳变);通信结束时,由主器件产生通信的结束条件(SCL高电平时,SDA产生正跳变)。
SDA线上的数据在SCL高电平期间必须保持稳定,否则会被误认为开始条件或结束条件,只有在SCL低电平期间才能改变SDA线上的数据。

相关帖子

沙发
tianli1980|  楼主 | 2014-10-29 15:47 | 只看该作者
I2C应用实例
AT24C系列为美国ATMEL公司推出的串行COMS型E2PROM,具有功耗小,宽电压范围等优点。下图为AT24C系列E2PROM的引脚图。图中A0、A1、A2为器件地址引脚,Vss为地,Vcc为正电源,WP为写保护,SCL为串行时钟线,SDA为串行数据线。AT24C系列E2PROM采用I2C总线,I2C总线上可挂接多个接口器件,在I2C总线上的每个器件应有唯一的器件地址,按I2C总线规则,器件地址为7位二进制数,它与一位数据方向位构成一个器件寻址字节。器件寻址字节的最低位(D0)为方向位(读/写),最高4位(D7~D4)为器件型号地址(不同的I2C总线接口器件的型号地址由厂家给定,AT24C系列E2PROM的型号地址都为1010);其余3位(D3~D1)与器件引脚地址A2A1A0相对应。器件地址格式:
1010  A2A1A0。
对于E2PROM的片内地址,AT24C01和AT24C02由于芯片容量可用一个字节表示,故读写某个单元前,先向E2PROM写入一个字节的器件地址,再写入一个字节的片内地址。而AT24C04、AT24C08、AT24C16分别需要9位、10位和11位片内地址,所以AT24C04把器件地址中的A0作为片内地址的最高位,AT24C08把器件地址中的A1A0作为片内地址的最高两位,AT24C16把器件地址中的A2A1A0作为片内地址的最高三位。凡在系统中把器件的引脚地址用作片内地址后,该引脚在电路中不得使用,做悬空处理。AT24C32、AT24C64、AT24C128、AT24C256和AT24C512的片内地址采用两个字节。

使用特权

评论回复
板凳
小木欧尼| | 2014-10-29 15:47 | 只看该作者
有用

使用特权

评论回复
地板
tianli1980|  楼主 | 2014-10-29 15:50 | 只看该作者
AT24C系列E2PROM的读写操作原理-
下列读写操作中SDA线上数据传送状态标记注释如下:
Start为启动信号(SCL为高电平,SDA产生负跳变),由主机发送。
Stop为结束信号(SCL为高电平,SDA产生正跳变),由主机发送.
AddressByte、AddreeeByte H、AddreeeByte L为地址字节,指定片内某单元地址,由主机发送。
data为数据字节,由数据发送方发送。
0 为肯定应答信号,由数据接收方发送。

1 为否定应答信号,由数据接收方发送.
主机控制数据线SDA时,在SCL高电平期间必须保持SDA线上的数据稳定,否则会被误认为对从机的起始条件或结束条件。主机只能在SCL低电平期间改变SDA线上的数据。主机写操作期间,用SCL的上升沿写入数据;主机读操作期间,用SCL的下降沿读出数据。

从AT24C系列AT24C01~AT24C16中读n个字节的数据格式:

从AT24C系列AT24C32~AT24C512中读n个字节的数据格式:

向AT24C系列AT24C01~AT24C16中写n个字节的数据格式(n<=页长,且n个字节不能跨页):
向AT24C系列AT24C32~AT24C512中写n个字节的数据格式(n<=页长,且n个字节不能跨页):

使用特权

评论回复
5
tianli1980|  楼主 | 2014-10-29 15:51 | 只看该作者
应答信号;

I2C总线数据传送时,每成功地传送一个字节数据后,接收器都必须产生一个应答信号。应答的器件在第9个时钟周期时将SDA线拉低,表示其已经收到一个8位数据。
I2C器件在接收到起始信号和从器件地址之后响应一个应答信号,如果器件已选择了写操作,则在每接收一个8位字节之后响应一个应答信号。
I2C器件工作在读模式时,在发送一个8位数据后释放SDA线(SDA置为高电平)并监视一个应答信号,一旦接收到主器件的应答信号,I2C器件则继续发送数据,如果主器件没有发送应答信号(发送非应答信号,即SDA为高电平),器件停止传送数据且等待一个停止信号。

使用特权

评论回复
6
lijiabaobei| | 2014-10-29 17:41 | 只看该作者
资料还是不错的

使用特权

评论回复
7
wangjinlili| | 2014-10-29 20:47 | 只看该作者
目前做项目还没有用过I2C

使用特权

评论回复
8
meishizhaoshi| | 2014-10-29 22:24 | 只看该作者
科普分享也不错

使用特权

评论回复
9
shibalihuandao| | 2014-10-29 22:50 | 只看该作者
不错 学习学习

使用特权

评论回复
10
zgsxhzac| | 2014-10-29 22:58 | 只看该作者
下次应该是usb详解了吧

使用特权

评论回复
11
sishangcine| | 2014-10-29 23:22 | 只看该作者
经常用到 支持

使用特权

评论回复
12
heibaiyinjiag| | 2014-10-29 23:27 | 只看该作者
很常用的通信线

使用特权

评论回复
13
taihezhibanh| | 2014-10-29 23:41 | 只看该作者
想了解一下CAN总线

使用特权

评论回复
14
beiwaroad| | 2014-10-29 23:47 | 只看该作者
这几个总线是我们应该熟练掌握的

使用特权

评论回复
15
huangfeng33| | 2014-11-15 21:47 | 只看该作者
个人感觉 I2C有一些问题,也可能时自己没有用熟。学习了。

使用特权

评论回复
16
elecintop| | 2014-11-30 13:28 | 只看该作者
谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

482

主题

2214

帖子

11

粉丝