专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
嵌入式
嵌入式I2C协议详解
2019-07-12 23:20
发布
生成海报
站内文章
/
嵌入式Linux
16341
0
1425
I2C总线详细介绍
2010-10-30 18:26:44
| 分类:
面试总结
| 标签:
|
字号
大
中
小
订阅
I
2
C
是一种串行总线的外设接口,它采用同步方式串行接收或发送信息,两个设备在同一个时钟下工作。
I
2
C
总线只用两根线:串行数据
SDA
(
Serial Data
)、串行时钟
SCL
(
Serial Clock
)。
由于
I
2
C
只有一根数据线,因此其发送信息和接收信息不能同时进行。信息的发送和接收只能分时进行。
I
2
C
串行总线工作时传输速率最高可达
400K bit/s
。
I
2
C
总线上的所有器件的
SDA
线并接在一起,所有器件的
SCL
线并接在一起,且
SDA
线和
SCL
线必须通过上拉电阻连接到正电源。
I
2
C
总线的数据传输协议要比
SPI
总线复杂一些,因为
I
2
C
总线器件没有片选控制线,所以
I
2
C
总线数据传输的开始必须由主器件产生通信的开始条件(
SCL
高电平时,
SDA
产生负跳变);通信结束时,由主器件产生通信的结束条件(
SCL
高电平时,
SDA
产生正跳变)。
SDA
线上的数据在
SCL
高电平期间必须保持稳定,否则会被误认为开始条件或结束条件,只有在
SCL
低电平期间才能改变
SDA
线上的数据。
I
2
C
总线的数据传输波形图如下图所示。
I
2
C
应用实例
AT24C
系列为美国
ATMEL
公司推出的串行
COMS
型
E
2
PROM
,具有功耗小,宽电压范围等优点。下图为
AT24C
系列
E
2
PROM
的引脚图。图中
A0
、
A1
、
A2
为器件地址引脚,
Vss
为地,
Vcc
为正电源,
WP
为写保护,
SCL
为串行时钟线,
SDA
为串行数据线。
AT24C
系列
E
2
PROM
采用
I
2
C
总线,
I
2
C
总线上可挂接多个接口器件,在
I
2
C
总线上的每个器件应有唯一的器件地址,按
I
2
C
总线规则,器件地址为
7
位二进制数,它与一位数据方向位构成一个器件寻址字节。器件寻址字节的最低位(
D0
)为方向位(读
/
写),最高
4
位(
D7~D4
)为器件型号地址(不同的
I
2
C
总线接口器件的型号地址由厂家给定,
AT24C
系列
E
2
PROM
的型号地址都为
1010
);其余
3
位(
D3~D1
)与器件引脚地址
A2A1A0
相对应。器件地址格式:
1010 A
2A
1A
0
。
对于
E
2
PROM
的片内地址,
AT24C01
和
AT24C02
由于芯片容量可用一个字节表示,故读写某个单元前,先向
E
2
PROM
写入一个字节的器件地址,再写入一个字节的片内地址。而
AT24C04
、
AT24C08
、
AT24C16
分别需要
9
位、
10
位和
11
位片内地址,所以
AT24C04
把器件地址中的
A0
作为片内地址的最高位,
AT24C08
把器件地址中的
A1A0
作为片内地址的最高两位,
AT24C16
把器件地址中的
A2A1A0
作为片内地址的最高三位。凡在系统中把器件的引脚地址用作片内地址后,该引脚在电路中不得使用,做悬空处理。
AT24C32
、
AT24C64
、
AT24C128
、
AT24C256
和
AT24C512
的片内地址采用两个字节。
AT24C
系列
E
2
PROM
的读写操作原理
下列读写操作中
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
个字节不能跨页):
应答信号
I
2
C
总线数据传送时,每成功地传送一个字节数据后,接收器都必须产生一个应答信号。应答的器件在第
9
个时钟周期时将
SDA
线拉低,表示其已经收到一个
8
位数据。
I
2
C
器件在接收到起始信号和从器件地址之后响应一个应答信号,如果器件已选择了写操作,则在每接收一个
8
位字节之后响应一个应答信号。
I
2
C
器件工作在读模式时,在发送一个
8
位数据后释放
SDA
线(
SDA
置为高电平)并监视一个应答信号,一旦接收到主器件的应答信号,
I
2
C
器件则继续发送数据,如果主器件没有发送应答信号(发送非应答信号,即
SDA
为高电平),器件停止传送数据且等待一个停止信号。
1.I2C协议
2条双向串行线,一条数据线SDA,一条时钟线SCL。
SDA传输数据是大端传输,每次传输8bit,即一字节。
支持多主控(multimastering),任何时间点只能有一个主控。
总线上每个设备都有自己的一个addr,共7个bit,广播地址全0.
系统中可能有多个同种芯片,为此addr分为固定部分和可编程部份,细节视芯片而定,看datasheet。
1.1 I2C位传输
数据传输:SCL为高电平时,SDA线若保持稳定,那么SDA上是在传输数据bit;
若SDA发生跳变,则用来表示一个会话的开始或结束(后面讲)
数据改变:SCL为低电平时,SDA线才能改变传输的bit
1.2 I2C开始和结束信号
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
1.3 I2C应答信号
Master每发送完8bit数据后等待Slave的ACK。
即在第9个clock,若从IC发ACK,SDA会被拉低。
若没有ACK,SDA会被置高,这会引起Master发生RESTART或STOP流程,如下所示:
1.4 I2C写流程
写寄存器的标准流程为:
1. Master发起START
2. Master发送I2C addr(7bit)和w操作0(1bit),等待ACK
3. Slave发送ACK
4. Master发送reg addr(8bit),等待ACK
5. Slave发送ACK
6. Master发送data(8bit),即要写入寄存器中的数据,等待ACK
7. Slave发送ACK
8. 第6步和第7步可以重复多次,即顺序写多个寄存器
9. Master发起STOP
写一个寄存器
写多个寄存器
1.5 I2C读流程
读寄存器的标准流程为:
1. Master发送I2C addr(7bit)和w操作1(1bit),等待ACK
2. Slave发送ACK
3. Master发送reg addr(8bit),等待ACK
4. Slave发送ACK
5. Master发起START
6. Master发送I2C addr(7bit)和r操作1(1bit),等待ACK
7. Slave发送ACK
8. Slave发送data(8bit),即寄存器里的值
9. Master发送ACK
10. 第8步和第9步可以重复多次,即顺序读多个寄存器
读一个寄存器
读多个寄存器
2. PowerPC的I2C实现
Mpc8560
的
CCSR
中控制
I2C
的寄存器共有
6
个。
2.1 I2CADR 地址寄存器
CPU也可以是I2C的Slave,CPU的I2C地址有 I2CADR指定
2.2 I2CFDR 频率设置寄存器
The serial bit clock frequency of SCL is equal to the CCB clock divided by the divider.
Ta的文章
更多
>>
HP DL 580 G6 频繁无规律重启 真郁闷
0 个评论
嵌入式I2C协议详解
0 个评论
51Nod-1622-集合对
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮