Qu'est-ce qu'un JTAG?


30

Je suis assez nouveau dans les systèmes embarqués, et je continue à voir ce terme utilisé tout le temps, mais je ne comprends pas très bien de quoi il s'agit. Une recherche rapide en ligne donne cette page Wikipedia: https://en.wikipedia.org/wiki/Joint_Test_Action_Group qui la décrit comme une sorte de protocole de débogage. Mais dans d'autres contextes, il a utilisé comme s'il était capable de programmer la mémoire d'une puce comme un programmeur. Qu'Est-ce que c'est?


4
Il y a quelques joyaux utiles cachés dans cette question .
David

2
J'ai donné à dwelch un +1. De plus, JTAG est parfois utilisé à mauvais escient comme un verbe signifiant, génériquement, «déboguer / tester» une chose. Une personne "JTAG 'quelque chose" peut en fait utiliser un protocole différent que le fabricant de l'appareil a chevauché avec les broches JTAG physiques (c'est-à-dire SWD). Vous pouvez SWD ou JTAG, mais pas les deux. Personne n'a SWD ("swoods"?) Leurs appareils, cependant.
Jon

Oui, vous pouvez programmer avec JTAG
Snoop

Réponses:


21

C'est comme USB, SPI, I2C et d'autres "bus", et il a un certain nombre d'utilisations populaires, sans s'y limiter:

  • L'un en particulier consiste à tester le silicium avant d'en investir trop dans chaque pièce, par exemple pendant qu'une puce est encore sur la plaquette, vous pouvez vérifier la majeure partie de la pièce. Certes, le découpage en tranches de la plaquette peut faire des dégâts, vous voulez donc tester à nouveau, mais peut-être que vous le faites avant l'emballage, peut-être après.

  • Vous pouvez l'utiliser pour effectuer un balayage des limites sur les cartes. Vous pouvez prendre une carte sur une ligne de production (étant donné que la carte doit être bien conçue et qu'un certain pourcentage des puces doivent le prendre en charge), mais vous pouvez faire des tests de connectivité à faible vitesse, stimuler la broche à une extrémité d'une trace et en scanner d'autres pièces pour voir qu'ils sont ou ne sont pas connectés selon la conception de la carte.

  • Étant donné que les puces ont déjà ces broches dédiées, pourquoi pas, pour les processeurs, utiliser cette même interface comme un moyen de parler à un débogueur sur puce (OCD), de concevoir quelque chose dans le processeur et de permettre à cela d'être parlé via jtag.

C'est une façon générique de vous permettre d'isoler des éléments de la chaîne à laquelle vous souhaitez envoyer une série de bits ou d'obtenir une série de bits, de manière à ce que chaque chose à laquelle vous souhaitez parler puisse être conçue pour différents nombres. de bits d'un petit nombre à un grand nombre. Pour un débogueur, vous le feriez naturellement écrire ou lire à partir d'une chose de la taille d'un registre dans votre puce - peut-être un registre 16 bits ou 32 bits. Mais pour les tests de silicium ou de carte, votre chaîne de numérisation peut contenir des dizaines de bits. Chaque élément individuel que vous abordez peut varier en taille, si vous le souhaitez, de toute autre chose, ce qui en fait un bus très polyvalent avec un nombre relativement petit de broches qui est attrayant pour ces types de cas d'utilisation.

Peut-être en raison de la popularité du débogage de logiciels, ils ont maintenant quelques solutions à deux broches pour économiser sur le nombre de broches pour les microcontrôleurs et peut-être que d'autres adopteront cela, peut-être pas.


Y a-t-il des aspects techniques de JTAG qui le prêtent à ces utilisations, ou est-ce juste pour des raisons historiques?
Owen

Lisez bien l'article de wikipedia. Mon avis est parce qu'il était déjà là et câblé dans les cartes et les puces, et parce qu'il était suffisamment flexible pour prendre en charge d'autres utilisations, et au moins certains avaient déjà des outils en place, quelqu'un devait avoir dit pourquoi ne pas l'utiliser pour ces autres choses. Je pense que sa flexibilité par rapport au nombre de broches le rend très attrayant. Il existe et continue d'exister d'autres solutions pour les débogueurs ou la programmation de circuits, mais grâce aux instructions FTDI MPSSE et au succès de FTDI en général avec tout USB, des outils jtag peu coûteux sont désormais largement disponibles.
old_timer

10

JTAG était à l'origine une interface utilisée pour tester les PCB après assemblage. Les lignes d'E / S sur les puces pouvaient être contrôlées et lues via les ports JTAG permettant d'effectuer une séquence de test de carte. Plus tard, il a également commencé à être utilisé comme interface de programmation et de débogage. La fonctionnalité disponible sur JTAG dépendra du CI particulier avec lequel vous traitez.

Un avantage de JTAG sur la plupart des autres interfaces de programmation est que les périphériques peuvent être connectés en guirlande. Ainsi, un port JTAG peut servir à programmer / déboguer / tester plusieurs appareils (bien que je conseille de concevoir vos systèmes afin que différentes marques de puces puissent être réparties sur différentes chaînes, tandis que le protocole JTAG de bas niveau est assez standardisé, malheureusement, les outils dont vous avez besoin pour programmer / déboguer les puces ne le sont pas).


9

JTAG est un terme un peu étrange. Pour commencer, le terme peut spécifier un connecteur et un protocole spécifiques, composés d'un signal d'horloge (TCK), d'un mode de sélection (TMS) et de données d'entrée / sortie (TDI / TDO). Cela comprend un réseau de périphériques, où le TDO de chaque périphérique est connecté au TDI du périphérique suivant dans une soi-disant chaîne de balayage. TMS est utilisé pour mettre tous les appareils simultanément dans différents modes .

Les dispositifs sur la chaîne de balayage sont généralement connectés en tant qu'un grand registre à décalage composé de registres dans chaque dispositif individuel. Lorsque les périphériques sont dans l'état SHIFT_IR ou SHIFT_DR, ils se connectent à la chaîne de balayage l'un des deux registres temporaires: un registre d'instructions et un registre de données.

Une fois qu'une valeur est déplacée, le mode UPDATE_IR ou UPDATE_DR peut être activé en réglant TMS de manière appropriée tout en basculant TCK. À ce stade, la valeur décalée dans le registre "prend effet". Par exemple, le déplacement de diverses séquences dans l'IR d'un FPGA et la transition vers UPDATE_IR entraîneront le FPGA à entrer dans différents modes tels que la configuration, la relecture, l'exécution normale ou l'accès à des registres d'utilisateurs spécifiques et à des primitives spécifiques à JTAG instanciées dans la conception.

De même, les états de capture peuvent être utilisés pour «lire» une valeur de l'appareil et la mettre dans l'IR ou le DR, pour être déplacé via TDO et finalement lu par le programmeur JTAG.


4

JTAG définit un protocole série et certaines commandes pour permettre l'accès aux registres internes au sein de circuits intégrés complexes. Cela permet à un testeur d'obtenir l' observabilité et la contrôlabilité de manière standard en utilisant peu de broches.

L'usage d'origine était pour le «balayage des limites», où toutes les broches d'E / S pouvaient être lues et pilotées par un grand registre à décalage qui entoure la puce. Cependant, il a été rapidement augmenté pour ajouter d'autres registres à décalage pour accéder aux composants internes de la puce, y compris les mémoires.

Vous bit-bang JTAG rarement, l'accès se fait généralement par le biais de bibliothèques, également appelées pilotes, fournies par le fabricant du CI, et utilisées par le système de test et l'adaptateur d'accès au test.


Donc, la puce doit réellement prendre en charge un JTAG à la fois par le matériel et le logiciel?
UnTraDe

@UnTraDe Non, la puce prend en charge JTAG dans le matériel et peut dans le logiciel (par exemple, un FPGA peut exposer certaines interfaces entre JTAG et la conception utilisateur), mais il n'est pas nécessaire d'avoir une prise en charge logicielle sur la puce. Les outils que l'on utiliserait pour interagir avec des appareils via JTAG auraient à la fois un support logiciel et matériel (logiciel sur un ordinateur et matériel en termes de programmeur JTAG attaché à cet ordinateur)
ζ--

3

Il y a ce que JTAG «signifie» et il y a ce que JTAG «est». Comme d' autres l' ont souligné JTAG 'est' une interface de bus standard de l' industrie pour les tests de fabrication, comme dans J Oint T EST A ction G roupe.

Ce que JTAG «signifie» pour un développeur de logiciels embarqués, c'est l'interface de débogage sur le SoC / microprocesseur pour le débogage externe des logiciels embarqués exécutés sur la puce. Presque tous les CPU / SoC du marché utilisent l'interface JTAG non seulement pour les tests de fabrication, mais pour la prise en charge du débogage logiciel. Vous trouverez une interface JTAG sur tout, des processeurs x86 de classe serveur aux routeurs WiFi domestiques à moins de 50 $. Avec le bon matériel d'interface et le bon logiciel, ces interfaces vous donneront la possibilité de lire / écrire la mémoire, de définir des points d'arrêt et du code en une seule étape.

La clé est bien sûr d'obtenir le bon matériel et les bons logiciels. Même si l'interface JTAG de base est normalisée, les fonctionnalités de débogage logiciel spécifiques disponibles dans un périphérique peuvent ne pas l'être. JTAG est comme TCP / IP. Il existe au milieu de la pile d'applications. Vous avez besoin de la bonne couche physique pour communiquer avec l'équipement (c'est-à-dire que voulez-vous dire que cette chose utilise 10-Base-2?!?!?), Et vous avez besoin du bon logiciel d'application au-dessus (que voulez-vous dire, j'ai besoin d'un Gopher client?!?!?!). Cependant, la force de l'écosystème ARM y a conduit à un certain degré de standardisation (voir OpenOCD).

Vous avez également demandé comment utiliser JTAG pour programmer le flash. Oui, certains logiciels l'utilisent également à cette fin. Le SoC peut fournir des fonctionnalités JTAG pour lire / écrire à partir des espaces d'adressage de la mémoire du processeur, il peut fournir un accès direct aux contrôleurs flash et, au minimum, JTAG fournit un accès brut de bas niveau aux broches d'E / S sur le bord de la puce (c'était le but initial de JTAG, qui était de permettre le test de continuité des interconnexions puce à puce pendant le test de fabrication, c'est-à-dire «JTAG edge scan»). N'importe laquelle de ces fonctionnalités pourrait être utilisée par des programmeurs intelligents pour piloter les signaux nécessaires à la reprogrammation d'une puce flash au cas où un appareil serait accidentellement «maçonné».

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.