论I2C的应答与非应答
I2C上每当发送完一个字节数据,都要等待对方的应答与非应答信号。如果应答,那就应答,如果非应答,那就什么不做,只跳过这个时钟周期。根据我的经验,很多时候其实是不用管它应答没应答的,除非你对数据的正确性要求极为严格,才需要,否则都可以 跳过,比如都可以如下操作。
void I2C_ACK()
{
digitalWrite(I2C_SDA_PIN, HIGH);
digitalWrite(I2C_SCL_PIN, HIGH);
digitalWrite(I2C_SCL_PIN, LOW);
}
void I2C_NACK()
{
digitalWrite(I2C_SDA_PIN, HIGH);
digitalWrite(I2C_SCL_PIN, HIGH);
digitalWrite(I2C_SCL_PIN, LOW);
}这就是释放SDA,然后给一个时钟周期,高低电平。
一直不明白这个区别,原来是这样啊 IIC通讯方式是全双工还是半双工还是单工啊 tpgf 发表于 2023-6-8 08:43
IIC通讯方式是全双工还是半双工还是单工啊
IIC通信是串行同步全双工通讯方式 按照协议的制定要求来。
尽量严格按照协议实现 如果我们需要等待应答信号的话 设置多长时间的超时等待比较合适呢 八层楼 发表于 2023-6-8 09:35
IIC通信是串行同步全双工通讯方式
我不是很能理解 iic只有一个数据线以及一个时钟线 是如何做到全双工通讯的呢 全双工是在微处理器与外围设备之间采用发送线和接受线各自独立的方法,可以使数据在两个方向上同时进行传送操作。 iic太容易出问题,除非是不在意是否已经接收 否则必须要有应答信号 在I2C通信中,设备之间进行数据传输时,接收设备需要发送应答或非应答信号来告知发送设备是否成功接收了数据。 应答和非应答信号是由I2C硬件控制器生成和处理的,应答通常是自动发生的 在I2C通信协议中,应答和非应答的使用是非常重要的 对于某些特殊情况,如接收设备不**继续接收数据或者出现错误,它可能发送非应答信号或者停止位(STOP condition)来终止数据传输。 非应答信号是一个高电平,用于表示数据未被成功接收。发送设备在接收到非应答信号后,可以选择停止发送数据或者重新发送当前字节。 如果从设备无法接收或不识别所接收的数据,它会发送一个高电平非应答(NACK)。主设备接收到这个非应答后,在数据传输之后通常会发出停止条件,结束通信过程。 当接收设备成功接收到一个字节的数据后,它会发送一个应答信号给发送设备。该应答信号是一个低电平脉冲,用于表示数据已经被接收。发送设备在接收到应答信号后,才继续发送下一个字节的数据。 发送和接收设备需要根据协议规范进行应答和非应答信号的处理,以实现可靠的数据交换。 当主设备发送一个字节给从设备时,接收到数据的从设备会返回一个应答位。如果从设备成功接收并需继续传输,它会发出一个低电平应答(ACK),表示肯定应答。主设备接收到应答后,会继续发送下一个字节。 在I2C通信中,有两种类型的应答:应答(ACK)和非应答(NACK)。 在I2C通信中,从设备通过发送ACK或NACK来告知主设备是否成功接收数据,主设备根据接收到的应答位来决定是否继续发送数据或停止通信。
页:
[1]
2