# JTAG

## Description

Le JTAG est le nom de la norme IEEE 1149.1 intitulée « Standard Test Access Port and Boundary-Scan Architecture », qui été normalisée en 1990. Le terme JTAG, désignant le groupe de travail qui a conçu la norme, est abusivement utilisé au lieu du terme générique Boundary Scan, ou du sigle TAP.

## Instructions Boundary Scan

La norme IEEE 1149.1 définis des instructions spécifiques pour les boundary scan incluants notamment les instructions:

* **BYPASS**: Permet aux données BST de passer de manière synchrone à travers les appareils cibles vers les appareils adjacents pendant le fonctionnement normal de l'appareil.
* **SAMPLE**/**PRELOAD**:&#x20;
  * Permet à un modèle de données initial d'être une sortie au niveau des broches de l'appareil.
  * Vous permet de capturer et d'examiner un snapshot des signaux au niveau des broches de l'appareil si l'appareil fonctionne en mode normal.
* **EXTEST**:&#x20;
  * Force le motif de test sur les broches de sortie et capture les résultats du test sur les broches d'entrée.
  * Vous permet de tester les circuits externes et les interconnexions au niveau de la carte.
* **INTEST** (Optionnel):
  * Contrairement à l'instruction EXTEST, INTEST force le motif de test sur les broches d'entrées et capture les résultats du test sur les broches de sorties.
* IDCODE (Optionnel): Permet d'identifier un système.

## Les TAP (Test Access Ports)

TAP peut utiliser cinq signaux dont un optionnel:

* TCK (Test Clock Input)
* TMS (Test Mode Select)
* TDI (Test Data Input)
* TDO (Test Data Output)
* TRST (Test Reset Input, Optionnel)

<figure><img src="https://3571537825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOIXudYEdnnE8JjXBrL0o%2Fuploads%2FSjqZppOfL6zDZ33adhoM%2Fimage.png?alt=media&#x26;token=fd141be8-c496-4f0b-9ce3-200fdbe83a3e" alt=""><figcaption><p>Architecture JTAG basique</p></figcaption></figure>

## Identifier les pins JTAG

### Via le [JTAGulator](https://blog.s1rn3tz.ovh/equipements#jtagulator)

Le JTAGulator est un système créé spécifiquement pour identifier les pins JTAG. l'outil permet de bruteforcer les pins à l'aide des instructions IDCODE et BYPASS vues précédemment puis attend les réponses de ces pins pour les afficher dans l'ordre des pins du système cible.

### Via l'utilitaire JTAGenum

JTAGenum est un scanner open source (expérimental) Arduino (`JTAGenum.ino)`ou RaspbberyPi (`JTAGenum.sh)`. Ce code a été construit avec trois objectifs principaux :

1. Déterminez quelles sont les lignes JTAG.
2. Énumérer le registre d'instructions pour trouver des fonctionnalités non documentées.
3. être facile à construire et à appliquer.

ressource: <https://github.com/cyphunk/JTAGenum/>
