I2C Mux · Qwiic

TCA9548A 8 通道 I2C 多路复用器资料

适合多个 I2C 模块地址冲突、同地址传感器并联、Qwiic / STEMMA QT 多路扩展。重点:它是 I2C 通道选择器,不是 GPIO 扩展,也不是供电增强板。

Module

  • 芯片:TCA9548A
  • 通道:8 路 I2C 子通道
  • 模块地址:默认常见 0x70,可改 0x70-0x77
  • 尺寸:约 55mm x 35.6mm,以实物为准
  • SKU / 链接:待补充
TCA9548A Qwiic Mux 8 通道 I2C 多路复用器 SKU 和正式淘宝链接待补充;当前页面先整理公开技术资料和测试代码。
进入淘宝店铺

Overview

这个模块是做什么的

TCA9548A 是 8 通道 I2C 多路复用器。主控只占用一组 SDA/SCL,通过写 TCA9548A 的控制寄存器,选择打开 CH0-CH7 中的某一路或多路。

解决地址冲突

两个或多个 I2C 传感器地址一样时,不能直接挂在同一条 I2C 总线上。把它们分别接到不同通道,再由程序切换通道读取。

扩展 Qwiic 接口

模块上有多个 Qwiic / STEMMA QT 风格接口,适合快速插接 I2C 传感器,减少杜邦线接错。

隔离总线问题

某一路模块拉低 SDA/SCL 时,便于逐路排查。实际维修时可以一通道一通道扫地址,定位是哪一路有问题。

Wiring

主控接 TCA9548A,再分到 8 个子通道

主控侧只接 GND、VCC、SDA、SCL 四根线;传感器接到 CH0-CH7 的任意一路。按 SparkFun 官方原理图,Main / Qwiic 接口 1-4 脚线序为 GND、VCC、SDA、SCL。ESP32 是 3.3V 逻辑,接 ESP32 时 VCC 按 3.3V 接,不要把 I2C 上拉到 5V。

TCA9548A Qwiic Mux 实物 Main 主控接口线序标注:GND、VCC、SDA、SCL
实物标注:Main / Qwiic 主控接口按官方原理图确认线序,1 GND、2 VCC/3.3V、3 SDA、4 SCL。

客户问接口顺序时这样回

您好,这个 Qwiic Main 主控口不是按“VCC、SCL、GND、SDA”排列。请按官方原理图 1-4 脚确认:1 GND、2 VCC/3.3V、3 SDA、4 SCL。如果接 ESP32,VCC 请接 3.3V,不要接 5V,否则 SDA/SCL 可能被上拉到 5V,有烧坏 ESP32 IO 的风险。

TCA9548A Qwiic Mux 8 通道 I2C 接线图
TCA9548A 模块Arduino UNOESP32 常用说明
GNDGNDGND必须共地。
VCC / 3.3V3.3V3.3VQwiic 系统一般按 3.3V 使用;接 ESP32 时不要接 5V。
SDAA4 / SDAGPIO21I2C 数据线。
SCLA5 / SCLGPIO22I2C 时钟线。
CH0-CH7每一路再接一个 I2C 模块;同地址模块建议分开接不同通道。

Address

I2C 地址和通道选择

TCA9548A 自己的地址

模块默认地址常见为 0x70。A0、A1、A2 地址脚可以组合成 0x70 到 0x77。具体模块焊盘/跳线以实物丝印为准。

子模块地址不会改变

接在 CH0-CH7 上的传感器地址不变。程序先选通道,再用传感器原来的地址读数据。例如多个 0x29 的 ToF 模块可以分别接 CH0、CH1、CH2。

可以开多个通道吗

芯片允许控制字打开多个通道,但新手排查建议一次只开一路,避免两个相同地址设备同时出现在总线上。

Arduino Code

逐通道 I2C 扫描测试程序

先确认能扫到 TCA9548A 的 0x70,再逐个通道扫描子模块地址。这个程序不依赖专用库,只用 Arduino Wire。

#include <Wire.h>

#define TCA_ADDR 0x70

void tcaSelect(uint8_t channel) {
  if (channel > 7) return;
  Wire.beginTransmission(TCA_ADDR);
  Wire.write(1 << channel);
  Wire.endTransmission();
}

void scanCurrentBus() {
  for (byte address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    byte error = Wire.endTransmission();
    if (error == 0) {
      Serial.print("I2C device found at 0x");
      if (address < 16) Serial.print("0");
      Serial.println(address, HEX);
    }
  }
}

void setup() {
  Serial.begin(115200);
  Wire.begin();          // ESP32 可改成 Wire.begin(21, 22);

  Serial.println("TCA9548A channel scanner");
  Serial.println("Check TCA9548A at 0x70 first:");
  scanCurrentBus();

  for (uint8_t ch = 0; ch < 8; ch++) {
    Serial.print("\nChannel ");
    Serial.println(ch);
    tcaSelect(ch);
    delay(10);
    scanCurrentBus();
  }
}

void loop() {
}

FAQ

常见问题

为什么接了 TCA9548A 后扫描不到传感器?

要先选择通道。主控扫到 0x70 只代表 TCA9548A 在线;接在 CH0-CH7 的传感器,需要程序写入 1 << 通道号 后再扫描。

多个同地址传感器可以同时读吗?

可以分通道轮流读。不要把多个相同地址模块直接并在同一通道上,否则仍然地址冲突。

这个板能不能把 I2C 变成 8 路同时工作?

它是多路选择器,不是 8 个独立 I2C 控制器。主控仍然是一条 I2C,总线按程序选择通道后轮询读取。

能不能当电平转换用?

不要把它当万能电平转换器。成品模块的上拉、电源和 Qwiic 线序要看板子设计;ESP32 场景请按 3.3V 总线使用,避免 SDA/SCL 被上拉到 5V。

Qwiic 接口的红线接多少电压?

Qwiic 系统一般偏 3.3V。本页对客户默认写 VCC / 3.3V;接 ESP32 时请接 3.3V,不要接 5V。

Support

需要技术支持时,把这几项一起发来

复制下面这段填一下发给客服,我们一次就能定位,不用来回问。

【TCA9548A 8 通道 I2C 多路复用器资料 技术支持】
主控型号:            (如 Arduino UNO / ESP32 / STM32)
供电接的是:          □ 3.3V   □ 5V
I2C Scanner 扫到的地址:
串口显示的内容:
用的是哪份代码:      □ 本页示例   □ 其他(请说明)
接线照片:            (请附一张能看清接线的照片)

References

官方与公开资料