Documentation

ShillehTek Pre-Soldered TXS0108E Logic Level Converter 8-Channel Pro Fast | ShillehTek Product Manual
Documentation / ShillehTek Pre-Soldered TXS0108E Logic Level Converter 8-Channel Pro Fast | ShillehTek Product Manual

ShillehTek Pre-Soldered TXS0108E Logic Level Converter 8-Channel Pro Fast | ShillehTek Product Manual

Overview

The TXS0108E is an 8-channel bi-directional logic level converter that lets 3.3V and 5V devices talk to each other safely on up to eight digital lines at once. Built around the Texas Instruments TXS0108E translator IC, it auto-senses signal direction (no DIR pin to manage) and supports both push-pull and open-drain signalling, so it works for everything from plain GPIO and PWM to I2C and SPI.

This is the go-to module any time you mix a 3.3V controller (Raspberry Pi, ESP32, Pico) with 5V parts like classic Arduino shields, character LCDs, ultrasonic sensors, or 5V relay boards. Because it has eight channels, you can route a full SPI bus plus a couple of GPIOs through a single board instead of stacking individual level shifters.

Each side of the board has its own VCC pin so you set the voltages independently — for example VA = 3.3V and VB = 5V — and an Output Enable (OE) pin that lets you cleanly disable the outputs from your microcontroller at power-up.

At a Glance

Channels
8 bi-directional
Low Side (VA)
1.4V - 3.6V
High Side (VB)
1.65V - 5.5V
Push-Pull Speed
Up to 110 Mbps
Open-Drain Speed
Up to 1.2 Mbps
Direction Control
Auto-sensing

Specifications

Parameter Value
Translator IC Texas Instruments TXS0108E
Number of Channels 8 (bi-directional, independent)
Low Side Voltage (VA) 1.4V to 3.6V
High Side Voltage (VB) 1.65V to 5.5V
Voltage Rule VA must be less than or equal to VB
Max Data Rate (Push-Pull) 110 Mbps
Max Data Rate (Open-Drain) 1.2 Mbps
Direction Control Automatic (no DIR pin)
Output Enable OE pin, active HIGH
Architecture Pass-gate with edge-rate accelerators
Pin Count 20 pins (10 per side)
Operating Temperature -40 to +85 degrees C

Pinout Diagram

TXS0108E 8-channel logic level converter pinout diagram showing VA Vcca low side voltage, A1-A8 channel I/O pins, OE output enable, VB Vccb high side voltage, B1-B8 channel I/O pins, and GND

Wiring Guide

Arduino 5V to 3.3V I2C Sensor

Use the TXS0108E to safely connect a 3.3V I2C sensor (BMP280, MPU6050, etc.) to a 5V Arduino Uno. The B side connects to Arduino at 5V, the A side connects to your 3.3V sensor. Pull-ups on each side go to that side's VCC.

TXS0108E Pin Connect To Details
VA Arduino 3.3V Low side reference
VB Arduino 5V High side reference
GND Arduino GND Common ground
OE Arduino 3.3V (or any digital pin) Must be HIGH to enable
A1 / A2 3.3V Sensor SDA / SCL 4.7k pull-ups to 3.3V
B1 / B2 Arduino A4 (SDA) / A5 (SCL) 4.7k pull-ups to 5V
Warning: The TXS0108E does NOT have built-in I2C pull-up resistors strong enough on its own. You must add 4.7k external pull-ups on the A side to VA (3.3V) and on the B side to VB (5V). Without them, I2C will not work reliably.
Tip: Always tie OE HIGH to enable the outputs. If OE is left floating or pulled LOW, all eight channels go into a high-impedance state and no signals pass through.

ESP32 to a 5V Sensor or Display

The ESP32 GPIO is 3.3V. Use the TXS0108E to drive 5V devices (HC-SR04 Echo line, 5V character LCD enable line, classic 5V shift registers) without frying the ESP32. Wire VA to 3.3V and VB to 5V.

TXS0108E Pin Connect To Details
VA ESP32 3.3V Low side reference
VB ESP32 VIN (5V) or external 5V High side reference
GND ESP32 GND Common with 5V supply
OE ESP32 3.3V or GPIO 4 Tie HIGH to enable
A1 - A4 ESP32 GPIO 18, 19, 21, 22 3.3V side
B1 - B4 5V Device Logic Pins Translated to 5V
Note: Auto-direction works for both push-pull and open-drain. You can mix directions across the eight channels - the converter figures out which way each line is currently being driven on its own.

Raspberry Pi to 5V SPI Device

Raspberry Pi GPIO and SPI pins are 3.3V. To drive a 5V SPI device (5V SD card breakout, classic shift register, 5V OLED), use four channels of the TXS0108E for MOSI, MISO, SCLK, and CS.

TXS0108E Pin Raspberry Pi Pin Details
VA Pin 1 (3.3V) Low side reference
VB Pin 2 (5V) High side reference
GND Pin 6 (GND) Common ground
OE Pin 1 (3.3V) Always HIGH
A1 / A2 / A3 / A4 GPIO 10 / 9 / 11 / 8 MOSI / MISO / SCLK / CE0
B1 / B2 / B3 / B4 5V Device MOSI / MISO / SCLK / CS Translated to 5V
Tip: The TXS0108E works fine for SPI clock rates up to a few MHz in push-pull mode. For very high SPI speeds (above 25 MHz), consider a dedicated direction-controlled translator like the TXB0108 or TXS0104.

Raspberry Pi Pico GPIO to 5V Logic

The Pico runs at 3.3V and is not 5V tolerant. Use the TXS0108E to interface its GPIO with 5V devices like classic logic chips, 5V relay modules without input shifting, or older shift registers.

TXS0108E Pin Pico Pin Details
VA Pin 36 (3.3V OUT) Low side reference
VB Pin 40 (VBUS / 5V) High side, USB powered
GND Pin 38 (GND) Common ground
OE Pin 36 (3.3V OUT) Tie HIGH
A1 - A8 GP2 - GP9 3.3V Pico side
B1 - B8 5V Device Pins Translated to 5V
Warning: Never connect 5V directly to a Pico GPIO. Even a quick miswire can permanently damage the RP2040. The TXS0108E protects you in both directions, but only when VA and VB are wired to the correct rails.

Code Examples

The TXS0108E is transparent to your code - signals just pass through translated. The examples below show a typical "hello world" use: an Arduino reading an ultrasonic sensor through the level converter on a 3.3V system.

Arduino - GPIO Toggle Through TXS0108E

txs0108e_arduino.ino
// TXS0108E Logic Level Converter - Arduino Test
// Toggles a 5V output line driven from Arduino through channel B1.
// Wire: Arduino D8 -> A1, B1 -> 5V LED through 220 ohm resistor to GND
// VA = 3.3V, VB = 5V, OE = 3.3V

const int signalPin = 8;

void setup() {
  Serial.begin(9600);
  pinMode(signalPin, OUTPUT);
  Serial.println("TXS0108E ready - toggling B1 at 1 Hz");
}

void loop() {
  digitalWrite(signalPin, HIGH);  // Drive A1 HIGH -> B1 outputs ~5V
  Serial.println("HIGH");
  delay(500);

  digitalWrite(signalPin, LOW);   // Drive A1 LOW -> B1 outputs 0V
  Serial.println("LOW");
  delay(500);
}

Raspberry Pi (Python) - I2C Through TXS0108E

txs0108e_rpi_i2c.py
#!/usr/bin/env python3
# TXS0108E - Reading a 5V I2C device from a Raspberry Pi
# Pi SDA (GPIO 2) -> A1, Pi SCL (GPIO 3) -> A2
# B1, B2 -> 5V device SDA/SCL with 4.7k pull-ups to 5V
# VA = 3.3V (Pin 1), VB = 5V (Pin 2), OE = 3.3V

from smbus2 import SMBus
import time

I2C_BUS = 1
DEVICE_ADDR = 0x48  # example: PCF8591 5V ADC

with SMBus(I2C_BUS) as bus:
    while True:
        try:
            # Read one byte from the 5V device
            value = bus.read_byte(DEVICE_ADDR)
            print("Read from 0x{:02X}: {}".format(DEVICE_ADDR, value))
        except OSError as e:
            print("I2C error - check pull-ups and OE pin:", e)
        time.sleep(1)

Raspberry Pi Pico (MicroPython) - PWM Through TXS0108E

txs0108e_pico.py
# TXS0108E - Drive a 5V LED strip enable line from Pico
# Pico GP15 -> A1, B1 -> 5V LED strip enable
# VA = 3V3 (Pin 36), VB = VBUS (Pin 40), OE = 3V3

from machine import Pin, PWM
import time

# 5V output via TXS0108E channel 1
led_enable = PWM(Pin(15))
led_enable.freq(1000)

# Sweep brightness 0% -> 100% -> 0%
while True:
    for duty in range(0, 65536, 1024):
        led_enable.duty_u16(duty)
        time.sleep_ms(10)
    for duty in range(65535, -1, -1024):
        led_enable.duty_u16(duty)
        time.sleep_ms(10)

ESP32 (Arduino) - Serial Bridge Through TXS0108E

txs0108e_esp32.ino
// TXS0108E - Talk to a 5V serial device from a 3.3V ESP32
// ESP32 TX (GPIO 17) -> A1, A2 <- ESP32 RX (GPIO 16)
// B1 -> 5V device RX, B2 <- 5V device TX
// VA = 3.3V, VB = 5V, OE = 3.3V

#include 

HardwareSerial Serial5V(2);  // UART2 on ESP32

void setup() {
  Serial.begin(115200);
  Serial5V.begin(9600, SERIAL_8N1, 16, 17);
  Serial.println("TXS0108E serial bridge ready");
}

void loop() {
  if (Serial.available()) {
    Serial5V.write(Serial.read());
  }
  if (Serial5V.available()) {
    Serial.write(Serial5V.read());
  }
}

Frequently Asked Questions

Which side is the 5V side and which is 3.3V?
The B side is always the higher voltage (VB up to 5.5V). The A side is the lower voltage (VA up to 3.6V). The rule from the datasheet is VA must be less than or equal to VB. So for typical 3.3V to 5V translation: VA = 3.3V, VB = 5V.
Do I need to set a direction or use a DIR pin?
No. The TXS0108E uses auto-direction sensing. Each channel detects which side is driving the line and routes the signal the other way. This works for both push-pull (regular GPIO, SPI) and open-drain (I2C) signals.
My I2C devices don't respond when wired through the TXS0108E. What's wrong?
Almost always a pull-up issue. The TXS0108E has only weak internal pull-ups (around 40k) which are too weak for I2C. Add 4.7k external resistors from each I2C line to its side's VCC: 4.7k from A side SDA/SCL to 3.3V, and 4.7k from B side SDA/SCL to 5V. Also confirm OE is tied HIGH.
What does the OE pin do?
OE is Output Enable, active HIGH. When OE is HIGH, the converter is active and signals pass through. When OE is LOW or floating, all eight channels go into a high-impedance state and nothing passes through. Always tie OE to VA (3.3V) or to a microcontroller pin you can drive HIGH.
How fast can the TXS0108E run?
Up to 110 Mbps in push-pull mode (regular GPIO, SPI, UART) and up to 1.2 Mbps in open-drain mode (I2C). For most maker projects this is far more than you need - standard I2C at 100 or 400 kHz, SPI at 1-10 MHz, and UART at 115200 baud all work without issue.
Can I use it for one-way translation, like just sending data to a 5V chip?
Yes. The TXS0108E is bi-directional but you can use it for one-way signals too - just leave unused channels disconnected. There's no penalty for using only some of the eight channels, and unused channels can sit floating.
Is the TXS0108E better than a small MOSFET-based level converter?
For more than two lines, yes - it gives you eight channels in one chip. For raw I2C-only translation at typical speeds, both work. The TXS0108E is faster (push-pull mode), supports any direction without you knowing in advance, and is the right choice when you need SPI, UART, or general GPIO translation alongside I2C.