Est-il possible de faire une interface JTAG avec un arduino?


14

Si oui, pourrait-on me diriger vers un site qui explique comment procéder? Je pense que j'ai peut-être trouvé un moyen , mais je ne sais pas si cela fonctionnerait encore (besoin de trouver quelque chose pour le tester).

Cette question est liée à une question précédente qui se trouve ici.

Dans le cas où des informations supplémentaires sont nécessaires.


JBailey Je viens de tomber sur votre question sur l'utilisation d'arduino pour créer un convertisseur JTAG-USB et je me demandais comment vous en êtes sorti? \

Réponses:


14

Oui, il est possible de transformer un Arduino en un adaptateur ARM JTAG.

Il y a trois problèmes, la tension, la vitesse et les pilotes.

L'Arduino fonctionne nativement à 5V. La plupart des microcontrôleurs ARM ne tolèrent pas 5 V sur leurs broches JTAG et nécessitent 3,3 V. La solution la plus simple consiste à faire fonctionner votre Arduino à 3,3 V , à défaut de quoi vous aurez besoin d'une sorte de conversion de niveau (voir la conversion I2C 3,3 à 5,0 V pour des idées).

L'Arduino est connecté à un PC via une liaison série. Je doute que cela puisse aller plus vite que 115200 bps, ce qui rendra très lentes les activités interactives comme parcourir le code dans un débogueur. Mais, vous pourrez télécharger du code et reflasher les appareils.

JTAG est un protocole de haut niveau, spécifique à chaque famille de processeurs, qui utilise une interface de type SPI pour échanger des données. La plupart des dongles JTAG fournissent simplement une interface SPI sur USB, puis laissent le reste du travail à une application PC. OpenOCD et URJTag sont des choix populaires. Vous aurez besoin d'un pilote dans l'un d'entre eux pour votre protocole Arduino JTAG.

Le Bus Pirate est très similaire à l'Arduino (microcontrôleur basse vitesse + puce FTDI). Il prend en charge JTAG avec OpenOCD, c'est donc certainement possible.

Si vous utilisez une carte Teensy / Opendous ou une autre carte AVR-USB, vous pouvez utiliser eStick-JTAG .

Mais, pour le coût perdu JTAG, je recommanderais l'un des dongles basés sur FTDI2232. Ils sont bon marché et bien pris en charge par OpenOCD.


5

C'est possible mais très difficile. Je n'aime pas les JTAG basés sur FTDI, car les puces FTDI sont des boîtes noires prêtes à l'emploi et on n'apprend pas vraiment en les utilisant.

Si je voulais construire un USB-JTAG avec AVR, j'en aurais un avec au moins un support USB pleine vitesse dans la puce. Ensuite, récupérez la pile USB AVR (codes source c) et regardez un exemple de série USB vers. Étant donné que le bitbang sur usb est une mauvaise idée (latence élevée), il doit être converti en commandes de niveau supérieur qui demanderont au MCU de faire le bitbang lui-même (ou d'utiliser SPI si possible) et de renvoyer le résultat de haut niveau sur usb (octets complets) ). Mais vient ensuite le besoin d'écrire des pilotes pour que l'IDE prenne en charge le nouveau périphérique JTAG pour déboguer dessus. OpenOCD et URJTag ont le code source des pilotes pour de nombreux périphériques jtag, vous devrez donc en obtenir et retravailler un pour votre périphérique nouvellement inventé. Découvrez comment certaines personnes ont effectué un travail similaire: http://code.google.com/p/estick-jtag/


1

Regardez openocd. Les backends sont principalement basés sur l'approche bit bang du port parallèle, je pense que cela va jusqu'à ne changer qu'un bit à la fois. Il est assez simple de prendre ce que je pense qu'ils appellent le backend factice qui est un exemple. Envoyez la commande d'écriture de bit à l'arduino, et définissez-la ou effacez-la. Lorsqu'on lui a demandé de lire le bit d'entrée, envoyez une commande à l'arduino pour effectuer cette tâche et renvoyer les résultats.

J'ai fait exactement cela avec succès, mais pas avec un arduino, j'ai eu la conversation openocd d'un hôte dans un noyau de bras simulé fonctionnant dans un simulateur hdl.

Notez que certaines spécifications jtag sont fermées, le cortex-m3 par exemple est une sorte de nombre réduit de broches jtag sérialisées qui la dernière fois que j'ai regardé n'était pas disponible sans NDA. cela peut ne pas avoir d'importance car openocd s'occupe de tout cela pour vous tant que vous utilisez une interface jtag prise en charge par openocd, le bit banged back end est l'endroit où votre arduino et quelle que soit l'interface que vous utilisez pour y accéder / en revenir entrent en jeu. .

Comme déjà noté par Joby, vous devez être prudent avec les tensions (toutes les saveurs arduino ne sont pas 5V et tous les contrôleurs de bras ne sont pas 3,3 volts) et le conditionnement du signal et la mise à la terre et tout ça. Si votre carte cible est alimentée par une alimentation à un niveau différent de celui avec lequel vous alimentez votre arduino, vous pouvez faire fondre quelque chose lorsque vous connectez les deux.


Notez que l'utilisation d'une interface série (ou pire, USB avec son transport en paquets) pour le banging de proxy peut être extrêmement lente. Il est beaucoup plus efficace que le microcontrôleur effectue des opérations complètes et communique avec lui à un niveau supérieur, c'est-à-dire lui dise de lire ce registre, de l'écrire ou même de programmer ce bloc de données.
Chris Stratton

1

C'est possible, et je l'ai effectivement mis en œuvre et expliqué tout ici .

Il y a une bibliothèque sur github ici qui se compose de deux parties: le programme qui s'exécute sur arduino et un script python qui envoie des fichiers XSVF à l'arduino.

Vous aurez très probablement besoin de quelques résistances pour convertir 5 V en 3,3 V, car la plupart des FPGA et CPLD utilisent ce niveau de tension.

J'ai également fait quelques expériences en écrivant un assembleur / désassembleur pour les fichiers XSVF, le code est dans la même bibliothèque github et est expliqué dans cet article ici .

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.