7 years C/C++/C# programing, focus on embedded and mobile device development.

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  72 随笔 :: 1 文章 :: 132 评论 :: 5 引用

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.

posted on 2011-04-07 11:49 woaiusd 阅读(148) 评论(1) 编辑 收藏

评论

#1楼[楼主] 2011-04-07 17:17 swnuwangyun      
The main reason that the Sr bit exists is in a multi master configuration where the current bus master does not want to release its mastership. Using the repeated start keeps the bus busy so that no other master can grab the bus.

Because of this when used in a Single master configuration it is just a curiosity.
 回复 引用 查看