AZIC Education

UART, SPI, and I2C Protocols in Mining Hardware

Understanding serial communication in ASIC miners — UART chip chains, SPI data paths, I2C sensor buses, protocol debugging, and common failure diagnosis.

Introduction

Every ASIC miner depends on reliable serial communication between its components. The control board talks to hashboard chips over UART, configuration data lives in SPI flash, and temperature sensors report over I2C. When any of these communication links fail, the miner loses hashrate, misreads temperatures, or refuses to boot entirely.

This guide covers the three serial protocols you will encounter in mining hardware — UART, SPI, and I2C — with a focus on how they are used in real miners, what signals look like on a logic analyzer, and how to diagnose failures.

This page assumes familiarity with basic electronics concepts. If you need a refresher on voltage levels and signal basics, see Signal Integrity Basics.


Why Serial Communication Matters in Miners

A typical Antminer S19-series machine has three hashboards, each containing 70+ ASIC chips, multiple temperature sensors, an EEPROM chip, and a PIC microcontroller — all of which need to communicate with the control board. The protocols that carry this data are the nervous system of the miner.

Understanding these protocols allows you to:

  • Diagnose "missing chips" caused by broken UART chains
  • Read temperature sensors directly via I2C when firmware reports wrong values
  • Recover bricked boards by reflashing SPI NOR flash
  • Verify voltage enable commands sent through PIC I2C bridges
  • Capture and decode traffic using logic analyzers for root-cause analysis

UART (Universal Asynchronous Receiver/Transmitter)

UART is the most common protocol for chip-to-chip communication on hashboards. It is asynchronous — there is no shared clock signal. Instead, both the transmitter and receiver agree on a timing parameter called the baud rate.

How UART Works

A UART link uses two data lines:

  • TX (Transmit) — data output from the sender
  • RX (Receive) — data input to the receiver

Each byte is framed with start and stop bits:

Idle ──┐   ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌───
       │   │D│ │D│ │D│ │D│ │D│ │D│ │D│ │D│ │Stop
       └───┘0└─┘1└─┘2└─┘3└─┘4└─┘5└─┘6└─┘7└─┘
       Start                                   Bit
       Bit        8 Data Bits (LSB first)

Key parameters:

ParameterTypical ValuesNotes
Baud rate9600, 115200, 1500000Bits per second
Data bits8Almost always 8 in mining hardware
ParityNoneRarely used in miners
Stop bits1Standard configuration
Flow controlNoneHardware flow control not used on hashboards

The notation 8N1 means 8 data bits, No parity, 1 stop bit. This is the default for nearly all mining hardware UART connections.

UART in Mining Hardware

Bitmain miners use UART as the primary communication protocol between the control board and ASIC chips on each hashboard. The chips are wired in a daisy chain, where the TX output of one chip connects to the RX input of the next:

Control Board                    Hashboard
┌──────────┐    ┌──────┐    ┌──────┐    ┌──────┐         ┌──────┐
│          │TX→ │Chip 0│TX→ │Chip 1│TX→ │Chip 2│TX→ ... →│Chip N│
│  SoC     │    │      │    │      │    │      │         │      │
│          │←RX │      │←RX │      │←RX │      │←RX ... ←│      │
└──────────┘    └──────┘    └──────┘    └──────┘         └──────┘

The control board sends commands down the TX chain (register writes, job distribution), and chips send responses back up the RX chain (nonce results, register reads).

Baud Rates in Bitmain Miners

Bitmain miners use two different baud rates during operation:

PhaseBaud RatePurpose
Enumeration115,200 bpsInitial chip discovery, address assignment, register configuration
Mining1,500,000 bps (1.5 Mbps)Job distribution and nonce response during active hashing

The enumeration phase runs at the slower baud rate for reliability. Once all chips are discovered and configured, the firmware switches to the faster mining baud rate for throughput.

UART Command Frame Format (Bitmain)

Bitmain ASIC chips use a structured command frame:

┌──────┬──────┬──────────┬───────┬──────────────┬──────────┐
│ 0x55 │ 0xAA │ CMD_TYPE │ LEN   │ PAYLOAD      │ CRC      │
│ sync │ sync │ (1 byte) │(1 byte)│ (variable)  │ (2 bytes)│
└──────┴──────┴──────────┴───────┴──────────────┴──────────┘
  • 0x55 0xAA — Sync header, marks the start of a frame
  • CMD_TYPE — Command identifier (e.g., register read/write, job, nonce response)
  • LEN — Total frame length including all fields
  • PAYLOAD — Command-specific data (chip address, register values, job data)
  • CRC — CRC-5 or CRC-16 for integrity checking (varies by chip generation)
Example: Read register 0x00 (ChipAddress) from all chips
TX: 55 AA 01 05 00 00 1C

Breakdown:
  55 AA     → sync bytes
  01        → CMD_TYPE: register read (broadcast)
  05        → LEN: 5 bytes total payload
  00 00     → register address 0x0000
  1C        → CRC-5
Example: Read register 0x00 (ChipAddress) from all chips
TX: 55 AA 41 05 00 00 0A

Breakdown:
  55 AA     → sync bytes
  41        → CMD_TYPE: register read (broadcast)
  05        → LEN: 5 bytes total payload
  00 00     → register address 0x0000
  0A        → CRC-5

Nonce Response Frame

When a chip finds a valid nonce, it sends a response back up the chain:

┌──────┬──────┬──────────┬───────┬──────────┬────────┬──────────┬──────────┐
│ 0xAA │ 0x55 │ CMD_TYPE │ LEN   │ NONCE    │ JOB_ID │ CHIP_ADDR│ CRC      │
│ sync │ sync │ (1 byte) │(1 byte)│ (4 bytes)│(varied)│ (varied) │ (2 bytes)│
└──────┴──────┴──────────┴───────┴──────────┴────────┴──────────┴──────────┘

Note: Response sync bytes are reversed (0xAA 0x55) compared to commands (0x55 0xAA)

A broken chip in the UART daisy chain will block all communication to downstream chips. If chip 15 in a 78-chip chain has a bad TX trace, chips 16–77 will be completely unreachable. This is the most common cause of "missing chips" errors in miner logs.

UART for Debugging: Serial Console Access

Beyond chip communication, UART is used for debug console access on control boards. Most control boards expose a 3.3V UART header that gives you a Linux serial console:

Control Board Debug Header:
┌─────┬─────┬─────┬─────┐
│ GND │ TX  │ RX  │ 3V3 │
└─────┴─────┴─────┴─────┘

Connection: USB-to-UART adapter (e.g., CP2102, FT232, CH340)
Settings:   115200 baud, 8N1, no flow control

This gives you direct terminal access to the miner's Linux operating system — invaluable for debugging firmware issues, reading kernel logs, or recovering from network configuration mistakes.

Never connect a 5V UART adapter to a 3.3V control board header. The overvoltage will damage the SoC's UART pins permanently. Always verify voltage levels before connecting.


SPI (Serial Peripheral Interface)

SPI is a synchronous protocol — it uses a shared clock signal, so both sides agree on exactly when to sample data. SPI is faster than UART and supports full-duplex communication (data flows in both directions simultaneously).

How SPI Works

SPI uses four signals:

SignalNameDirectionPurpose
SCKSerial ClockMaster → SlaveClock signal generated by master
MOSIMaster Out, Slave InMaster → SlaveData from master to slave
MISOMaster In, Slave OutSlave → MasterData from slave to master
CS (SS)Chip SelectMaster → SlaveActive-low slave selection
          Master                      Slave
       ┌──────────┐               ┌──────────┐
       │          │──── SCK ─────→│          │
       │          │──── MOSI ────→│          │
       │   SoC /  │←─── MISO ────│  Flash / │
       │   FPGA   │──── CS ─────→│  ASIC    │
       └──────────┘               └──────────┘

The master controls the clock and pulls CS low to select which slave device it is talking to. Data is shifted out on MOSI and simultaneously shifted in on MISO — one bit per clock cycle.

SPI Timing and Modes

SPI has four modes defined by clock polarity (CPOL) and clock phase (CPHA):

ModeCPOLCPHAClock IdleData Sampled On
000LowRising edge
101LowFalling edge
210HighFalling edge
311HighRising edge

Most SPI devices in mining hardware use Mode 0 (CPOL=0, CPHA=0).

SPI in Mining Hardware

SPI serves several roles in ASIC miners:

1. Boot Flash (SPI NOR)

The control board's SoC boots from an SPI NOR flash chip (typically 16–32 MB). This contains the bootloader, Linux kernel, rootfs, and miner firmware.

Control Board:
┌──────────┐         ┌───────────┐
│          │── SCK ─→│           │
│  Allwinner│── MOSI→│  SPI NOR  │
│  H3 / H6 │←─ MISO─│  Flash    │
│  SoC     │── CS0 ─→│  (W25Q128)│
└──────────┘         └───────────┘

Reflashing the SPI NOR chip is the standard method for recovering a bricked control board. This can be done with an external programmer (CH341A) connected directly to the flash chip. See Control Board Architecture for details.

2. FPGA Communication

Some mining hardware (especially Avalon miners and older Whatsminer models) uses FPGAs as an intermediary between the control SoC and ASIC chips. The SoC communicates with the FPGA over SPI:

SoC ←──SPI──→ FPGA ←──UART/Custom──→ ASIC Chip Chain

The FPGA handles clock generation, job distribution fan-out, and nonce collection — offloading the time-critical work from the Linux-based SoC.

3. SPI Daisy Chain on Hashboards

Some ASIC chip architectures support SPI daisy-chaining, where the MISO output of one chip connects to the MOSI input of the next:

                CS (active low, active for all chips)

Master ── SCK ──┬──────────┬──────────┬──────────┐
                │          │          │          │
          MOSI ─→ Chip 0   → Chip 1   → Chip 2   │
                │  MISO out│  MISO out│  MISO out│
                │    │      │    │      │    │    │
                │    └──MOSI┘    └──MOSI┘    └──→ MISO back to master

In this configuration, data shifts through the entire chain. The master sends N bytes (one per chip) and simultaneously receives N bytes of response data. This allows reading from or writing to all chips in a single transaction, but requires precise framing — the master must know exactly how many chips are in the chain.

SPI Clock Speeds in Miners

ApplicationTypical SpeedNotes
Boot flash (SPI NOR)40–80 MHzHigh speed for fast boot
FPGA communication10–50 MHzDepends on board routing
Chip chain (if SPI)1–10 MHzConservative for signal integrity

I2C (Inter-Integrated Circuit)

I2C (pronounced "I-squared-C") is a two-wire synchronous bus protocol designed for low-speed communication with multiple devices. It is the standard protocol for sensors, EEPROMs, and auxiliary controllers in mining hardware.

How I2C Works

I2C uses just two signals, both open-drain with external pull-up resistors:

SignalNamePurpose
SDASerial DataBidirectional data line
SCLSerial ClockClock generated by master
        VCC (3.3V)
         │    │
         Rp   Rp       Rp = Pull-up resistors (typically 4.7kΩ)
         │    │
    SDA ─┴────┴─────┬─────────┬─────────┬──────
                     │         │         │
    SCL ─────────────┼────┬────┼────┬────┼──────
                     │    │    │    │    │
                  ┌──┴──┐ │ ┌──┴──┐ │ ┌──┴──┐
                  │Sensor│ │ │EEPROM│ │ │ PIC │
                  │0x48  │ │ │0x50  │ │ │0x20 │
                  └─────┘ │ └─────┘ │ └─────┘
                          │         │

I2C Transaction Format

Every I2C transaction follows this sequence:

START → ADDRESS (7 bits) + R/W (1 bit) → ACK → DATA → ACK → ... → STOP

Detailed bit-level view:
┌─────┬────────────────┬───┬─────┬────────────────┬───┬─────┬──────┐
│START│ A6 A5 A4 A3 A2 │A1 │A0 RW│ ACK │ D7 D6 D5 D4 │D3 │D2 D1 │D0 ACK│STOP │
└─────┴────────────────┴───┴─────┴─────┴────────────┴───┴─────┴──────┘
  SDA   ←── 7-bit address ──→ 0=W  Slave  ←── 8-bit data ──→  Slave
  falls                       1=R  pulls    (register or     pulls
  while                            SDA low  payload)         SDA low
  SCL high

Key concepts:

  • START condition — SDA falls while SCL is high
  • STOP condition — SDA rises while SCL is high
  • ACK — Receiver pulls SDA low during the 9th clock cycle
  • NACK — Receiver leaves SDA high (indicates end of read or error)
  • Addresses — 7-bit (0x00–0x7F), with some reserved. Device addresses are set by hardware pins or fixed in silicon

I2C in Mining Hardware

I2C is used extensively on hashboards for non-chip-chain peripherals:

1. Temperature Sensors (LM75A)

LM75A temperature sensors are placed across the hashboard to monitor chip temperatures. Each sensor has a configurable 3-bit address:

AddressPin ConfigTypical Location
0x48A2=0, A1=0, A0=0Near chip domain 1
0x49A2=0, A1=0, A0=1Near chip domain 4
0x4AA2=0, A1=1, A0=0Near chip domain 8
0x4BA2=0, A1=1, A0=1Near chip domain 12

Reading temperature from an LM75A:

Write phase (set register pointer to temp register 0x00):
START → [0x48 << 1 | 0] → ACK → [0x00] → ACK → STOP

Read phase (read 2 bytes of temperature):
START → [0x48 << 1 | 1] → ACK → [MSB] → ACK → [LSB] → NACK → STOP

Temperature decode:
  MSB = 0x1A, LSB = 0x80
  Raw = 0x1A80 >> 5 = 0x0D4 = 212
  Temp = 212 × 0.125 = 26.5°C

Antminer hashboards place temperature sensors behind a PIC microcontroller I2C bridge, not directly on the main I2C bus. You cannot read them by simply scanning the bus — you must go through the PIC's command protocol. See the PIC Bridge section below.

2. EEPROM (AT24C02)

Each hashboard contains an AT24C02 EEPROM (2 Kbit / 256 bytes) that stores board identification data:

AddressDataPurpose
0x50Board EEPROMSerial number, chip count, voltage settings, calibration
Reading EEPROM byte at address 0x10:
START → [0x50 << 1 | 0] → ACK → [0x10] → ACK →
  RESTART → [0x50 << 1 | 1] → ACK → [DATA] → NACK → STOP

The EEPROM stores critical calibration data. If it is corrupted or erased, the miner will fail to initialize the hashboard or may apply incorrect voltages.

Some hashboard EEPROMs are write-protected by a hardware pin. If you need to reprogram one, check whether the WP (Write Protect) pin is tied high. You may need to desolder or bridge a resistor to enable writes.

3. PIC Microcontroller Bridge (Antminer Hashboards)

Antminer hashboards use a PIC16F1704 microcontroller as an I2C bridge between the control board and the hashboard's on-board I2C devices (temperature sensors, voltage regulators). The PIC acts as a gateway — you send it commands, and it relays operations to devices on its local bus.

PIC I2C Addresses:

DeviceAddress RangeNotes
PIC MCU0x20–0x27Address shifts across resets; always scan the range
EEPROM0x50–0x57Shifts in sync with PIC, offset +0x30 from PIC address

PIC Command Frame Format:

TX (Master → PIC):
┌──────┬──────┬───────┬─────────┬────────────┬──────────┐
│ 0x55 │ 0xAA │  LEN  │   CMD   │  PARAMS    │ CHECKSUM │
│ sync │ sync │(1 byte)│(1 byte)│ (variable) │ (1 byte) │
└──────┴──────┴───────┴─────────┴────────────┴──────────┘

RX (PIC → Master):
┌───────┬─────────┬──────────┬────────────┬──────────┐
│  LEN  │   CMD   │  STATUS  │   DATA     │ CHECKSUM │
│(1 byte)│(1 byte)│ (1 byte) │ (variable) │ (1 byte) │
└───────┴─────────┴──────────┴────────────┴──────────┘

Checksum = (sum of bytes from LEN to last param) & 0xFF
Note: The 0x55 0xAA sync bytes are NOT included in the checksum calculation.

Critical PIC Commands:

CMDNameParametersDescription
0x15Voltage Enable[0x01, 0x00]Enables hashboard power rail. This is the command that turns on chip power.
0x16Status ReadNoneReturns board status. Expected response: 06 16 01 00 00 1D
0x3CSensor Read[target_addr, nbytes, register]Reads a sensor behind the PIC bridge (e.g., LM75A temp sensor)
0x07Date ReadNoneReads manufacturing date. Danger: reading >2 bytes hangs the PIC
0x06Info ReadNoneReads board information

PIC Initialization Sequence

Scan for PIC address — Send I2C general call to addresses 0x20–0x27 and check for ACK. The PIC's address is not fixed.

Read EEPROM

Dump the AT24C02 EEPROM at the PIC's address + 0x30 offset (e.g., if PIC is at 0x21, EEPROM is at 0x51).

Read board info

Send CMD 0x07 (date) then CMD 0x06 (info) to identify the board.

Enable voltage

Send CMD 0x15 with params [0x01, 0x00] to power on the hashboard's voltage domains.

Begin sensor polling

Use CMD 0x3C to periodically read temperature sensors at 0x48–0x4B through the PIC bridge.

Critical PIC I2C quirk: The PIC16F1704 requires byte-by-byte I2C reads. Each byte must be a complete transaction: START → address → single byte → NACK → STOP. Multi-byte reads cause the PIC's shift register to underrun, producing bit-shifted garbage data. This is a hardware limitation of the PIC's I2C slave implementation.

I2C Address Scanning

When diagnosing a hashboard, the first step is often an I2C bus scan to see which devices respond:

I2C Bus Scan Results (typical healthy Antminer hashboard):

     0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- 21 -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

Devices found:
  0x21 = PIC16F1704 microcontroller
  0x51 = AT24C02 EEPROM (PIC address + 0x30)

Note: Temperature sensors (0x48-0x4B) are BEHIND the PIC bridge
      and will NOT appear in a direct bus scan.

If you see no devices responding, check:

  • Pull-up resistors on SDA/SCL (should be 4.7k to 3.3V)
  • SDA or SCL shorted to ground (stuck bus)
  • Connector pin damage between control board and hashboard

Protocol Debugging Tools

Effective diagnosis of communication failures requires the right tools. Here is what professional mining hardware technicians use.

Logic Analyzers

A logic analyzer captures digital signals and decodes them into human-readable protocol data. This is the single most important tool for diagnosing serial communication issues.

Recommended hardware:

ToolChannelsSample RatePrice RangeBest For
Saleae Logic Pro 88500 MS/s$$$$Professional use, excellent software
Saleae Logic 88100 MS/s$$$Most repair shops
DSLogic Plus16400 MS/s$$Budget-friendly, good quality
FX2-based clones824 MS/s$Learning, low-speed protocols only

What to capture:

  • UART chip chain: Connect to TX/RX between control board connector and first chip. Decode at 115200 baud for enumeration, 1.5 Mbaud for mining.
  • I2C bus: Connect to SDA and SCL on the hashboard connector. Decode with I2C analyzer, watch for NAK responses.
  • SPI flash: Connect to SCK, MOSI, MISO, CS. Useful for capturing boot sequences.
Saleae Logic 2 Setup for UART capture:

1. Connect Ch0 → TX line, Ch1 → RX line, GND → board ground
2. Add "Async Serial" analyzer:
   - Input channel: Ch0 (or Ch1)
   - Bit rate: 115200 (enumeration) or 1500000 (mining)
   - Bits per frame: 8
   - Stop bits: 1
   - Parity: None
   - Bit order: LSB first
3. Set sampling rate ≥ 4× baud rate (6 MS/s minimum for 1.5 Mbaud)
4. Trigger on falling edge of TX (start bit)
PulseView Setup for I2C capture:

1. Connect Ch0 → SCL, Ch1 → SDA, GND → board ground
2. Add protocol decoder: I2C
   - SCL: Ch0
   - SDA: Ch1
   - Address format: shifted (shows 7-bit address)
3. Stack additional decoders if needed:
   - "eeprom24xx" for AT24C02 EEPROM reads
   - "lm75" for temperature sensor data
4. Set sampling rate ≥ 10× bus speed (1 MS/s for 100 kHz I2C)

Oscilloscopes

While logic analyzers show you decoded digital data, an oscilloscope shows you the analog signal quality. Use it when you suspect hardware-level issues:

  • Rise/fall times — Slow edges indicate weak pull-ups or excessive capacitance
  • Voltage levels — Should be clean 0V / 3.3V swings (or 0V / 1.8V for some ASIC chips)
  • Ringing and overshoot — Signal integrity problems that cause bit errors
  • Bus contention — Two devices driving the bus simultaneously (shows intermediate voltage levels)
Good I2C signal:               Bad I2C signal (weak pull-ups):

3.3V ─┐     ┌─┐   ┌──         3.3V ─╮      ╭─╮    ╭──
      │     │ │   │                   ╲    ╱   ╲  ╱
      │     │ │   │            1.8V    ╲  ╱     ╲╱     ← never reaches 3.3V
      │     │ │   │                     ╲╱
  0V ─┘     └─┘   └──           0V ─────╯
      ↑ clean     ↑ clean             ↑ slow   ↑ rounded
        edges       edges               edges    corners

Software Tools for Serial Communication

ToolPlatformUse Case
minicomLinuxSerial console access, UART terminal
PuTTYWindowsSerial console, SSH, Telnet
screenmacOS/LinuxQuick serial terminal (screen /dev/ttyUSB0 115200)
picocomLinuxLightweight serial terminal
i2cdetectLinuxI2C bus scanning (i2cdetect -y 0)
i2cget/i2csetLinuxDirect I2C register read/write
flashromLinuxSPI flash reading/writing for recovery
# Scan I2C bus 0 on a Linux-based control board
i2cdetect -y 0

# Read temperature from LM75A at 0x48
i2cget -y 0 0x48 0x00 w

# Open serial console to miner control board
minicom -D /dev/ttyUSB0 -b 115200

# Read SPI flash chip for firmware backup
flashrom -p ch341a_spi -r firmware_backup.bin

Common Communication Failures

Understanding what goes wrong with serial communication is just as important as understanding how it works. Here are the most frequent failure modes seen in mining hardware repair.

UART Failures

Symptom: Garbled data on the serial console or logic analyzer. Characters appear as random bytes.

Cause: The receiver and transmitter are using different baud rates. This commonly happens when:

  • Firmware was updated and changed the mining baud rate
  • Debug UART is misconfigured in the bootloader
  • A replacement control board uses different firmware

Diagnosis: Capture the signal with a logic analyzer and try decoding at common baud rates (9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1500000).

Fix: Configure the correct baud rate in your terminal or logic analyzer software.

Symptom: "Missing chips" starting from a specific chip number. For example, chips 0–22 are found but chips 23–77 are missing.

Cause: A broken PCB trace or cold solder joint in the UART daisy chain between chip 22 and chip 23. The TX signal from chip 22 never reaches chip 23's RX input.

Diagnosis:

  1. Check miner logs for the exact chip number where the chain breaks
  2. Probe the TX output of the last responding chip with an oscilloscope
  3. Probe the RX input of the first missing chip — if no signal, the trace is broken

Fix: Trace the path between the two chips on the PCB and repair the broken connection. This may require micro-soldering under a microscope.

Symptom: Intermittent errors — chips occasionally drop out, nonce responses have CRC errors, or the chip count fluctuates.

Cause: Electrical noise from the high-current power delivery system couples into UART signal traces. This is common on boards with damaged or missing decoupling capacitors.

Diagnosis:

  • Check UART signal quality with an oscilloscope during mining (under load)
  • Look for noise spikes coinciding with hash computation bursts
  • Inspect decoupling capacitors near the UART traces

Fix: Replace damaged decoupling capacitors. Ensure proper grounding between the control board and hashboard connectors.

SPI Failures

FailureSymptomCommon CauseFix
Missing clockDevice not respondingBroken SCK trace, SoC pin damageRepair trace, replace SoC
CS stuck highDevice never selectedPull-up resistor fault, GPIO misconfiguredCheck resistor, verify firmware
CS stuck lowBus contention with multiple slavesSolder bridge, firmware bugInspect for bridges, update firmware
Signal integrityIntermittent read errorsLong traces, missing bypass caps, too-high clock speedAdd caps, reduce clock speed
Flash corruptionBoot failure, config lossPower loss during write, failing flash chipReflash with external programmer

SPI flash corruption during firmware updates is a leading cause of bricked miners. Never interrupt power during a firmware flash operation. If a miner becomes unresponsive after a failed update, the SPI NOR flash likely contains a corrupted image and must be reprogrammed with an external programmer.

I2C Failures

Stuck Bus (SDA Held Low)

The most common I2C failure. A slave device holds SDA low indefinitely, blocking all communication on the bus.

Normal bus (idle):
SCL: ───────────────────── HIGH
SDA: ───────────────────── HIGH

Stuck bus:
SCL: ───────────────────── HIGH
SDA: _____________________ LOW (stuck!)
     ↑ slave holding SDA low — no other device can communicate

Cause: A slave device got into a bad state mid-transaction (due to power glitch, noise, or master reset during transfer) and is waiting for clock cycles that will never come.

Recovery procedure:

  1. Toggle SCL manually (9+ clock pulses) while SDA is released — this lets the stuck slave finish its byte
  2. Send a STOP condition (SDA rising while SCL is high)
  3. If toggling fails, power-cycle the board
  4. If power-cycling fails, the slave device may be damaged

Address Conflicts

Symptom: Wrong data returned, or a device responds intermittently.

Cause: Two devices on the same bus have the same address. This can happen with temperature sensors that have address pins left floating.

Diagnosis: Check the schematic for address pin configuration. Use a logic analyzer to see if multiple devices ACK the same address.

Pull-Up Resistor Failures

Symptom: I2C communication intermittent or completely fails. Oscilloscope shows SDA/SCL signals not reaching VCC properly.

Typical pull-up values for mining hardware:

Bus SpeedRecommended Pull-UpNotes
100 kHz (Standard)4.7 kOhmMost hashboard sensor buses
400 kHz (Fast)2.2 kOhmHigher-speed EEPROM access
1 MHz (Fast+)1 kOhmRarely used in miners

Diagnosis: Measure resistance from SDA to VCC and SCL to VCC with the board powered off. Should match the pull-up resistor value. If open, the resistor is damaged or desoldered.


Key Takeaways

  1. UART is the primary chip-chain protocol in Bitmain miners. A break anywhere in the daisy chain silences all downstream chips. Always check for broken traces when you see "missing chips" in miner logs.

  2. SPI connects the SoC to boot flash and (in some designs) FPGAs. SPI flash corruption during firmware updates is a common cause of bricked miners — always have an external programmer ready.

  3. I2C connects temperature sensors, EEPROMs, and PIC microcontrollers on hashboards. The PIC bridge is a critical intermediary — understanding its command protocol (especially CMD 0x15 for voltage enable) is essential for hashboard diagnostics.

  4. Logic analyzers are indispensable. You cannot effectively diagnose serial communication issues without one. Invest in a Saleae or equivalent tool — it will pay for itself on the first board you save.

  5. Most communication failures are physical. Broken traces, cold solder joints, damaged pull-up resistors, and corroded connectors account for the vast majority of serial communication issues in mining hardware.


Apply This Knowledge

Now that you understand the three core serial protocols, put this knowledge to work:

  • Diagnose a "missing chips" error: Follow the Hashboard Repair Guide to trace UART chain breaks using a logic analyzer
  • Read hashboard EEPROM data: Use the I2C tools and address information from this guide to extract board configuration data for analysis
  • Set up a serial debug console: Connect a USB-UART adapter to your miner's control board and access the Linux terminal for advanced diagnostics
  • Understand signal integrity: Continue to Signal Integrity Basics to learn how trace routing, impedance, and noise affect the protocols covered here
  • Learn chip-specific details: See the ASIC chip documentation for protocol specifics:
  • Explore the control board: Read Control Board Architecture to understand how the SoC orchestrates all three protocols during miner operation