理解i2c的repeate start

Repeated Start Condition

A way to claim the bus
During an I2C transfer there is often the need to first send a command and then read back an answer right away. This has to be done without the risk of another (multimaster) device interrupting this atomic operation. The I2C protocol defines a so-called repeated start condition. After having sent the address byte (address and read/write bit) the master may send any number of bytes followed by a stop condition. Instead of sending the stop condition it is also allowed to send another start condition again followed by an address (and of course including a read/write bit) and more data. This is defined recursively allowing any number of start conditions to be sent. The purpose of this is to allow combined write/read operations to one or more devices without releasing the bus and thus with the guarantee that the operation is not interrupted

在这里插入图片描述
Regardless of the number of start conditions sent during one transfer the transfer must be ended by exactly one stop condition.

正常来讲:

当我们发送开始命令, 然后发送数据,收到应答,发送数据,收到应答,循环,直到收到停止位,算是通信结束。

这样会产生一个问题:
例如我们读I2C:

读的过程:start信号,从设备地址,写,待读取存储地址,stop。再一个start信号,从设备地址,读,8个时钟,从设备就把对应的数据反馈给处理器。

那么问题是,当我们写stop收到后,再发start读的时候,这个间隙会不会被打断?

有可能的,所以例如读I2C的时候应该这样

读的过程:start信号,从设备地址,写,待读取存储地址,restart,从设备地址,读,8个时钟,从设备就把对应的数据反馈给处理器。
这样就连贯了,是个原子操作了。

参考:https://www.i2c-bus.org/repeated-start-condition/
参考:https://www.ti.com/lit/an/slva704/slva704.pdf

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_kerneler

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值