打印
[51单片机]

问大家一个关于I2C应答的问题

[复制链接]
2043|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我今天开始重点学习I2C向24C02读写的程序,有一点很疑惑:应答信号分应答与非应答,应答信号由24C02发出,但是用单片机进行检测时先把SDA置1然后检测是否会变成零,然后对SCL改变,由此来验证是不是发生应答;而非应答是由单片机发出,先把SDA置0然后再置1,然后改变SCL。我想问的是前后都是把SDA置1,但是非应答只不过没有检测而已,但是24C02同样也会发出SDA的0电平,这不会影响到到非应答信号的发送吗?

相关帖子

沙发
NE5532| | 2014-12-4 21:19 | 只看该作者
楼主把协议理解错了,I2C的应答规则是——谁接收数据,谁就发送应答,24C02作为从机,不但可以发送应答,也可以发送非应答,主机也一样。应答都是在应答位,时钟为高电平期间读取的,楼主描述的“主机把SDA置1”可能因为用的是51单片机,端口要输入之前必须先置1,如果是其他单片机,就不是置1了,而是把端口切换为输入状态。

使用特权

评论回复
板凳
mcuzone| | 2014-12-4 22:28 | 只看该作者
51单片机IO模拟I2C? ZLG有一份I2C的资料,值得一看

使用特权

评论回复
地板
秋水水天|  楼主 | 2014-12-5 07:50 | 只看该作者
NE5532 发表于 2014-12-4 21:19
楼主把协议理解错了,I2C的应答规则是——谁接收数据,谁就发送应答,24C02作为从机,不但可以发送应答,也 ...

对头,我用的是51,看的视频这个地方没有说清楚,就是说单片机读的时候,24C02就不会发送应答了,51的话需要自己写非应答的程序是吧?

使用特权

评论回复
5
ayb_ice| | 2014-12-5 07:54 | 只看该作者
基本协议还没有弄明白

使用特权

评论回复
6
秋水水天|  楼主 | 2014-12-5 07:59 | 只看该作者
mcuzone 发表于 2014-12-4 22:28
51单片机IO模拟I2C? ZLG有一份I2C的资料,值得一看

嗯,我去找找看,谢谢啦

使用特权

评论回复
7
秋水水天|  楼主 | 2014-12-5 07:59 | 只看该作者
ayb_ice 发表于 2014-12-5 07:54
基本协议还没有弄明白

是的。。。

使用特权

评论回复
8
ayb_ice| | 2014-12-5 08:35 | 只看该作者
基本概念

主机产生时钟,所有的传输开始都是主机发起的,每个字节都要应答,谁接收谁应答,非应答信号表明后面的传输即将结束了(一般用于告诉从机释放总线,因为是线与),。。。

使用特权

评论回复
9
NE5532| | 2014-12-5 08:52 | 只看该作者
秋水水天 发表于 2014-12-5 07:50
对头,我用的是51,看的视频这个地方没有说清楚,就是说单片机读的时候,24C02就不会发送应答了,51的话 ...

对,谁接收数据,谁发应答位。

使用特权

评论回复
10
秋水水天|  楼主 | 2014-12-5 16:30 | 只看该作者
ayb_ice 发表于 2014-12-5 08:35
基本概念

主机产生时钟,所有的传输开始都是主机发起的,每个字节都要应答,谁接收谁应答,非应答信号表明 ...

嗯嗯,是。

使用特权

评论回复
11
nightingale2003| | 2014-12-5 21:56 | 只看该作者
NE5532 发表于 2014-12-4 21:19
楼主把协议理解错了,I2C的应答规则是——谁接收数据,谁就发送应答,24C02作为从机,不但可以发送应答,也 ...

版主说的没错,谁接收谁发送应答。不过有一点存在疑问,就是24C02能否发送非应答。
单片机在读数据的时候能根据情况发送应答与非应答,应答说明读到数据,让24C02发送下一帧;而非应答表明已经接收完所有数据,可以不必再传输了。
但单片机写数据时,24C02应该是只能回复应答才对啊,因为是否继续发数据是单片机说了算而不是24C02说了算。应答 就是拉低SDA,告诉单片机自己已经处理完毕,可以发送下一个字节。而没拉低的情况只能说明器件反应不过来或者器件坏了,这种情况不知叫做非应答合不合适?

使用特权

评论回复
12
NE5532| | 2014-12-5 22:35 | 只看该作者
楼主看漏了数据手册里的一个地方——写入数据以后,从机就是通过“非应答”来报告主机,他在忙于数据写入。这就是24C02发送非应答的情况。

楼主提这个问题的原因是把非应答和停止传送混淆了,非应答是I2C协议里的一种时序,24C02是利用了这种时序做“停止传送”这种指示,同样,从机也是用“非应答”来作为给主机的忙应答,这些表示都是24C02的特性,而不是I2C协议里的内容。

使用特权

评论回复
13
秋水水天|  楼主 | 2014-12-6 08:26 | 只看该作者
NE5532 发表于 2014-12-5 22:35
楼主看漏了数据手册里的一个地方——写入数据以后,从机就是通过“非应答”来报告主机,他在忙于数据写入。 ...

我看到数据手册的时序里写数据是没有非应答的呀,只要应答接收到,随时可以stop的。

QQ截图20141206082132.png (21.09 KB )

QQ截图20141206082132.png

使用特权

评论回复
14
NE5532| | 2014-12-6 10:39 | 只看该作者
秋水水天 发表于 2014-12-6 08:26
我看到数据手册的时序里写数据是没有非应答的呀,只要应答接收到,随时可以stop的。
...

都提醒你去看写入数据后查忙的过程啦~!

使用特权

评论回复
15
ningling_21| | 2014-12-6 11:55 | 只看该作者
秋水水天 发表于 2014-12-6 08:26
我看到数据手册的时序里写数据是没有非应答的呀,只要应答接收到,随时可以stop的。
...

非应答是多字节读的时候,结束时发送的,不是写的过程中产生的...

使用特权

评论回复
16
秋水水天|  楼主 | 2014-12-6 17:16 | 只看该作者
本帖最后由 秋水水天 于 2014-12-6 17:21 编辑
NE5532 发表于 2014-12-6 10:39
都提醒你去看写入数据后查忙的过程啦~!

额,因为我的数据手册是英文的,没注意。谢谢大神

使用特权

评论回复
17
秋水水天|  楼主 | 2014-12-6 17:22 | 只看该作者
ningling_21 发表于 2014-12-6 11:55
非应答是多字节读的时候,结束时发送的,不是写的过程中产生的...

同意呀,我去找找数据手册确认一下。

使用特权

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

本版积分规则

36

主题

227

帖子

0

粉丝