why1220 发表于 2013-12-4 14:25:22

关于I2C从设备ACK的问题!

主设备在发送完从设备的地址信息后,作为I2C从设备需要回应一个ACK或不回应,问题是从设备回应的条件是什么?是地址信息相符合就ACK,还是地址信息相符并且还要依据读/写位并且从设备有能力接收/有数据可发送时发送ACK,不能接收/发送数据时就算地址对了也不能ACK?

wyeth 发表于 2013-12-4 15:25:47

一般情况是地址信息相符合就ACK,还真没有遇到过还有设备没有准备好的,设备应该先去准备数据,然后等待主设备来读吧。

sunocean 发表于 2013-12-4 17:53:37

关注,还真没注意过这个问题,等高手

windingway 发表于 2013-12-4 18:12:11

本帖最后由 windingway 于 2013-12-4 18:15 编辑

不同的芯片处理方式不知道是否相同?以下是PIC单片机从模式时的说明:

也就是说从机不具备接受条件时就不会产生ACK信号了.
至于主机读从机则是另外一个情况

sunocean 发表于 2013-12-6 10:43:30

windingway 发表于 2013-12-4 18:12
不同的芯片处理方式不知道是否相同?以下是PIC单片机从模式时的说明:

也就是说从机不具备接受条件时就不会 ...

很好的回答了这个问题,这是从哪截来的,能给我看看全稿吗

ycheng2004 发表于 2013-12-6 11:00:24

本帖最后由 ycheng2004 于 2013-12-6 11:02 编辑

写EEPROM的时间长,如上次的写命令已经完成了,所以,从设备只要空闲时,并且地址信息相符合就ACK,
只要是空闲状态,就可以接受读或写,

why1220 发表于 2013-12-6 11:10:08

《I2C协议标准 》- 周立功单片机一文中,7.2响应一节有文字说明“当从机不能响应从机地址时 例如它正在执行一些实时函数不能接收或发送 从机必须使数据线保持高电平 主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输”。
  也就说一但从设备响应地址后,如果是主发,从收数据的情况下从设备只少具备接收一个字节数据的能力,一个后可以不向主设备发ACK来表示不能再接收数据了;如果是主收,从发数据的情况下从设备无论有没有可以发送的数据,都得不停地向主设备发送数据,无法告之从设备已经没有数据可以发送,这是不是只能通过软件或文档来约定从设备一次可以发送数据的数量!不按这个约定主设备可能收到一些未知的数据是吗?

windingway 发表于 2013-12-6 13:03:26

sunocean 发表于 2013-12-6 10:43
很好的回答了这个问题,这是从哪截来的,能给我看看全稿吗

这是PIC16F883的数据手册上的,估计所有带MSSP模块的PIC单片机的数据手册内容都是类似的吧.

yayagepei 发表于 2013-12-13 18:04:42

从I2C协议的规定来看:每传输一个字节数据(含地址及命令)就要产生一次ACK,也就是说在发送器件地址时(器件地址-7位是一个字节组成),它就会产生一次应答。应答的作用就是确定传输的数据是否被对方收到。命令只要执行到此,接收器件地址匹配之后就会发送一个应答信号。主机得到应答就会开始传输数据,每次一个字节,然后一个应答然后再发一个字节,如此循环。
如果是主收,从发数据的情况下从设备无论有没有可以发送的数据,都得不停地向主设备发送数据,无法告之从设备已经没有数据可以发送,目前是只见过通过软件或文档来约定从设备一次可以发送数据的数量!
希望大神解答!
页: [1]
查看完整版本: 关于I2C从设备ACK的问题!