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 个子通道

主控侧只接 VIN、GND、SDA、SCL 四根线;传感器接到 CH0-CH7 的任意一路。Qwiic 红线不要固定理解为 5V,电压按模块和传感器说明为准。

TCA9548A Qwiic Mux 8 通道 I2C 接线图
TCA9548A 模块Arduino UNOESP32 常用说明
VIN / VCC5V 或 3.3V3.3V按模块支持电压和传感器电压选择。
GNDGNDGND必须共地。
SDAA4 / SDAGPIO21I2C 数据线。
SCLA5 / SCLGPIO22I2C 时钟线。
CH0-CH7每一路再接一个 I2C 模块;同地址模块建议分开接不同通道。

Address

I2C 地址和通道选择

TCA9548A 自己的地址

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

子模块地址不会改变

接在 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,总线按程序选择通道后轮询读取。

能不能当电平转换用?

TI 芯片本身有 I2C 总线隔离/电压相关能力,但成品模块的上拉、电源和 Qwiic 线序要看板子设计。客户使用 5V 主控接 3.3V 传感器时,仍建议确认模块是否适合该电平,不要只把它当万能电平转换器。

Qwiic 接口的红线接 5V 还是 3.3V?

Qwiic 系统一般偏 3.3V。红线建议写 VCC / V+,不要固定写死 5V;最终按模块 VIN/VCC 说明和传感器支持电压来接。

Customer Reply

淘宝客户简短话术

您好,TCA9548A 这个模块是 I2C 多路复用器,主要用来解决多个 I2C 模块地址相同的问题。主控先选 CH0-CH7 其中一路,再读取该通道上的传感器。

您好,请先用 I2C 扫描确认能扫到 TCA9548A 的地址,常见是 0x70。然后程序里先选择通道,再扫描子模块地址;如果没有选择通道,是扫不到后面传感器的。

您好,Qwiic 红线不要固定理解成 5V,建议按 VCC/V+ 看待。Qwiic 常用 3.3V,具体供电请按您接的主控和传感器模块说明来接,GND 必须共地。

References

官方与公开资料