Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1419765
  • 博文数量: 1334
  • 博客积分: 645
  • 博客等级: 上士
  • 技术积分: 5762
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-25 16:56
文章分类

全部博文(1334)

文章存档

2014年(108)

2013年(1059)

2012年(169)

分类: LINUX

2013-02-21 04:59:45

原文地址:I2C协议 作者:leon_yu

1.硬件连接

 只用两根信号线,SDA,SCL.极大的方面了设计者和厂商。每个器件可以使用独立电源但是必须共地

几个信号:

①总线空闲状态
SDASCL两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高;

②启动信号START
时钟信号SCL保持高电平,数据信号SDA的电平被拉低(即负跳变)。启动信号必须是跳变信号,而且在建立该信号前必修保证总线处于空闲状态;

③停止信号STOP
 时钟信号SCL保持高电平,数据线被释放,使得SDA返回高电平(即正跳变),停止信号也必须是跳变信号。
④数据传送

SCL线呈现高电平期间SDA线上的电平必须保持稳定,低电平表示0(此时的线电压为地电压),高电平表示1(此时的电压由元器件的VDD决定)。只有在SCL线为低电平期间,SDA上的电平允许变化。
 应答信号ACK

I2C总线的数据都是以字节(8位)的方式传送的,发送器件每发送一个字节之后,在时钟的9个脉冲期间释放数据总线,由接收器发送一个ACK把数据总线的电平拉低)来表示数据成功接收。

无应答信号NACK
在时钟的第9个脉冲期间发送器释放数据总线,接收器不拉低数据总线表示一个NACKNACK有两种用途:

a、一般表示接收器未成功接收数据字节;

b、当接收器是主控器时,它收到最后一个字节后,应发送一个NACK信号,以通知被控发送器结束数据发送,并释放总线,以便主控接收器发送一个停止信号STOP


其它信号如插入等待、重启动、时钟同步、总线仲裁、总线封锁等不经常使用,具体可以查阅I2C手册(周

2.寻址约定

地址的分配方法有两种:

CPU的智能器件,地址由软件初始化时定义,但不能与其它的器件有冲突;

不含CPU的非智能器件,由厂家在器件内部固化,不可改变。

3.基本工作原理:

1每次通讯START开始,以STOP结束以启动信号START来掌管总线,以STOP来释放总线

启动信号START后紧接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位R/W,R./W位为0表示由主控向被控器件写数据,R/W1表示由主控向被控器件读数据

当被控器件检测到收到的地址与自己的地址相同时,在第9个时钟期间反馈应答信号;

每个数据字节在传送时都是高位(MSB)在前

2)写通讯过程:

主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线;

发送一个地址字节(包括7位地址码和一位R/W);

当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK);

主控收到ACK后开始发送第一个数据字节;

被控器收到数据字节后发送一个ACK表示继续传送数据,发送NACK表示传送数据结束;

主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线;

3)读通讯过程:

主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线;

发送一个地址字节(包括7位地址码和一位R/W);

当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK);

主控收到ACK后释放数据总线,开始接收第一个数据字节;

主控收到数据后发送ACK表示继续传送数据,发送NACK表示传送数据结束;

主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线;

 

阅读(165) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~