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:
| Step | Process | Inspection |
|---|---|---|
| 1 | Solder paste printing | SPI (Solder Paste Inspection) |
| 2 | Component placement | None (pick-and-place is self-checking) |
| 3 | Reflow soldering | AOI (Automated Optical Inspection) |
| 4 | Hidden joints (BGA, QFN) | AXI (Automated X-Ray Inspection) |
| 5 | Through-hole/wave solder | AOI (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 Measures | Why It Matters |
|---|---|
| Paste volume | Too little causes opens, too much causes bridges |
| Paste height | Indicates stencil wear or pressure issues |
| Paste area | Detects misalignment or clogged apertures |
| Paste offset | Catches 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 Type | What AOI Sees |
|---|---|
| Missing component | Empty pad where a part should be |
| Tombstoned component | Part standing on one end |
| Wrong polarity | Marking orientation incorrect |
| Solder bridge | Shorts between adjacent pads |
| Insufficient solder | Incomplete fillet |
| Wrong component | Size 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 Type | Why AXI Is Needed |
|---|---|
| BGA | Solder balls are underneath the package |
| QFN | Thermal pad and ground connections are hidden |
| LGA | All connections are under the package |
| Connectors | Press-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
| Question | Answer |
|---|---|
| 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.
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 = 0from 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.