Hardware Topology
This page summarizes the current V3 baseline. The full board-level source of truth remains docs/hardware_connection_overview.md; the site is a published reading surface.
Current baseline
- Controller:
ESP32-S3 - USB hub controller:
CH335F - Persistent configuration:
M24C64@0x50 - Input power protection:
TPS2490 - Input telemetry:
Input INA226@0x44 - Mainboard sideband expander:
Mainboard TCA6408A@0x20 - Front-panel / LCD expander:
Front-panel TCA6408A@0x21 - Owner-facing ports:
port1,port2,port3,port4
PCA9545A@0x70 is retained only as a compatibility naming slot. The current validation board uses direct shared I²C buses and does not rely on that mux for port addressing.
System topology
The key boundary is that ESP32-S3 owns power gating, telemetry, persisted configuration, and the control plane; CH335F owns USB hub data behavior and the PWREN# / OVCUR# sideband.
Input power
Input power follows this path:
Key nets:
IN_EN: MCU-controlled input-gate qualification.IN_PG: high means power-good.VIN_ADC: MCU ADC divider sample point.
Firmware checks input qualification during boot. If input power is unsafe, IN_CE stays closed, port initialization is skipped, and runtime tasks are not released.
Input bring-up reads in this order:
VIN_UNSAFEexists.IN_ENallows the TPS2490 input gate.IN_PGreports power-good.Input INA226@0x44reports VIN / current / power.boot.summaryclassifies VIN asOk,Warn, orFatal.
Only after VIN is ready does firmware probe the front panel, fan, mainboard sideband, and four output modules.
Four-port gating
The four outputs are controlled by MCU-driven EN1..EN4:
port.power_set drives the matching ENx. port.replug means controlled power-off and power-on; it does not promise true per-port data disconnect.
CH335F sideband
CH335F sideband signals are connected through Mainboard TCA6408A@0x20:
P0/P2/P4/P6read low-activePWREN1#..4#.P1/P3/P5/P7inject low-activeOVCUR1#..4#.ISOUSB211 V1OKis read onGPIO21and separates standalone/no-upstream from upstream-managed mode.
When V1OK=low, the product keeps independent output capability and does not shut ports off just because PWREN# is high. When V1OK=high, only ports whose PWREN# is low are allowed to output power.
Initialization releases all OVCUR# lines by writing output 0xFF, polarity 0x00, and direction 0xFF.
Two I²C buses
Sensor / front-panel I²C
I2C_SDA = GPIO8I2C_SCL = GPIO9- Devices:
Input INA226@0x44,Front-panel TCA6408A@0x21, andport3/port4telemetry devices.
Hub-sideband / output I²C
HUB_SDA = GPIO14HUB_SCL = GPIO13- Devices:
Mainboard TCA6408A@0x20,M24C64@0x50, andport1/port2telemetry devices.
Front panel and display
The front-panel expander is Front-panel TCA6408A@0x21:
P0..P4: five-way switch, mapped to Center, Right, Down, Left, Up.P5 = LCD_RESP6 = LCD_CS
LCD signals directly connected to the MCU:
LCD_DC = GPIO10LCD_MOSI = GPIO11LCD_SCLK = GPIO12LCD_BLK = GPIO15
The panel is a 160x50 LCD, the driver IC is GC9D01, and LCD_BLK is currently low-active.
Two V3 display details are easy to get wrong:
LCD_BLKis low-active; driving it as high-active turns the backlight off.- Display orientation uses
Orientation::LandscapeSwapped, not the oldLandscapemapping.
Current V3 hardware cannot hard-reset Front-panel TCA6408A@0x21 from the MCU. If bus-clear succeeds but only 0x21 does not ACK, firmware records Warn/FrontPanelOffline, continues runtime, and disables only front-panel input.
Maintenance actions and hardware capability
Historical boundary
The following terms are historical or migration-only and do not represent current control-plane hardware:
SC8815 + SW2303PSTOP_CTL1..4PSTOP1..4- historical
USB-C route/ two-port product abstractions
References
docs/hardware_connection_overview.mddocs/ch335f_tca6408a_appnote.mddocs/specs/pw97u-control-plane-alignment/SPEC.mddocs/specs/j6nvw-hardware-v3-pin-assignment/SPEC.md