5491|10

66

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

一个关于i2c应答信号的简单问题 [复制链接]

功能:发确认信号
------------------------------------------------------------*/
void Ack()
{
SDA = 0;
nod2();
SCL = 1;
nod2();
SCL = 0;
nod2();
SDA = 1; //这里有疑问
nod2();
}
/*-------------------------------------------------------------
功能:发无确认信号
------------------------------------------------------------*/
void NoAck()
{
SDA = 1;
nod2();
SCL = 1;
nod2();
SCL = 0;
nod2();
SDA = 0;//这里有疑问
nod2();
}

这两个子程序对不对?注释中标明有疑问的那两句对吗?为什么要对SDA做这样的处理?????

最新回复

我正在做24C256的应用,遇到了一点小问题,按字节存取没问题,在连续读时,读完一个字节后就无数据了,好像是单片机必出的确认信号不对,可又不知这个应答信号是怎样的?有谁能给我一个时序图或者一个解决方法,三天了,还是通不过,太郁闷了。  详情 回复 发表于 2009-3-22 13:07
点赞 关注

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
第一个子程序是发一个开始和结束信号
第二个子程序就随便发的吧,只要不是开始 结束
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 dhdahai 的回复:
第一个子程序是发一个开始和结束信号
第二个子程序就随便发的吧,只要不是开始 结束

什么东西啊
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 jiyiche 的回复:
引用 1 楼 dhdahai 的回复:
第一个子程序是发一个开始和结束信号
第二个子程序就随便发的吧,只要不是开始 结束

什么东西啊


不好意思,看错了
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
我认为ACK中SDA置1是为数据START做准备,START的条件是SCL为1时,SDA从1到0.
而NOACK中的SDA置0是为数据STOP做准备,STOP的条件是SCL为1时,SDA从0到1.
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 llKK0616 的回复:
我认为ACK中SDA置1是为数据START做准备,START的条件是SCL为1时,SDA从1到0.
而NOACK中的SDA置0是为数据STOP做准备,STOP的条件是SCL为1时,SDA从0到1.

第二点有道理,但是第一点没道理啊,START是在ACK之前就完成了啊。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

7
 
我想了想,觉得应该是这样,这是一个模拟I2C的程序,一般I2C模块即为MASTER在第九个SCL下降沿判断SDA是否为低,也就是判断ACK信号,而这个信号是SLAVE设备给出的,判断完后SDA要被MASTER拉高即SDA为1.实际I2C 波形不知道你看过没有,我觉得可以这样理解了。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 llKK0616 的回复:
我想了想,觉得应该是这样,这是一个模拟I2C的程序,一般I2C模块即为MASTER在第九个SCL下降沿判断SDA是否为低,也就是判断ACK信号,而这个信号是SLAVE设备给出的,判断完后SDA要被MASTER拉高即SDA为1.实际I2C 波形不知道你看过没有,我觉得可以这样理解了。

那第二个程序为什么要拉低呢?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 jiyiche 的回复:
引用 6 楼 llKK0616 的回复:
我想了想,觉得应该是这样,这是一个模拟I2C的程序,一般I2C模块即为MASTER在第九个SCL下降沿判断SDA是否为低,也就是判断ACK信号,而这个信号是SLAVE设备给出的,判断完后SDA要被MASTER拉高即SDA为1.实际I2C 波形不知道你看过没有,我觉得可以这样理解了。

那第二个程序为什么要拉低呢?

NOACK中的SDA置0是为数据STOP做准备,STOP的条件是SCL为1时,SDA从0到1.

 
 
 

回复

48

帖子

0

TA的资源

一粒金砂(初级)

10
 
    数据传输必须带响应。相关的响应时钟脉冲由主机产生。在响应的时钟脉冲期间,发送器释放SDA线(高)。
    在响应的时钟脉冲期间,接收器必须将SDA线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平(见图7)。当然必须考虑建立和保持时间(在第15章详细说明)。
    通常,被寻址的接收器在接收到的每个字节后,除了用CBUS地址开头的报文,必须产生一个响应。(见10.1.3 节)
    当从机不能响应从机地址时(例如它正在执行一些实时函数不能接收或发送),从机必须使数据线保持高电平。主机然后产生一个停止条件,终止传输或者产生重复起始条件,开始新的传输。
    如果从机接收器响应了从机地址,但是在传输了一段时间后不能接收更多数据字节,主机必须再一次终止传输。这个情况用从机在第一个字节后没有产生响应来表示。从机使数据线保持高电平,主机产生一个停止或重复起始条件。
    如果传输中有主机接收器,它必须通过在从机不产生时钟的最后一个字节不产生一个响应,向从机发送器通知数据结束。从机发送器必须释放数据线,允许主机产生一个停止或重复起始条件。

----------------摘自《I2C规范》-----------------
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

11
 
我正在做24C256的应用,遇到了一点小问题,按字节存取没问题,在连续读时,读完一个字节后就无数据了,好像是单片机必出的确认信号不对,可又不知这个应答信号是怎样的?有谁能给我一个时序图或者一个解决方法,三天了,还是通不过,太郁闷了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表