Test Types & Methods

Conception pour la testabilité PCB

Directives de conception pour la testabilité (DFT) des PCB couvrant le placement des points de test, le boundary scan JTAG, les connecteurs de.

JJulien Buteau
intermediate12 min de lecture14 mars 2026

Les bonnes décisions de DFT prises lors du routage du PCB réduisent directement le temps de test, le coût des fixations et les défauts échappés à l'ICT, au test fonctionnel et à la programmation in-situ. Une carte difficile à sonder est difficile à tester automatiquement. Ce guide couvre les décisions mécaniques et électriques qui rendent les tests automatisés avec OpenHTF et TofuPilot réalisables.

Ce que signifie la DFT pour les PCBA

La conception pour la testabilité (DFT) est l'ensemble des décisions de routage et de schéma qui rendent un PCBA observable et contrôlable pendant les tests de fabrication.

PropriétéDéfinitionImpact sur le test
ObservabilitéPouvez-vous mesurer le signal ?L'absence de points de test force des suppositions aveugles
ContrôlabilitéPouvez-vous forcer le circuit dans un état connu ?L'absence d'isolation rend les tests au niveau composant impossibles
AccessibilitéLa sonde peut-elle physiquement atteindre le pad ?Les vias recouverts et les pads sous-dimensionnés cassent les fixations

Directives de placement des points de test

Les points de test sont l'interface entre votre carte et la fixation de test. Chaque net que vous souhaitez sonder en ICT ou test fonctionnel en nécessite un.

Exigences physiques

ParamètreMinimumPréféré
Diamètre du point de test0,9 mm (35 mil)1,27 mm (50 mil)
Espacement pad à pad1,27 mm centre à centre2,54 mm (grille 100 mil)
Dégagement des composants0,5 mm1,0 mm
Dégagement du bord de carte3,0 mm5,0 mm
Course max de la sonde (contact à ressort)3,0 mm1,5 mm nominal

Placez les points de test sur une grille de 100 mil dans la mesure du possible. Les fixations à lit de clous sont construites sur cette grille.

Quels nets nécessitent des points de test

Couvrez au minimum :

  • Les rails d'alimentation (VCC, VBAT, VIO, toutes les sorties de régulateurs)
  • La masse (une par domaine d'alimentation)
  • Les E/S numériques des microcontrôleurs et FPGA
  • Les chemins de signaux analogiques (entrée et sortie)
  • Les broches de l'oscillateur à quartz
  • Les lignes de reset
  • Les bus de communication (UART TX/RX, SPI CS/CLK/MOSI/MISO, I2C SDA/SCL)
  • Les interfaces de programmation et debug (SWDIO, SWDCLK, TDI, TDO, TMS, TCK)

Règles de placement

Placez les points de test côté primaire (côté composants) dans la mesure du possible. Les fixations double face sont coûteuses et ralentissent le temps de cycle. Si un net ne route que côté verso, ajoutez un via vers le dessus avec un point de test.

Ne recouvrez pas les vias des points de test avec du vernis épargne. Les vias recouverts de vernis sont courants pour la densité mais tuent l'accès ICT.

Erreurs DFT courantes et impact sur le coût des tests

ErreurComment elle se manifesteImpact sur le coût
Points de test uniquement côté versoNécessite une fixation double face2x le coût de fixation, temps de cycle plus lent
Points de test sous les connecteurs ou dissipateursInaccessibles par contact à ressortLe net est intestable sans reprise
Vias CMS avec vernis épargneLa sonde ne peut pas établir le contactFaux échecs à l'ICT, défauts échappés
Pas de point de test sur le rail d'alimentationImpossible de vérifier la tension de régulationLes défauts d'alimentation passent inaperçus
Référence de masse manquante près du TP analogiqueMesure flottanteBruit, fausses limites
Pas de point de test de resetImpossible de forcer le DUT dans un état connuLe test fonctionnel doit se fier uniquement au POR
Pads de points de test de 0,5 mm ou moinsLes contacts à ressort manquent ou glissentContact intermittent, faible rendement de fixation
Points de test à des coordonnées arbitrairesBroches hors grille, complexité de fixationCoût de fabrication de fixation plus élevé

Considérations sur le Boundary Scan (JTAG)

Le boundary scan JTAG (IEEE 1149.1) teste l'interconnexion et le fonctionnement de base des composants sans fixation à lit de clous.

Pour que le JTAG fonctionne en fabrication :

  • Tous les composants compatibles JTAG doivent être dans la chaîne de scan (pas de broches TAP non connectées)
  • Le TDO de chaque composant se connecte au TDI du suivant
  • TMS et TCK sont partagés entre tous les composants
  • TRST est tiré au niveau haut avec une résistance de 10k (actif bas)
  • La chaîne doit être accessible via un connecteur ou des points de test

Incluez un connecteur ARM JTAG 10 broches ou JTAG 20 broches peuplé sur les cartes EVT. Dépeuplez le connecteur sur les versions de production mais conservez l'empreinte et les points de test.

Connecteurs de programmation et interfaces de debug

InterfaceConnecteurSignaux nécessaires
ARM SWDCortex Debug 10 brochesSWDIO, SWDCLK, GND, VCC, nRESET
JTAG (ARM)JTAG 20 brochesTDI, TDO, TMS, TCK, nRESET, VCC, GND
Bootloader UART4 broches 2,54 mmTX, RX, GND, VCC
Flash SPI6 brochesCS, CLK, MOSI, MISO, GND, VCC
FPGA JTAG6 brochesTDI, TDO, TMS, TCK, GND, VCC

De nombreux microcontrôleurs ont des broches BOOT0/BOOT1 qui sélectionnent le mode de programmation. Celles-ci doivent être contrôlables depuis la fixation de test. Ajoutez un point de test sur BOOT0.

Comment la DFT permet les tests automatisés avec OpenHTF et TofuPilot

Avec des points de test, un accès JTAG et une interface de programmation contrôlable, vous pouvez construire une fixation qui pilote le DUT à travers une séquence de test complète sans intervention humaine.

tests/pcba_functional_test.py
import time
import subprocess
import serial
import openhtf as htf
from tofupilot.openhtf import TofuPilot


def program_firmware(test):
    """Flasher le firmware via SWD avec pyocd."""
    result = subprocess.run(
        ["pyocd", "flash", "--target", "stm32g431rb", "firmware.hex"],
        capture_output=True,
        text=True,
        timeout=30,
    )
    test.logger.info(result.stdout)
    if result.returncode != 0:
        test.logger.error(result.stderr)
        return htf.PhaseResult.STOP


@htf.measures(
    htf.Measurement("vcc_3v3")
    .in_range(minimum=3250, maximum=3350),
    htf.Measurement("vbat")
    .in_range(minimum=3500, maximum=4200),
)
def measure_power_rails(test):
    """Sonder les points de test VCC et VBAT avec un multimètre."""
    test.measurements.vcc_3v3 = 3312  # Remplacer par la lecture réelle du DMM * 1000
    test.measurements.vbat = 3850  # Remplacer par la lecture réelle du DMM * 1000


@htf.measures(
    htf.Measurement("uart_echo_ok").equals(True),
    htf.Measurement("uart_response_time")
    .in_range(minimum=0, maximum=100),
)
def test_uart_comms(test):
    """Envoyer une commande via UART, vérifier l'écho et le temps de réponse."""
    with serial.Serial("/dev/ttyUSB0", baudrate=115200, timeout=1) as port:
        port.write(b"PING\r
")
        t0 = time.monotonic()
        response = port.readline().decode().strip()
        elapsed_ms = (time.monotonic() - t0) * 1000

    test.measurements.uart_echo_ok = response == "PONG"
    test.measurements.uart_response_time = round(elapsed_ms, 1)


def main():
    test = htf.Test(
        program_firmware,
        measure_power_rails,
        test_uart_comms,
        test_name="PCBA Functional Test",
    )

    with TofuPilot(test):
        test.execute(test_start=lambda: input("Numéro de série : "))


if __name__ == "__main__":
    main()

Chaque phase correspond à un point de test ou une interface sur la carte. program_firmware utilise le SWD. measure_power_rails utilise les points de test sur VCC et VBAT. test_uart_comms utilise le connecteur UART.

Carte bien conçue vs carte mal conçue

ÉtapeDUT bien conçuDUT mal conçu
Contact de fixation100% de contact des ressorts sur grille 100 mil40% de contact à cause des vias hors grille et recouverts
Programmation firmwareConnecteur SWD, automatisé avec pyocdCâble USB manuel, dépendant de l'opérateur
Vérification des rails d'alimentationPoint de test sur chaque rail, sonde DMMPas de points de test, déduit uniquement de l'UART
Test de communication UARTConnecteur avec TX/RX/GND, phase de 3 secondesNécessite une modification de carte ou le sondage d'un pad CMS
Temps de cycle45 secondes automatisé, zéro intervention opérateur4 minutes avec deux interventions opérateur
Taux d'échappementFaible (couverture complète)Élevé (couverture partielle, étapes manuelles)

Checklist DFT

CatégorieVérificationCritère de réussite
Points de testTous les rails d'alimentation ont des points de testUn TP par rail, côté dessus
Points de testTous les domaines de masse ont un TP de référence de masseÀ moins de 25 mm des points de mesure critiques
Points de testLes E/S numériques clés sont testablesUART, SPI, I2C, GPIO ont des points de test
Points de testTous les TP font 0,9 mm minimum de diamètreVérifié dans le DRC
Points de testTous les TP sur grille 100 milVérifier dans le routage avec l'accrochage à la grille
Points de testAucun TP sous les connecteurs, dissipateurs ou blindagesVérification manuelle
ViasPas de vias recouverts de vernis épargne sur les nets critiquesRevue avec le rapport DFM du fabricant
JTAGChaîne de scan connectée de bout en boutTDO_n vers TDI_(n+1)
JTAGTRST tiré au niveau haut à la mise sous tensionRésistance de 10k vers VCC
JTAGEmpreinte du connecteur JTAG présentePeuplé sur EVT
ProgrammationConnecteur SWD ou JTAG accessible côté dessusVérifié avec le dégagement de la fixation
ProgrammationBroches de mode BOOT accessibles comme points de testBOOT0 ou équivalent exposé
DebugUART ou SWO accessible via connecteur ou TPDébit en bauds documenté
MécaniqueDégagement du bord de carte >= 3 mm pour tous les TPDRC propre
MécaniqueDégagement des composants >= 0,5 mm autour des TPCourse du contact à ressort vérifiée

Plus de guides

Mettez ce guide en pratique