打印
[应用相关]

论I2C的应答与非应答

[复制链接]
1826|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小灵通2018|  楼主 | 2023-5-30 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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,然后给一个时钟周期,高低电平。

使用特权

评论回复
沙发
643757107| | 2023-5-30 11:24 | 只看该作者
一直不明白这个区别,原来是这样啊

使用特权

评论回复
板凳
tpgf| | 2023-6-8 08:43 | 只看该作者
IIC通讯方式是全双工还是半双工还是单工啊

使用特权

评论回复
地板
八层楼| | 2023-6-8 09:35 | 只看该作者
tpgf 发表于 2023-6-8 08:43
IIC通讯方式是全双工还是半双工还是单工啊

IIC通信是串行同步全双工通讯方式

使用特权

评论回复
评论
jobszheng 2023-6-8 09:52 回复TA
基础知识仍需加强哟 
5
jobszheng| | 2023-6-8 09:53 | 只看该作者
按照协议的制定要求来。
尽量严格按照协议实现

使用特权

评论回复
6
观海| | 2023-6-8 10:21 | 只看该作者
如果我们需要等待应答信号的话 设置多长时间的超时等待比较合适呢

使用特权

评论回复
7
guanjiaer| | 2023-6-8 11:35 | 只看该作者
八层楼 发表于 2023-6-8 09:35
IIC通信是串行同步全双工通讯方式

我不是很能理解 iic只有一个数据线以及一个时钟线 是如何做到全双工通讯的呢

使用特权

评论回复
8
heimaojingzhang| | 2023-6-8 12:07 | 只看该作者
全双工是在微处理器与外围设备之间采用发送线和接受线各自独立的方法,可以使数据在两个方向上同时进行传送操作。

使用特权

评论回复
9
keaibukelian| | 2023-6-8 13:04 | 只看该作者
iic太容易出问题,除非是不在意是否已经接收 否则必须要有应答信号

使用特权

评论回复
10
cashrwood| | 2023-7-5 13:45 | 只看该作者
在I2C通信中,设备之间进行数据传输时,接收设备需要发送应答或非应答信号来告知发送设备是否成功接收了数据。

使用特权

评论回复
11
belindagraham| | 2023-7-5 15:09 | 只看该作者
应答和非应答信号是由I2C硬件控制器生成和处理的,应答通常是自动发生的

使用特权

评论回复
12
loutin| | 2023-7-5 15:28 | 只看该作者
在I2C通信协议中,应答和非应答的使用是非常重要的

使用特权

评论回复
13
tifmill| | 2023-7-5 15:37 | 只看该作者
对于某些特殊情况,如接收设备不**继续接收数据或者出现错误,它可能发送非应答信号或者停止位(STOP condition)来终止数据传输。

使用特权

评论回复
14
robincotton| | 2023-7-5 15:44 | 只看该作者
非应答信号是一个高电平,用于表示数据未被成功接收。发送设备在接收到非应答信号后,可以选择停止发送数据或者重新发送当前字节。

使用特权

评论回复
15
51xlf| | 2023-7-5 15:52 | 只看该作者
如果从设备无法接收或不识别所接收的数据,它会发送一个高电平非应答(NACK)。主设备接收到这个非应答后,在数据传输之后通常会发出停止条件,结束通信过程。

使用特权

评论回复
16
febgxu| | 2023-7-5 16:04 | 只看该作者
当接收设备成功接收到一个字节的数据后,它会发送一个应答信号给发送设备。该应答信号是一个低电平脉冲,用于表示数据已经被接收。发送设备在接收到应答信号后,才继续发送下一个字节的数据。

使用特权

评论回复
17
yorkbarney| | 2023-7-5 16:30 | 只看该作者
发送和接收设备需要根据协议规范进行应答和非应答信号的处理,以实现可靠的数据交换。

使用特权

评论回复
18
lzmm| | 2023-7-5 20:59 | 只看该作者
当主设备发送一个字节给从设备时,接收到数据的从设备会返回一个应答位。如果从设备成功接收并需继续传输,它会发出一个低电平应答(ACK),表示肯定应答。主设备接收到应答后,会继续发送下一个字节。

使用特权

评论回复
19
adolphcocker| | 2023-7-6 11:30 | 只看该作者
在I2C通信中,有两种类型的应答:应答(ACK)和非应答(NACK)。

使用特权

评论回复
20
pixhw| | 2023-7-6 12:05 | 只看该作者
在I2C通信中,从设备通过发送ACK或NACK来告知主设备是否成功接收数据,主设备根据接收到的应答位来决定是否继续发送数据或停止通信。

使用特权

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

本版积分规则

136

主题

1544

帖子

4

粉丝