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:
| Parameter | Typical Values | Notes |
|---|---|---|
| Baud rate | 9600, 115200, 1500000 | Bits per second |
| Data bits | 8 | Almost always 8 in mining hardware |
| Parity | None | Rarely used in miners |
| Stop bits | 1 | Standard configuration |
| Flow control | None | Hardware 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:
| Phase | Baud Rate | Purpose |
|---|---|---|
| Enumeration | 115,200 bps | Initial chip discovery, address assignment, register configuration |
| Mining | 1,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-5Example: 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-5Nonce 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 controlThis 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:
| Signal | Name | Direction | Purpose |
|---|---|---|---|
| SCK | Serial Clock | Master → Slave | Clock signal generated by master |
| MOSI | Master Out, Slave In | Master → Slave | Data from master to slave |
| MISO | Master In, Slave Out | Slave → Master | Data from slave to master |
| CS (SS) | Chip Select | Master → Slave | Active-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):
| Mode | CPOL | CPHA | Clock Idle | Data Sampled On |
|---|---|---|---|---|
| 0 | 0 | 0 | Low | Rising edge |
| 1 | 0 | 1 | Low | Falling edge |
| 2 | 1 | 0 | High | Falling edge |
| 3 | 1 | 1 | High | Rising 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 ChainThe 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 masterIn 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
| Application | Typical Speed | Notes |
|---|---|---|
| Boot flash (SPI NOR) | 40–80 MHz | High speed for fast boot |
| FPGA communication | 10–50 MHz | Depends on board routing |
| Chip chain (if SPI) | 1–10 MHz | Conservative 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:
| Signal | Name | Purpose |
|---|---|---|
| SDA | Serial Data | Bidirectional data line |
| SCL | Serial Clock | Clock 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 highKey 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:
| Address | Pin Config | Typical Location |
|---|---|---|
| 0x48 | A2=0, A1=0, A0=0 | Near chip domain 1 |
| 0x49 | A2=0, A1=0, A0=1 | Near chip domain 4 |
| 0x4A | A2=0, A1=1, A0=0 | Near chip domain 8 |
| 0x4B | A2=0, A1=1, A0=1 | Near 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°CAntminer 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:
| Address | Data | Purpose |
|---|---|---|
| 0x50 | Board EEPROM | Serial 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 → STOPThe 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:
| Device | Address Range | Notes |
|---|---|---|
| PIC MCU | 0x20–0x27 | Address shifts across resets; always scan the range |
| EEPROM | 0x50–0x57 | Shifts 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:
| CMD | Name | Parameters | Description |
|---|---|---|---|
| 0x15 | Voltage Enable | [0x01, 0x00] | Enables hashboard power rail. This is the command that turns on chip power. |
| 0x16 | Status Read | None | Returns board status. Expected response: 06 16 01 00 00 1D |
| 0x3C | Sensor Read | [target_addr, nbytes, register] | Reads a sensor behind the PIC bridge (e.g., LM75A temp sensor) |
| 0x07 | Date Read | None | Reads manufacturing date. Danger: reading >2 bytes hangs the PIC |
| 0x06 | Info Read | None | Reads 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:
| Tool | Channels | Sample Rate | Price Range | Best For |
|---|---|---|---|---|
| Saleae Logic Pro 8 | 8 | 500 MS/s | $$$$ | Professional use, excellent software |
| Saleae Logic 8 | 8 | 100 MS/s | $$$ | Most repair shops |
| DSLogic Plus | 16 | 400 MS/s | $$ | Budget-friendly, good quality |
| FX2-based clones | 8 | 24 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 cornersSoftware Tools for Serial Communication
| Tool | Platform | Use Case |
|---|---|---|
| minicom | Linux | Serial console access, UART terminal |
| PuTTY | Windows | Serial console, SSH, Telnet |
| screen | macOS/Linux | Quick serial terminal (screen /dev/ttyUSB0 115200) |
| picocom | Linux | Lightweight serial terminal |
| i2cdetect | Linux | I2C bus scanning (i2cdetect -y 0) |
| i2cget/i2cset | Linux | Direct I2C register read/write |
| flashrom | Linux | SPI 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.binCommon 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:
- Check miner logs for the exact chip number where the chain breaks
- Probe the TX output of the last responding chip with an oscilloscope
- 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
| Failure | Symptom | Common Cause | Fix |
|---|---|---|---|
| Missing clock | Device not responding | Broken SCK trace, SoC pin damage | Repair trace, replace SoC |
| CS stuck high | Device never selected | Pull-up resistor fault, GPIO misconfigured | Check resistor, verify firmware |
| CS stuck low | Bus contention with multiple slaves | Solder bridge, firmware bug | Inspect for bridges, update firmware |
| Signal integrity | Intermittent read errors | Long traces, missing bypass caps, too-high clock speed | Add caps, reduce clock speed |
| Flash corruption | Boot failure, config loss | Power loss during write, failing flash chip | Reflash 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 communicateCause: 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:
- Toggle SCL manually (9+ clock pulses) while SDA is released — this lets the stuck slave finish its byte
- Send a STOP condition (SDA rising while SCL is high)
- If toggling fails, power-cycle the board
- 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 Speed | Recommended Pull-Up | Notes |
|---|---|---|
| 100 kHz (Standard) | 4.7 kOhm | Most hashboard sensor buses |
| 400 kHz (Fast) | 2.2 kOhm | Higher-speed EEPROM access |
| 1 MHz (Fast+) | 1 kOhm | Rarely 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
-
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.
-
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.
-
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.
-
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.
-
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
Clock Distribution and PLL in Mining ASICs
How clock distribution and PLL work in mining hash boards — crystal oscillators, frequency multiplication, clock chains, and diagnosing clock-related failures.
Signal Integrity Basics for Mining Hardware Repair
Understanding signal integrity in hash board repair — PCB trace routing, common signal issues, test point measurement, and how signal problems cause missing chips.