← AXL-007

Circuit review & bench-test guide

AXL-007 — I2C hub PMOD module (TCA9548A)

Design-stage — board not yet fabricated

Document purpose#

This document explains the axl-007-i2c-hub prototype at component level and turns the design evidence into a practical manual-review and bench-test plan. It is based on the generated schematic (generate_design.py, rev 0.1-schematic, 2026-07-12), the README, and the TI TCA9548A datasheet.

The board is a design-stage prototype. The schematic is generated and ERC clean per reports/erc.rpt (2026-07-12: 0 errors / 0 warnings, with the standard ignored-check list) and the netlist has been reviewed, but PCB layout has not started and no board has been fabricated or assembled. There is no first-article bench result of any kind. Every expected value below is a design target to verify, not proof that an assembled board works.

1. What the board does#

The board is a 12-pin PMOD (Type 6 extended, I2C) module carrying a TI TCA9548A 8-channel bidirectional I2C switch. The upstream PMOD bus (SCL/SDA on pins 3/4, repeated on 9/10) fans out to mux channels 0–3, each terminated in a Qwiic socket (JST SM04B-SRSS-TB). Writing one control byte to address 0x70 connects any channel — or combination of channels — to the upstream pair, which resolves address clashes when a class chains many identical sensor modules: two same-address sensors on two channels is the canonical demo. Channels 4–7 are unconnected in rev 1 (four Qwiic sockets are what fits the 20 mm module outline).

Upstream pull-ups (4.7 kΩ, removable via solder jumpers JP1/JP2) follow the lab-line convention. Each downstream channel carries its own fixed 4.7 kΩ pull-up pair — a deselected mux segment is electrically floating and cannot borrow the upstream pull-ups; this is the schematic's stated lesson. ~RESET is host-driven directly on PMOD pin 2 with a 10 kΩ default-run pull-up (R11), so the hub runs unless the host deliberately resets it.

Functional block diagram#

PMOD J1                       U1 TCA9548A (TSSOP-24)
 2 RESET_N ──┬──────────────  ~RESET (pin 3)
             └─ R11 10k ── 3V3
 3/9  SCL ──┬── JP2 ── R2 4.7k ── 3V3     SCL ──┐ 8-ch switch, ctrl reg
 4/10 SDA ──┴── JP1 ── R1 4.7k ── 3V3     SDA ──┤ addr 0x70 (A0-A2 = GND)
 5/11 GND, 6/12 3V3 ── C1 100n, C2 1u ──  VCC = 3V3, GND
                                                │
   ch0: SD0/SC0 ── R3/R4 4.7k to 3V3 ── J2 Qwiic (1 GND, 2 3V3, 3 SDA, 4 SCL)
   ch1: SD1/SC1 ── R5/R6 4.7k to 3V3 ── J3 Qwiic
   ch2: SD2/SC2 ── R7/R8 4.7k to 3V3 ── J4 Qwiic
   ch3: SD3/SC3 ── R9/R10 4.7k to 3V3 ── J5 Qwiic
   ch4-7: SD4-7/SC4-7 no-connect (rev 1)

2. Safety and scope boundaries#

3. Power and control sequence#

  1. 3V3 and GND arrive on PMOD pins 6/12 and 5/11; C1 (100 nF) decouples U1 and C2 (1 µF) provides module bulk.
  2. The TCA9548A's internal power-on reset holds it in reset until VCC passes V_PORR (1.2 V typ, 1.5 V max). Registers and the I2C state machine then initialize to all zeroes: the control register reads 0x00 and all eight channels are deselected at power-up (datasheet Section 7.4.2). Every downstream segment sits isolated, held at 3V3 by its own pull-up pair.
  3. A0–A2 are hardwired to GND, so the device answers at 7-bit address 0x70 (1110000b). There are no address straps on this board.
  4. ~RESET idles high through R11 (10 kΩ). The host may drive PMOD pin 2 low (≥6 ns) at any time: registers and state machine reset, all channels deselect, and a stuck SDA is released within 500 ns (datasheet 7.4.1, 5.7/5.8). If the host leaves pin 2 floating, R11 keeps the hub running.
  5. The host writes a single control byte — no register pointer exists — where bit n enables channel n. It then addresses downstream devices as if they were alone on the bus. Reading one byte from 0x70 returns the control register.
  6. Deselecting (write 0x00) or resetting returns every segment to its isolated, pulled-up idle state.

4. Interfaces and pin maps#

PMOD pin123456789101112
NetNCRESET_NSCLSDAGND3V3NCNCSCLSDAGND3V3

Qwiic sockets (all four identical; standard Qwiic pinout):

SocketMux channelPin 1Pin 2Pin 3Pin 4
J20GND3V3SD0SC0
J31GND3V3SD1SC1
J42GND3V3SD2SC2
J53GND3V3SD3SC3

U1 connections actually used (TSSOP-24 pin numbers per datasheet Table 4-1): A0/A1/A2 (pins 1/2/21) = GND, ~RESET (3) = RESET_N, SD0–SD3/SC0–SC3 (4–11) = channels 0–3, GND (12), SD4–SD7/SC4–SC7 (13–20) = no-connect, SCL (22), SDA (23), VCC (24) = 3V3.

I2C address strap review (datasheet Table 7-1 vs this board):

A2 A1 A0 wiring7-bit addressAvailable on this board?
GND GND GND0x70 (1110000b)Yes — hardwired, the only option
any pin to VCC0x71–0x77No — A0–A2 are not strapped or jumpered

So exactly one AXL-007 can sit on an upstream bus (a second hub would clash at 0x70 unless placed behind a channel of the first — legal, but untested). The 0x70–0x77 range also collides with some Qwiic devices (e.g. other muxes, some LED drivers); keep such parts downstream, never upstream.

5. Component-by-component review#

Every reference designator in generate_design.py appears below. #FLG01 and #FLG02 are ERC power-flag pseudo-components on 3V3 and GND; they have no physical footprint and are listed only for completeness.

Ref.Part / valueFunction and why neededIf absent/openIf shorted, wrong, or misassembled
J112-pin PMOD plug (I2C, doubled on pins 9/10; pin 2 = RESET_N)Host power, upstream I2C, and reset connectionNo power or busOffset insertion puts 3V3 on signal pins; verify orientation
U1TI TCA9548APWR, TSSOP-24 (PW)8-channel translating I2C switch with reset — the entire module functionNo channel selection; downstream segments permanently isolatedRotated package scrambles the pinout (VCC is diagonal from A0); SDA/SCL bridge hangs the upstream bus; a bridged SCn/SDn pair hangs one channel
J2JST SM04B-SRSS-TB(LF)(SN) Qwiic, channel 0Downstream socket: 1 GND, 2 3V3, 3 SD0, 4 SC0Channel 0 unusableMirrored footprint swaps GND/SCL ends and back-feeds attached devices; the JST SH shell is keyed, so raw miswiring needs a wrong footprint, not a wrong cable
J3Same, channel 1Same for SD1/SC1Channel 1 unusableSame as J2
J4Same, channel 2Same for SD2/SC2Channel 2 unusableSame as J2
J5Same, channel 3Same for SD3/SC3Channel 3 unusableSame as J2
R14.7 kΩ 0603 (Yageo RC0603FR-074K7L)Upstream SDA pull-up (3V3 to SDA_PU, through JP1)Upstream bus works only if the host provides pull-upsToo small stiffens the bus; parallels with host pull-ups if both present
R24.7 kΩ 0603Upstream SCL pull-up (through JP2)Same as R1Same as R1
R34.7 kΩ 0603Channel 0 SDA pull-up — fixed, no jumper: a deselected segment floats otherwiseSegment idles undefined when no device with its own pull-ups is attached; glitches on every channel switchShort to 3V3 holds SD0 high permanently, channel 0 dead
R44.7 kΩ 0603Channel 0 SCL pull-up (fixed)Same as R3Same as R3
R54.7 kΩ 0603Channel 1 SDA pull-upSame as R3Same as R3
R64.7 kΩ 0603Channel 1 SCL pull-upSame as R3Same as R3
R74.7 kΩ 0603Channel 2 SDA pull-upSame as R3Same as R3
R84.7 kΩ 0603Channel 2 SCL pull-upSame as R3Same as R3
R94.7 kΩ 0603Channel 3 SDA pull-upSame as R3Same as R3
R104.7 kΩ 0603Channel 3 SCL pull-upSame as R3Same as R3
R1110 kΩ 0603 (Yageo RC0603FR-0710KL)~RESET pull-up: hub runs unless the host drives PMOD 2 low; datasheet requires the pin pulled up when unused~RESET floats — spurious resets, channels drop randomlyShort to 3V3 defeats host reset (recovery from a stuck bus then needs a power cycle)
C1100 nF 16 V X7R (Murata GRM188R71C104KA01D)U1 decouplingNoisier switching, worse transient immunityShort kills the rail (host/supply limit should catch it)
C21 µF 10 V X7R (Murata GRM188R71A105KA61D)Module bulk decoupling for hot-plugged Qwiic loadsRail dips on Qwiic hot-insertSame as C1
JP12-pad solder jumper, bridged (DNP in BOM/POS)Disconnects R1 when the host or a chained module provides the upstream SDA pull-upIf cut with no other SDA pull-up: upstream bus hangsRe-bridge with solder to restore
JP22-pad solder jumper, bridgedSame for SCL/R2Same as JP1Same as JP1
#FLG01/#FLG02ERC power flags (3V3, GND)Schematic ERC bookkeeping onlyERC warningsNot applicable; no physical part

Note there are deliberately no jumpers on the downstream pull-ups (R3–R10). If a Qwiic device that carries its own pull-ups (common; often 2.2 kΩ) is attached, the segment's effective pull-up drops to ~1.5 kΩ and the upstream-plus-segment total when selected approaches the 3 mA I2C sink budget. One device per channel is the design intent; daisy-chaining several pull-up-equipped Qwiic boards on one channel needs a pull-up audit.

6. Datasheet summary and design interpretation#

Consulted: TI TCA9548A datasheet SCPS207H (May 2012 – revised September 2024), <https://www.ti.com/lit/ds/symlink/tca9548a.pdf>, product page <https://www.ti.com/product/TCA9548A>.

Manufacturer fact (SCPS207H)Board-specific interpretation
Supply 1.65–5.5 V (1.65–3.6 V above 85 °C); I_CC 6 µA typ at 100 kHz / 3.6 V, 20 µA typ at 400 kHz / 3.6 V, standby 0.1 µA typ3.3 V PMOD rail fits; the mux itself is negligible next to pull-up and Qwiic-device current
Single 8-bit control register, no register pointer: the data byte follows the address directly on writes; a 1-byte read returns the register (Sections 7.5.3, Figure 7-4)Exact wire bytes in Section 9.C; there is nothing else to configure
Power-on reset initializes registers and state machine to all zeroes — all channels deselected (7.4.2); V_PORR 1.2 V typ / 1.5 V max rising, V_PORF 1 V typ fallingFirst readback after power-up must be 0x00; any other value means a prior write survived or the part never reset
A2–A0 select 0x70–0x77 (Table 7-1)All three grounded here: 0x70 only, one hub per upstream bus
~RESET active low, t_W(L) ≥ 6 ns; resets registers/state machine, deselects all channels, releases a stuck SDA within 500 ns; must be pulled up if unused (7.4.1, 5.7, 5.8)Routed to PMOD 2 with R11 10 kΩ — the deliberate recovery path for a hung downstream segment (Section 9.G)
Switch R_ON 5–30 Ω (12 Ω typ) at VCC 3–3.6 V, V_O = 0.4 V, I_O = 15 mAAdds ~10–20 mV to downstream low levels at typical bus currents — measurable, harmless
Pass-gate switch output V_o(sw) only ~1.9 V typ at VCC = 3.3 V with a −100 µA load: the switch cannot pull a segment high; the external pull-ups on each side set the high level (Section 5.5; Description)This is why R3–R10 exist per channel: a deselected segment has no path to any pull-up and floats
Voltage translation: each SCn/SDn pair may run at its own pull-up voltage (1.8/2.5/3.3 vs 5 V), with VCC limiting the passed high levelUnused here: every segment's pull-ups and Qwiic power pin are the same 3V3 rail. Do not retrofit a 5 V segment — the sockets feed devices 3V3 regardless
I2C standard (0–100 kHz) and fast (0–400 kHz) modes; C_b budget 400 pF per bus line; I/O 5 V tolerantBring up at 100 kHz, run at 400 kHz; selected segments' capacitance adds to the upstream bus (multi-select worsens this)
Any combination of channels may be enabled simultaneously (Description)Legitimate for broadcasting writes to identical devices; never for reads of same-address devices (collisions) — see Section 9.H

Check the latest datasheet revision before procurement.

7. Expected values before bench testing#

Targets assume VDD = 3.300 V and address 0x70. All are design targets, not measured results.

QuantityDesign target / calculatedWhat to measure
Supply current, no Qwiic devices, bus idle~0.1–2 µA device + leakageBench supply, standalone context
Supply current, 100 kHz traffic, no devices~6 µA device + ~0.7 mA per line held low (3.3 V / 4.7 kΩ) averaged by dutySame
VCC at U1 pin 243.300 VDMM
RESET_N idle (PMOD 2 open)3.3 V through R11DMM
SDA (and SCL) to 3V3, unpowered, JP1/JP2 bridged~4.7 kΩOhmmeter
Each SDn/SCn to 3V3, unpowered~4.7 kΩ (all channels off when unpowered; segments isolated)Ohmmeter, all 8 downstream pins
Any SDn to upstream SDA, unpoweredOpen (>1 MΩ apart from the two pull-ups in series via 3V3, ~9.4 kΩ)Ohmmeter — note the 9.4 kΩ through-the-rail path is normal
I2C scan, upstreamACK only at 0x70 (no devices attached, all channels off)Adapter address scan
Control register at power-up0x00First read, Section 9.C
Readback after each select writeEchoes the written byte exactlySection 9.C walk
Idle level, every SDn/SCn, powered, deselected3.3 V (own pull-ups — the lesson)DMM/scope at each Qwiic pin 3/4
Low level at a selected Qwiic pin while host drives upstream lowV_OL(host) + I_seg × R_ON ≈ host low + ~10–20 mV (R_ON 12 Ω typ, 30 Ω max)Scope, Section 9.F
Effective pull-up, channel N selected, bare segmentR1 ∥ R_chN ≈ 2.35 kΩ → ~1.4 mA sink at lowCalculated; verify low levels
Same with one pull-up-equipped Qwiic device (assume 2.2 kΩ)≈ 1.16 kΩ → ~2.8 mA sink — at the I2C 3 mA budgetAudit each attached device
~RESET recoveryPulse ≥ 6 ns low; SDA released ≤ 500 ns; register reads 0x00 afterSection 9.G

8. Manual schematic and assembly review checklist#

9. Ordered bench-test procedure#

Stop at the first abnormal result. Record board serial, host identity, bus speed, measured VDD, and the identity of every attached Qwiic device.

A. Unpowered inspection and resistance tests#

  1. Complete the checklist above under magnification.
  2. Measure 3V3-to-GND resistance in both polarities; investigate < 1 kΩ.
  3. Confirm SDA, SCL, and all eight SDn/SCn pins each read ~4.7 kΩ to 3V3, RESET_N reads ~10 kΩ to 3V3, and no signal is shorted to a neighbor or to GND.

B. First power, no I2C traffic, no Qwiic devices#

Context (a) — PMOD host: plug into a 3.3 V PMOD port on the ECP5 host (ULX3S-class) with the FPGA unconfigured. Context (b) — standalone: wire 3V3/GND from a current-limited bench supply and SDA/SCL from a 3.3 V lab adapter (Raspberry Pi Pico, FT2232H, Bus Pirate — I2C mode); leave RESET_N open (R11 holds it high) or wire it to an adapter GPIO for Section 9.G.

  1. Supply current in the microamp band; SDA, SCL, RESET_N, and all eight downstream SDn/SCn pins sit at 3.3 V. A downstream pin at 3.3 V with all channels off is the per-channel pull-ups doing their job.
  2. Measure VCC at U1 pin 24.

C. Control-register bring-up (exact bytes)#

Bus speed 100 kHz for bring-up. Address 0x70 means write byte 0xE0 and read byte 0xE1 on the wire. The TCA9548A has a single control register and no register pointer: a write is address + one data byte, a read is address + one returned byte — nothing else.

  1. Power-up readback. S 0xE1 [byte] P. Expect 0x00 — all channels deselected, per the power-on reset. An ACK on 0xE1 at all is the first pass criterion; NACK means solder or address trouble (A0–A2 are hardwired, so there is no strap to check — go to U1 pins 1/2/21).
  2. Channel walk with readback. For each pattern, write then read:
Write on the wireSelectsReadback expected
S 0xE0 0x01 Pchannel 0 (J2)S 0xE1 → 0x01
S 0xE0 0x02 Pchannel 1 (J3)0x02
S 0xE0 0x04 Pchannel 2 (J4)0x04
S 0xE0 0x08 Pchannel 3 (J5)0x08
S 0xE0 0x10 Pchannel 4 — no external segment on this board0x10
S 0xE0 0x20 Pchannel 5 — same0x20
S 0xE0 0x40 Pchannel 6 — same0x40
S 0xE0 0x80 Pchannel 7 — same0x80
S 0xE0 0x00 Pnothing (all off)0x00
S 0xE0 0x03 Pchannels 0 and 1 together0x03

Every readback must echo the write exactly. 0x10–0x80 are register-only checks here: the register accepts them, but the switch outputs go to unconnected pins (rev 1). Multi-select (0x03 and similar) is legitimate only for broadcasting writes to identical devices — reading two same-address devices at once corrupts data (both drive SDA); see 9.H.

  1. Finish with S 0xE0 0x00 P and confirm 0x00 back.

D. Per-channel bus scan with one device#

  1. Attach one known-good Qwiic device (e.g. an AXS-line sensor module) to J2. With the control register at 0x00, scan the upstream bus: only 0x70 ACKs — the device is invisible.
  2. Write 0xE0 0x01, rescan: the device's address now ACKs alongside 0x70.
  3. Write 0xE0 0x02 (wrong channel), rescan: the device disappears again.
  4. Move the device to J3, J4, J5 in turn and repeat with 0x02/0x04/0x08. Each socket must make the device appear only under its own bit.

E. Downstream isolation with two same-address devices#

This is the board's reason to exist. Use two devices with the same I2C address whose readings can be told apart — e.g. two AXS-032 ADS1115 modules both strapped 0x48, one with AIN0 grounded and one with AIN0 on a divider, or two identical temperature sensors with one warmed.

  1. Device A on J2 (channel 0), device B on J3 (channel 1). Control register 0x00: scan shows neither ACKs at 0x48; only 0x70 answers.
  2. S 0xE0 0x01 P: scan shows 0x48. Read the distinguishing value — it must match device A (e.g. the grounded-input reading).
  3. S 0xE0 0x02 P: scan again shows 0x48 — same address, but the reading must now match device B. The same address answering with physically different data under different control bytes is the pass criterion.
  4. S 0xE0 0x00 P: neither device ACKs at 0x48 again.
  5. Negative test: S 0xE0 0x03 P (both channels), then attempt a read at 0x48 — expect corrupted/ANDed data or an analyzer error, never trust it. This demonstrates why multi-select reads of clashing addresses are illegal; a broadcast write (e.g. the same config to both ADCs) is the one legitimate multi-select use with clashing addresses.

F. Per-channel pull-up and low-level checks#

Upstream pull-ups are R1/R2 behind JP1/JP2; every downstream segment has fixed R3–R10. No segment on this board relies on the attached device's pull-ups — the fixed pairs guarantee a defined idle even with bare-die-style modules attached.

  1. Unpowered, jumpers bridged: each channel's SDA/SCL (Qwiic pins 3/4) to 3V3 reads ~4.7 kΩ; upstream SDA/SCL likewise ~4.7 kΩ.
  2. Unpowered, JP1/JP2 cut (do this once, deliberately, then re-bridge): upstream SDA/SCL to 3V3 goes open (megohms); the downstream readings do not change — proving the downstream pull-ups are jumper-independent. Re-bridge and re-verify ~4.7 kΩ before proceeding.
  3. Powered, channel 0 selected, host driving SDA low at 100 kHz: scope upstream SDA and J2 pin 3 together. The downstream low sits above the upstream low by I × R_ON — expect ~10–20 mV at ~1.4 mA (bare segment). Both lows must stay below 0.4 V. Repeat per channel.
  4. With a pull-up-equipped Qwiic device attached, recompute the sink current (Section 7 table); if the combined pull-up drops below ~1.1 kΩ, document it — the design intent is one device per channel.

G. Stuck-bus isolation and ~RESET recovery (deliberate fault)#

The mux's ability to fence off a hung segment is a feature; test it on purpose.

  1. All channels off. Short J2 pin 3 (SD0) to GND through a 100 Ω resistor — a simulated device holding SDA low. Upstream scan still works and 0x70 still ACKs: the fault is invisible while channel 0 is deselected.
  2. S 0xE0 0x01 P: upstream SDA is now held low through the switch. The bus is hung — the mux itself can no longer be addressed (no START can form). Confirm the adapter reports bus-busy/timeout.
  3. Recover via ~RESET: pulse PMOD pin 2 low (any pulse ≥ 6 ns; a GPIO or a momentary jumper to GND through the 10 kΩ source impedance of R11 is fine). Upstream SDA must release within 500 ns; the control register reads 0x00; a scan works again with the fault still physically present on the (now deselected) segment.
  4. Context (a): drive PMOD 2 from an FPGA GPIO — this is the reset line the eventual HDL lab must own. Context (b): if the adapter has no spare GPIO, a power cycle is the fallback recovery; note it in the record.
  5. Remove the short; verify channel 0 works again (Section 9.D step 2).

H. Multi-select, speed, and host-integration tests#

  1. Broadcast-write demo: two identical devices on channels 0/1, control register 0x03, one configuration write — then select each channel alone and confirm both devices took the config. Reads stay single-channel.
  2. 400 kHz fast-mode regression of 9.C–9.E, with the longest intended Qwiic cables attached: multi-select adds every selected segment's capacitance to the upstream bus, so check rise times against the 400 pF budget at 0x0F (all four channels — the worst legitimate case on this board).
  3. In the PMOD-host context, run the eventual I2C-master + mux-select HDL lab against Sections 9.C–9.E as its acceptance test.
  4. Temperature, EMC, and long-cable characterization are out of scope for the first article.

10. Troubleshooting map#

SymptomFirst measurementsLikely areas
No ACK at 0x70SDA/SCL idle levels, RESET_N levelRESET_N stuck low (host pin or R11), TSSOP solder, pull-ups missing (JP1/JP2 cut with no host pull-ups)
ACK at 0x71–0x77 insteadA0/A1/A2 pin voltages (all must be 0 V)Lifted or bridged address pin — the address is hardwired, so this is a solder defect
Control register not 0x00 at power-upRepeat after clean power cycle; watch VCC rampSupply never dropped below V_PORF (~1 V) between "power cycles"; a prior write survived
Readback differs from writeBus analyzer capture of the writeMissing STOP, adapter sending a register pointer byte (there is none — that byte becomes the control value), solder
Device visible with channel offReadback of control registerRegister not actually 0x00; SCn/SDn solder bridge to the upstream pins
Device invisible with channel onIdle level at the Qwiic pins, readbackWrong bit for that socket (J2=0x01 … J5=0x08), segment pull-up open, device unpowered (socket pin 2)
Two same-address devices both respondControl register valueMulti-bit pattern written accidentally (e.g. 0x03)
Upstream bus hangs after a selectWhich line is low; deselect via ~RESETStuck-low downstream device or short on the selected segment — the 9.G scenario in the wild
~RESET pulse does not recoverRESET_N voltage during pulse, t < 6 ns?R11 shorted, pulse never reaches U1 pin 3, upstream (not downstream) fault
Downstream low level high by tens of mVSegment sink current, R_ON estimateNormal I×R_ON up to ~30 Ω worst case; investigate only if > ~100 mV
Glitches on downstream lines at channel switchScope SDn/SCn during select/deselectMissing/open per-channel pull-up (R3–R10) — the exact failure the fixed pull-ups exist to prevent
Fast-mode failures with long cablesRise time vs 400 pF budgetToo many selected segments, cable capacitance; drop to 100 kHz or select fewer channels

11. Bench record template#

FieldRecord
Board revision / serial
Host context (PMOD FPGA / standalone adapter) and IDs
JP1/JP2 states as inspected
Bus speed(s) used
Measured VDD
Power-up control-register readback (expect 0x00)
Channel walk (0x01…0x80, 0x00, 0x03) readbacks
Per-channel scan results (device visible/invisible per bit)
Two-device isolation result (addresses, distinguishing readings)
Per-channel pull-up resistances and low-level captures
Stuck-bus + ~RESET recovery result
Multi-select broadcast-write result
100 kHz vs 400 kHz comparison, cable lengths
Deviations, captures, raw-file paths
Reviewer / date / disposition

12. Review conclusion#

The design applies the TCA9548A's application guidance directly and gets the one non-obvious requirement right: fixed pull-up pairs on every downstream segment, because a deselected pass-gate segment floats and the switch itself cannot pull anything high. The hardwired 0x70 address, the host-driven ~RESET with a default-run pull-up (making stuck-bus recovery a first-class, testable path), and the register-only handling of the unconnected channels 4–7 are all coherent with the single-rail 3.3 V lab-line architecture. No discrepancy was found between the README and the generated schematic.

The principal open risks are that no PCB exists yet (layout, TSSOP-24 escape, and Qwiic socket orientation unverified), the single hardwired address (one hub per bus, and 0x70 collides with other mux-family Qwiic parts), the unfused 3V3 pass-through to four hot-pluggable sockets, pull-up stacking when attached Qwiic devices carry their own resistors (the combined sink current approaches the 3 mA I2C budget), and the fact that every expected value in this guide — including all control-register behavior — is taken from the datasheet rather than measured on hardware.