Skip to content
Test Types & Methods

What Is AOI, SPI, and AXI in PCB Manufacturing

AOI, SPI, and AXI are automated inspection methods for PCB manufacturing. Learn what each does, when to use them, and how to track inspection data.

JJulien Buteau
beginner7 min readMarch 14, 2026

What Is AOI, SPI, and AXI with TofuPilot

AOI, SPI, and AXI are automated inspection methods used at different stages of PCB assembly. SPI checks solder paste before placement. AOI checks components and solder joints after reflow. AXI uses X-rays to inspect hidden connections. This guide covers what each method does, where it fits in the SMT line, and how to track inspection results with TofuPilot.

Where Each Method Fits

A typical SMT line runs these inspections in order:

StepProcessInspection
1Solder paste printingSPI (Solder Paste Inspection)
2Component placementNone (pick-and-place is self-checking)
3Reflow solderingAOI (Automated Optical Inspection)
4Hidden joints (BGA, QFN)AXI (Automated X-Ray Inspection)
5Through-hole/wave solderAOI (second pass)

SPI: Solder Paste Inspection

SPI measures the volume, height, area, and position of solder paste deposits after printing. It runs before any components are placed.

What SPI MeasuresWhy It Matters
Paste volumeToo little causes opens, too much causes bridges
Paste heightIndicates stencil wear or pressure issues
Paste areaDetects misalignment or clogged apertures
Paste offsetCatches stencil registration errors

SPI catches problems at the cheapest point in the process. Fixing a paste defect costs pennies. Finding the same defect after reflow costs dollars. Finding it in the field costs hundreds.

AOI: Automated Optical Inspection

AOI uses cameras (often with angled lighting or 3D measurement) to inspect PCBs after soldering. It checks for:

Defect TypeWhat AOI Sees
Missing componentEmpty pad where a part should be
Tombstoned componentPart standing on one end
Wrong polarityMarking orientation incorrect
Solder bridgeShorts between adjacent pads
Insufficient solderIncomplete fillet
Wrong componentSize or marking mismatch

AOI is fast (seconds per board) and non-contact. It's the workhorse inspection method for surface-mount assemblies.

AOI Limitations

AOI cannot see:

  • Solder joints hidden under packages (BGA, QFN, LGA)
  • Cold solder joints that look correct visually
  • Internal component defects

That's where AXI comes in.

AXI: Automated X-Ray Inspection

AXI uses X-ray imaging to inspect solder joints that are hidden from optical inspection. It's essential for:

Package TypeWhy AXI Is Needed
BGASolder balls are underneath the package
QFNThermal pad and ground connections are hidden
LGAAll connections are under the package
ConnectorsPress-fit or hidden solder joints

AXI detects voids, head-in-pillow defects, bridging under packages, and incomplete reflow. It's slower and more expensive than AOI, so it's typically used on boards with BGA or QFN components rather than every board.

Choosing the Right Inspection

QuestionAnswer
Do we have BGA or QFN?Use AXI
Surface-mount only, no hidden joints?AOI is sufficient
High solder defect rate?Add SPI to catch paste issues early
Low volume, no AOI machine?Manual visual inspection with magnification

Most SMT lines use SPI + AOI as a minimum. Add AXI when the board design includes hidden solder joints.

Tracking Inspection Results with TofuPilot

Inspection machines output defect data per board. You can log this data to TofuPilot alongside your functional test results to see the full quality picture for each unit.

inspection_log.py
import openhtf as htf


@htf.measures(
    htf.Measurement("spi_result").equals("PASS"),
    htf.Measurement("spi_defect_count").in_range(maximum=0),
)
def phase_spi_result(test):
    """Log SPI inspection result from paste printer."""
    test.measurements.spi_result = "PASS"
    test.measurements.spi_defect_count = 0


@htf.measures(
    htf.Measurement("aoi_result").equals("PASS"),
    htf.Measurement("aoi_defect_count").in_range(maximum=0),
)
def phase_aoi_result(test):
    """Log AOI inspection result from post-reflow inspection."""
    test.measurements.aoi_result = "PASS"
    test.measurements.aoi_defect_count = 0
inspection_log.py
from tofupilot.openhtf import TofuPilot

test = htf.Test(
    phase_spi_result,
    phase_aoi_result,
)

with TofuPilot(test):
    test.execute(test_start=lambda: input("Scan board serial: "))

TofuPilot tracks inspection results per serial number. Open the Analytics tab to see defect rates by inspection type, defect Pareto charts, and trends across production lots.

More Guides

Put this guide into practice