总线技术|接口技术
直播中

兵兵

11年用户 59经验值
擅长:模拟技术 嵌入式技术
私信 关注
[问答]

I2C的应答问题

I2C往EEPROM里面写数据的时候,应答ACK信号在第九个SCL的时候输出,这句话好模糊啊,是不是说第九个SCL的时候没有输出ACK,那就是丛机不应答呢?万一第九个SCL来得太快了,丛机来不及应答呢?如果丛机应答了ACK,那这个ACK是不是第九个SCL之后就没有了呢?还是说只要主机不去获取SDA线控制权,这个应答都存在呢?


补充内容 (2016-3-21 18:59):
或许我没有说清楚吧,是不是只有在master将数据传完后,然后必须再发送一个SCL(第九个时钟)进入EEPROM,EEPROM才会在SDA输出0(ACK),(PS:我知道此时SDA为读取状态)。如果是这样的话,那ACK是在第九个SCL的上升沿输出呢,还是下降沿输出?ACK有效信号维持多久?半个SCL的时间吗?还是说ACK的输出根本就不要第九个SCL,EEPROM输出的ACK信号只是刚好跟第九个SCL的时间差不多呢?

回帖(7)

icebreakerNK

2016-3-20 17:25:46

最佳答案

I2C每发送一个Byte的数据,后面都要跟个应答位,不管是主给从发还是从给主发。也就是一个操作需要9个时钟周期。ACK在第9个SCL的上升沿之前就要发出,保持到下降沿结束。有效信号比半个SCL周期要长。相当于:setup 时间+半个SCL周期+hold 时间。具体的值可以参考I2C的spec文档。
希望能帮到你
举报

张大猛

2016-3-21 18:16:19
数据是一个个发送   有应答为和检验应答位    你上网搜一下的时序图  一看就明白
举报

兵兵

2016-3-21 18:48:01
引用: 张大猛 发表于 2016-3-21 18:16
数据是一个个发送   有应答为和检验应答位    你上网搜一下的时序图  一看就明白

时序我看得懂,I2C没有校验位的。I2C是串行通信,我当然知道数据是一位一位的,请不要答非所问。
举报

兵兵

2016-3-21 22:36:47
电子发烧友上面都没有人嘛好像。
举报

兵兵

2016-4-29 22:50:10
还是你的回答解决了我的困惑,太谢谢你了。
举报

兵兵

2016-4-29 22:51:10
引用: icebreakerNK 发表于 2016-3-20 17:25
I2C每发送一个Byte的数据,后面都要跟个应答位,不管是主给从发还是从给主发。也就是一个操作需要9个时钟周期。ACK在第9个SCL的上升沿之前就要发出,保持到下降沿结束。有效信号比半个SCL周期要长。相当于:setup 时间+半个SCL周期+hold 时间。具体的值可以参考I2C的spec文档。
希望能帮到你 ...

还是你的回答解决了我的困惑,谢谢你啦。
举报

805266609

2016-7-30 08:55:44
一般未处理完数据之前从机会拉低CLK,主机等待CLK被释放,直到从机释放CLK(从机处理完成并响应应答),CLK保持高一段时间后再由主机拉低,即产生第九个时钟;

如果使用GPIO模拟I2C,也可以模拟出此功能.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分