I2C通讯协议

来源:

https://www.cnblogs.com/linhaostudy/p/6709811.html

正文

回到顶部

1、基本概念

  主机            初始化发送,产生时钟信号和终止发送的器件

      从机             被主机寻址的器件

  发送器          发送数据到总线的器件

      接收器         从总线接收数据的器件

      多主机         同时有多于一个主机尝试控制总线 但不破坏报文

      仲裁           是一个在有多个主机同时尝试控制总线,但只允许其中一个控制总线并使报文不被破坏的过程

      同步           两个或多个器件同步时钟信号的过程

回到顶部

2、硬件结构

每一个I2C总线器件内部的SDA、SCL引脚电路结构都是一样的,引脚的输出驱动与输入缓冲连在一起。其中输出为漏极开路的场效应管、输入缓冲为一只高输入阻抗的同相器。这种电路具有两个特点:

(1)由于 SDA、SCL 为漏极开路结构,借助于外部的上拉电阻实现了信号的“线与”逻辑; 
(2)引脚在输出信号的同时还将引脚上的电平进行检测,检测是否与刚才输出一致。为 “时钟同步”和“总线仲裁”提供硬件基础。

回到顶部

3、时钟同步

如果从机希望主机降低传送速度可以通过将SCL主动拉低延长其低电平时间的方法来通知主机,当主机在准备下一次传送发现SCL的电平被拉低时就进行等待,直至从机完成操作并释放SCL线的控制控制权。这样以来,主机实际上受到从机的时钟同步控制。可见SCL线上的低电平是由时钟低电平最长的器件决定;高电平的时间由高电平时间最短的器件决定。这就是时钟同步,它解决了I2C总线的速度同步问题。

回到顶部

4、主机发送数据流程

(1)主机在检测到总线为“空闲状态”(即 SDA、SCL 线均为高电平)时,发送一个启动信号“S”,开始一次通信的开始

(2)主机接着发送一个命令字节。该字节由 7 位的外围器件地址(设备地址)和 1 位读写控制位 R/W组成(此时 R/W=0)

通常最低一位就是R/W位,,“0”表示写,“1”表示读(通常读写信号中写上面有一横线,表示低电平)

 

(3)相对应的从机收到命令字节后向主机回馈应答信号 ACK(ACK=0)

(4)主机收到从机的应答信号后开始发送第一个字节的数据

(5)从机收到数据后返回一个应答信号 ACK

(6)主机收到应答信号后再发送下一个数据字节

(7)当主机发送最后一个数据字节并收到从机的 ACK 后,通过向从机发送一个停止信号P结束本次通信并释放总线。从机收到P信号后也退出与主机之间的通信。

注意:主机所接收数据的数量是由主机自身决定,当发送“非应答信号/A”时从机便结束传送并释放总线(非应答信号的两个作用:前一个数据接收成功,停止从机的再次发送)。

I2C位传输
   数据传输:SCL为高电平时,SDA线若保持稳定,那么SDA上是在传输数据bit;
   若SDA发生跳变,则用来表示一个会话的开始或结束(后面讲)
   数据改变:SCL为低电平时,SDA线才能改变传输的bit

 

 

I2C开始和结束信号
   开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
   结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

 另外I2C的通信速率为100Kb,快速为400Kb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
I2C通信协议的代码实现可以通过编程语言如C语言来实现。在STM32开发板上,可以使用硬件I2C控制器来实现I2C通信。你可以参考引用中提供的链接,这些链接提供了关于STM32下模拟I2C的C语言实现和I2C协议的基本原理的文章。这些文章可以帮助你理解和实现I2C通信协议的代码。 要实现I2C通信协议的代码,你需要了解I2C协议的基本原理和时序要求,以及如何在硬件上配置和使用I2C控制器。通常,你需要使用两根线,即SCL和SDA线,其中SCL线用于传输同步脉冲信号,SDA线用于半双工传输信号。你还需要使用适当的I/O接口或者I2C控制器来控制通信。 在代码实现中,你需要根据具体的应用场景和设备需求,使用适当的库函数或者底层操作来进行I2C通信的初始化、数据传输和设备操作。具体的代码实现可以根据你的开发板和目标设备的硬件和软件要求而有所不同。 因此,你可以参考引用中提供的文章和代码示例,以便更好地理解和实现I2C通信协议的代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [I2C协议+实现源码](https://blog.csdn.net/weixin_41995541/article/details/89843330)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值