注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

火车的家

Put first thing first

 
 
 

日志

 
 

[转] 2015.08.04 i2c信号的ACK与NACK  

2015-08-04 16:58:35|  分类: 技术博客 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

我们平时在调试I2C的时候可能很少去关注NACK信号,只知道如果Master发送数据,MSB先发,LSB后发,连续发送一个字节(8个bit),之后Slave会回复一个ACK信号,但是有时I2C slave可能会发出NACK信号,下面让我们来看看NACK信号存在的情况。

1、从spec下摘取一段:
[转] 2015.08.04 i2c信号的ACK与NACK - tassardge - 火车的家
 
[转] 2015.08.04 i2c信号的ACK与NACK - tassardge - 火车的家
 
[转] 2015.08.04 i2c信号的ACK与NACK - tassardge - 火车的家
 
2、翻译:
每个字节后会跟随一个ACK信号。ACK bit使得接收者通知发送者已经成功接收数据并准备接收下一个数据。所有的时钟脉冲包括ACK信号对应的时钟脉冲都是由master产生的。
ACK信号:发送者在ACK时钟脉冲期间释放SDA线,接收者可以将SDA拉低并在时钟信号为高时保持低电平。
NACK信号:当在第9个时钟脉冲的时候SDA线保持高电平,就被定义为NACK信号。Master要么产生STOP条件来放弃这次传输,或者重复START条件来发起一个新的开始。

3、实例:
可以看到如下波形,Master发送01101100(0x6c,MSB先发),在第9个时钟的时候SDA为高电平,表示Slave发送了NACK信号,之后整个I2C通信就结束了。这是一次失败的I2C通信,原因可能是I2C设备那边出的问题,或者访问I2C设备的地址与I2C设备实际的地址不对应,导致没接收到Master的数据从而返回NACK。
[转] 2015.08.04 i2c信号的ACK与NACK - tassardge - 火车的家
 下面我拿一个OV8825 Sensor的I2C来说明,
OV8825的Slave Write Address为0x6c,OV8825的ID register Address为0x300a,0x300b,ID register里面存的Value是0x88,0x25

正常的I2C波形如下:
1)设定I2C写的地址:01101100(0x6c)  00110000(0x30) 00001010(0x0a)
Slave Write Address:0x6c,ID register address:0x300a
[转] 2015.08.04 i2c信号的ACK与NACK - tassardge - 火车的家
 2)设定I2C读的地址:01101101(0x6d)  10001000(0x88)
Slave Read Address:0x6d,ID register value:0x88
[转] 2015.08.04 i2c信号的ACK与NACK - tassardge - 火车的家
 20150716看到这里有点奇怪,i2c write是以ack+stop结束通信,而i2c read是以nack+stop结束通信的,原因如下:
i2c write的时候,master在写完最后一个字节之后slave会回ACK,然后master发送stop信号结束通信
i2c read的时候,master在接收完slave发送的最后一个字节之后会回NAK,因为这个时候master已经接收到足够的字节,NAK告诉slave不要在发送数据了。

3)设定I2C写的地址:01101100(0x6c)  00110000(0x30) 00001011(0x0b)
Slave Write Address:0x6c,ID register address:0x300b
[转] 2015.08.04 i2c信号的ACK与NACK - tassardge - 火车的家
 4)设定I2C读的地址:01101101(0x6d)  00100101(0x25)
Slave Read Address:0x6d,ID register value:0x25
[转] 2015.08.04 i2c信号的ACK与NACK - tassardge - 火车的家
 
  评论这张
 
阅读(225)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017