I2C学习

详情学习

12. I2C通讯 --- [野火]Linux基础与应用开发实战指南------基于LubanCat-RK系列板卡 文档 (embedfire.com)

问题

i2c总线中scl和sda两条线的作用以及区别

在 I2C 总线(Inter-Integrated Circuit)中,SCLSDA 是两条核心信号线,分别承担不同的功能。它们在设备之间的通信中起着至关重要的作用。

1. SCL (Serial Clock Line) --- 时钟线

  • 作用:SCL 线用于提供时钟信号,控制数据的传输速率。在 I2C 通信中,主设备通过 SCL 向从设备发送时钟脉冲,确保数据在正确的时间被读取或写入。
  • 工作原理:每次时钟脉冲同步了 SDA 线上的数据位传输,主设备控制时钟线的频率和周期。
  • 方向:时钟信号是由主设备(Master)发出的,所有设备都通过 SCL 来同步数据传输。

2. SDA (Serial Data Line) --- 数据线

  • 作用:SDA 线用于传输实际的数据。它承载从主设备到从设备或从设备到主设备的数据。
  • 工作原理:数据在每一个时钟脉冲周期内通过 SDA 线传输。数据是按位传输的,每个时钟周期传输一个比特,SDA 的电平(高或低)表示数据的状态。
  • 方向:SDA 线是双向的,可以由主设备或从设备来驱动,具体由当前的通信角色决定。

SCL 和 SDA 的区别

  • 功能区别

    • SCL:负责传输时钟信号,控制数据传输的时序。
    • SDA:负责传输数据,数据的实际值在 SDA 上体现。
  • 方向区别

    • SCL:时钟信号是由主设备产生的,始终由主设备驱动。
    • SDA:数据线是双向的,主设备和从设备都可以在不同时间驱动 SDA 线。

总结

  • SCL 是时钟信号线,控制数据的传输速率和时序,由主设备控制。
  • SDA 是数据传输线,实际传输数据,主设备和从设备都可以在不同时间控制。

为什么连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制 ?

在 I2C 总线中,连接到同一总线上的设备数量是受到 总线最大电容(通常为 400 pF)的限制的,这个限制是由 I2C 总线的物理特性和信号传输的速度要求决定的。

1. 电容对信号传输的影响

  • 电容 会影响信号的 上升时间 (即信号从低电平变为高电平的速度)和 下降时间(即信号从高电平变为低电平的速度)。
  • 当 I2C 总线上的设备增多时,每个设备的输入引脚 都会增加电容,这些电容在总线上形成了一个 总电容。总电容的增大会导致信号的上升和下降时间变长,因为电容需要更多时间来充放电。

2. 影响 I2C 总线的时序和速率

  • 时序要求:I2C 协议有严格的时序要求,特别是信号的上升和下降时间必须在一个合理的范围内,以确保数据能够正确地传输。过高的电容会使得总线的信号上升和下降速度过慢,导致时序错误或数据传输失败。
  • 最大电容限制 :I2C 总线规定了最大总线电容为 400 pF。这个限制是为了确保总线上的信号能够在规定的时序要求下正确传输。如果总线电容超过 400 pF,信号的上升和下降时间可能无法满足规定的要求,从而导致通信错误或数据丢失。

3. 设备数量与电容的关系

  • 每个 I2C 设备都有一定的 输入电容 ,通常在几十皮法(pF)左右。随着设备数量的增加,总线的 总电容 会逐渐增大。如果连接的设备超过一定数量,电容将变得过大,从而影响信号的质量和时序。
  • 除了设备本身的电容,连接线、PCB 布线等也会增加总线电容。因此,I2C 总线的最大连接设备数是由 电容限制信号质量共同决定的。

4. 如何解决电容问题

  • 降低电容:可以通过减少设备数量、优化 PCB 布线、使用更短的连接线等方法来降低总线电容。
  • 降低通信速率:如果设备数量较多,信号传输速度可以降低,以便在较慢的速率下,信号传输时间长一些,有更多时间去充放电。
  • 使用缓冲器或扩展器:可以使用 I2C 总线扩展器(如驱动器、缓冲器)来增加总线的驱动能力,从而减少因电容过大而导致的信号衰减。

总结:

I2C 总线的最大电容限制为 400 pF,主要是为了保证信号传输的质量和时序的准确性。随着设备数量的增加,每个设备引入的电容会增加总线的电容,超过一定值后,信号的上升和下降时间会受到影响,导致通信错误。因此,为了确保 I2C 总线的可靠性,最大电容限制是 400 pF。

I2C上拉电阻

高电平简单理解为高电压,串行电路根据U=IR,上拉电阻能够把总线拉成高电平(自己理解)。

I2C总线为什么要接上拉电阻_24c02芯片为什么要接电阻-CSDN博客

参考

13. I2C通讯 --- [野火]嵌入式Linux基础与应用开发实战指南------基于i.MX6ULL开发板 文档 (embedfire.com)

相关推荐
☆璇8 分钟前
【Linux】传输层协议UDP
linux·运维·udp
孤廖12 分钟前
面试官问 Linux 编译调试?gcc 编译流程 + gdb 断点调试 + git 版本控制,连 Makefile 都标好了
linux·服务器·c++·人工智能·git·算法·github
终焉代码18 分钟前
【Linux】进程初阶(1)——基本进程理解
linux·运维·服务器·c++·学习·1024程序员节
我想吃余19 分钟前
Linux进程间通信:管道与System V IPC的全解析
linux·服务器·c++
egoist202320 分钟前
[linux仓库]打开线程的“房产证”:地址空间规划与分页式管理详解[线程·壹]
linux·页表·地址空间·分页式存储管理·缺页异常
朱嘉鼎1 小时前
寄存器编写LED程序
stm32·单片机·架构·keilmdk
喵了meme1 小时前
Linux学习日记6:文件IO与标准IO
linux·c语言·学习
点灯小铭2 小时前
基于单片机的智能厨房环境控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
LS_learner7 小时前
运放的虚短和虚断
嵌入式硬件
陌路2010 小时前
Linux18--进程间的通信总结
linux