Published on

I2C - SDA <> SCL

I2C 是什么

Inter-Integrated Circuit (I2C) 是一种 短距离、低速、两线式 的通信协议,用于让同一个电路板上的多个芯片之间交换数据。

干的事:让一个主设备(如 Jetson)和多个从设备(如传感器、显示屏、IO 扩展芯片)通过 两根线 连接并通信。


SDA 和 SCL 各负责什么

引脚全称作用比喻
SDASerial Data Line传输数据(0 和 1 的序列)快递员(运送货物)
SCLSerial Clock Line同步时钟(决定什么时候读数据)发令员(规定节奏)

工作过程(简短版)

  1. 主设备(Jetson)通过 SCL 发出时钟信号
  2. 在每一个时钟脉冲内,SDA 线上传输 1 位数据(0 或 1)
  3. 接收方根据 SCL 的节奏来读取 SDA 上的数据

一句话:SCL 决定“什么时候读”,SDA 决定“读到的内容是 0 还是 1”。


类比理解

假设两个人用 手电筒 + 节拍器 通信:

元素类比
SDA手电筒(亮 = 1,灭 = 0)
SCL节拍器(每拍读取一次手电筒状态)
通信过程节拍器响一下,读一下手电筒是亮还是灭

没有 SCL(节拍器),接收方不知道什么时候该去读 SDA(手电筒)。


在你之前的项目中

你在 Jetson 上用 Python 操作 GPIO 模拟 I2C 通信时:

# SDA 和 SCL 需要按照时序要求拉高/拉低
GPIO.output(SDA_PIN, GPIO.HIGH)  # 发送 1 位数据
GPIO.output(SCL_PIN, GPIO.HIGH)  # 产生时钟脉冲
time.sleep(0.0001)               # 保持一段时间
GPIO.output(SCL_PIN, GPIO.LOW)   # 时钟脉冲结束

这就是在手动模拟 I2C 协议。实际开发中通常用硬件 I2C 控制器(如 Jetson 的 /dev/i2c-1),不需要手动翻转引脚。

THE END