Bus Blaster - interface bit-bang rapide et universelle pour les patients passionnés



Je voulais depuis longtemps avoir une sorte d'interface matérielle simple et universelle avec plusieurs signaux d'entrée et de sortie, dont la fonctionnalité est déterminée exclusivement par un logiciel, comme le mémorable programmeur PonyProg . Et pour qu'il puisse être utilisé non seulement comme firmware de lecture / écriture, mais aussi pour le débogage de programmes via JTAG. En même temps, acheter quelque chose d'industriel, avec mes petits soins occasionnels avec l'électronique, est redondant et non rentable - cela nécessitait quelque chose d'une série de "produits semi-finis" basés sur le bit-bang .

Qu'est-ce que le bit bang et pourquoi est-il nécessaire
- , Windows 9x (COM) (LPT) . , , . , , . bit-bang, — «», «» ..

2k/XP /, giveio. NT, - .

Comme vous le savez, les ordinateurs modernes, en particulier les ordinateurs portables, dotés de ports matériels ne sont pas encombrés, car la plupart des utilisateurs n'en ont pas besoin. Les adaptateurs USB pour connecter des périphériques avec des interfaces RS232 et Centronics (familièrement - COM / LPT) ne fonctionnent bien que dans le cadre de l'objectif principal, et il est problématique de les «secouer» pour un certain nombre de raisons. Premièrement, la plupart de ces adaptateurs ne peuvent traiter que les signaux de données (le même Tx / Rx) avec une bonne vitesse, et ils traitent les signaux de commande avec des retards importants. Deuxièmement, les adaptateurs de différents fabricants sont incompatibles avec le matériel et les possibilités de contrôle non standard via le pilote du fabricant sont très limitées. Troisièmement, presque tous les pilotes utilisent des paquets USB distincts pour envoyer des commandes à l'adaptateur, ce qui limite la fréquence des changements d'état à seulement mille fois par seconde,ce qui pour de nombreuses applications est catastrophiquement petit.

Heureusement, FTDI propose depuis longtemps une gamme de solutions USB qui se concentrent spécifiquement sur l'échange à haute vitesse de signaux arbitraires. Une étude rapide du problème a montré que les plus populaires à cet égard sont les interfaces des microcircuits FT232H / FT2232H .

Solutions simples


Initialement, FTDI implémentait dans ses interfaces USB FT232BM, FT232R et similaires deux modes supplémentaires - bit-bang asynchrone et synchrone. Pour cela, huit lignes de signal supplémentaires ou plus sont ajoutées, chacune pouvant être configurée pour l'entrée ou la sortie. Les données tamponnées transmises à l'interface par l'ordinateur sont définies sur les lignes de sortie par les signaux d'horloge, les données d'entrée sont lues sur les lignes, mises en mémoire tampon et envoyées à l'ordinateur. La liaison des E / S à l'horloge offre une bonne précision des intervalles - l'application n'a plus besoin de prendre soin de les maintenir par programmation.

Ainsi, au lieu du cycle traditionnel du type «réglez le niveau actif sur la ligne de sortie; pause; lire l'état de la ligne d'entrée; définir le niveau passif sur la ligne de sortie », l'application génère une séquence d'octets, chacun définissant l'état des lignes de sortie pour une période d'horloge. La séquence est envoyée à l'interface et de là, la même séquence est lue, reflétant l'état des lignes d'entrée. En mode asynchrone, l'entrée et la sortie se produisent indépendamment l'une de l'autre. En lecture synchrone des entrées est effectuée immédiatement avant le réglage des signaux aux sorties, ce qui permet un travail plus fiable avec des signaux changeant rapidement.

Contrôleur MPSSE


Le contrôleur série synchrone multiprotocole ( MPSSE ) a été ajouté à la version H des microcircuits FTDI , qui implémente divers modes d'échange d'horloge et de données dans le matériel. La formation des signaux du protocole souhaité est effectuée en transmettant au contrôleur une série de ses commandes internes qui spécifient les méthodes de synchronisation, la synchronisation des signaux de réglage / lecture (à l'avant ou au bas de l'impulsion d'horloge), l'ordre de transmission des bits (LSB / MSB). Le contrôleur renvoie une séquence de «clichés» des lignes d'entrée. Le taux de transfert de données peut atteindre 30 Mbps.

Grâce au MPSSE, les protocoles JTAG , I2C et SPI sont le plus naturellement implémentés.Cependant, presque toute «secousse» peut être facilement implémentée dans les capacités matérielles du contrôleur.

FTDI offre une documentation complète sur la connexion et la programmation de ses interfaces, bibliothèques et exemples de programmes pour travailler via les pilotes MPSSE pour Windows, Linux et MacOS , D2XX pour une interaction directe avec l'interface.

Les interfaces FTDI sont prises en charge par les programmes populaires OpenOCD , UrJTAG , flashrom , avrdude , HappyJTAG2 , zJTAG , etc.

Problèmes de connectivité


Après avoir découvert tout ce qui précède en détail l'année dernière, j'ai été inspiré, mais j'ai immédiatement constaté que le FT232H / FT2232H, avec toute sa polyvalence, ne pouvait pas toujours être connecté directement au dispositif final. Premièrement, les lignes externes des microcircuits sont conçues pour le niveau de 3,3 V, et dans de nombreux appareils modernes, les niveaux de 2,5 / 1,8 / 1,5 V. sont utilisés. réglage des lignes en sélectionnant le mode «entrée» ou «sortie». Autrement dit, pour connecter une puce avec MPSSE au périphérique cible, un circuit tampon est nécessaire qui correspond aux niveaux de signal et fournit un arrêt opérationnel de certaines lignes de sortie (par exemple, avec un niveau de signal TMS passif/ Cs ).

Googler sur les options pour les circuits tampons, j'ai trouvé qu'un nombre incroyable d'adaptateurs ont été fabriqués dans le monde, ne différant que par ce tampon. Certains programmes (mais pas tous) permettent l'utilisation de différents types de tampons. Ainsi, en choisissant un modèle d'adaptateur spécifique, vous limitez en même temps la gamme de programmes qui fonctionneront avec lui. Et pour décider à l'avance du type, il fallait à nouveau réfléchir sur Google et lire les discussions sur les forums, ce que je ne voulais pas faire du tout. Certains adaptateurs permettaient de définir la configuration du tampon avec des cavaliers, mais cela est semé d'erreurs et ils ne sont pas bon marché.

Bus Blaster - revendiquer la polyvalence


L'idée masculine de Dangerous Prototypes était originale à deux reprises: la première - en tant que tampon connecté à la puce FT2232H PLD (CPLD) Xilinx XC2C32A , qui peut être reprogrammée rapidement dans n'importe quelle configuration, et la seconde - à son utilisation, la reprogrammation du deuxième canal FT2232H. En plus d'implémenter la logique du tampon, le FPGA effectue une correspondance de niveau - ses lignes externes fonctionnent dans la plage de 1,5 à 3,3 V.

Par conséquent, la carte Bus Blaster s'est avérée. Depuis l'avènement du projet, quatre versions de la carte ont été remplacées. La version 3 est considérée comme la plus stable et la plus répandue. La version 4 contient un grand FPGA qui n'est pas entièrement développé et est utilisé beaucoup moins fréquemment. Les prochaines versions, apparemment, ne le seront plus, puisque le développement du projet a été arrêté il y a quelques années. J'ai eu l'impression que peu de gens ont vraiment essayé la carte - avec son potentiel élevé, elle n'est pas trop facile à utiliser. Une section du forum a été créée pour le conseil d'administration , mais depuis l'année dernière, presque rien n'y a été écrit.

Après réflexion, j'ai commandé sur la version AliExpress 3c , la plus développée, pour 34 $. Ensuite, ils y ont été vendus par un magasin du fabricant - Seeed , et maintenant seuls les concessionnaires à partir de 52 $ le vendent.Directement chez Seeed (avec l'expédition), il en coûtera quelque part en 37 $.

Premières impressions


La planche est exactement la même que sur la photo - belle, soignée, faite de haute qualité. Lors du forum, quelqu'un s'est plaint du manque de sortie du microcircuit, j'ai donc soigneusement examiné mon sous une loupe - je n'ai trouvé aucun défaut. J'avais déjà installé les

pilotes D2XX plus tôt, donc la carte a été reconnue lors de vos déplacements. La première étape a été de traiter la logique de la mémoire tampon de programmation dans les FPGA. Cela se fait à l'aide du programme UrJTAG , mais spécialement ajusté pour Bus Blaster pour un accès approprié au deuxième canal FT2232H.

Vous devez d'abord télécharger et installer la version de base d'UrJTAG . Ensuite, vous devez ajouter un fichier EXE modifié et une description du FPGA (BSDL) de ce package. Pour programmer le FPGA intégré, vous devez exécuter un EXE modifié, pour travailler avec des périphériques externes - le principal. La procédure de programmation FPGA est décrite ici . Pour plus de commodité, vous pouvez créer des scripts pour UrJTAG pour chaque version du tampon et des fichiers CMD avec des lignes de commande pour les exécuter.

Une collection de micrologiciels FPGA décrivant les tampons compatibles avec les adaptateurs JTAGkey , KT-Link et PicoTap est disponible ici , mais pour BBv3, il n'y a qu'un seul fichier pour JTAGkey avec prise en charge de l'autotest (BBV3-JTAGkey-selftest-v1.1.svf). La plupart est suffisant, mais cela n'a pas fonctionné pour moi avec flashrom , qui sera discuté ci-dessous.

Après avoir écrit ce firmware dans le FPGA, j'ai mis des cavaliers dans le connecteur pour l'auto-test, comme décrit dans la documentation , fermé la ligne P28 (IO09) au sol - la LED sur la carte s'est allumée. J'ai téléchargé et lancé le programme de test - il a montré que tout était en ordre.

Il est étrange, en passant, que le programme d'auto-test s'appelle "BusPiratev2Test", car Bus Pirate est un projet complètement différent, non compatible avec BB .

Au début, je pensais généralement que ce firmware était destiné uniquement à l'auto-test, et pour les applications «militaires», un autre type était nécessaire, car la description dit quelque chose d'inaudible. Ensuite, j'ai découvert que le firmware est universel, seul le mode de test est activé en court-circuitant P28 au sol.


( , , 404) flashrom v0.9.6.1-r1704/Win32, - MX25L8005 (SPI), , "-p ft2232_spi:type=busblaster". flashrom , FT2232. , libusb — , Linux, Windows.

libusb , , . - SPI- — . — TMSremue, TCK est, TDO est activé et silence sur TDI . En général, pas une seule poussée. J'ai connecté les canaux de l'oscilloscope simultanément à TCK et TDO - les signaux changent de manière synchrone, clairement. Il n'y avait encore aucune idée de ce qui pouvait être vérifié.

Abandonner temporairement les expériences avec flashrom, connecté à l'interface ATTiny13 . Téléchargement ici de quelques versions différentes avrdude , avec la version 5.11-Patch7610 / Win32 et le type de programmation 2232HIOenfin obtenu une identification claire, la lecture et l'écriture du contrôleur. Après s'être réjoui, il a reconnecté les puces SPI, mais flashrom a obstinément refusé de les reconnaître.

Soupçonnant que les deux microcircuits sont morts, il a retiré USBASP 2.0 , qui a été échangé pour AsProg - il les a lus sans problème (quoique très lentement). Soit dit en passant, j'ai acheté trois USBASP en général pour le rôle de cartes de prototypage pratiques sur ATMega8, mais l'appareil s'est avéré être multifonctionnel de manière inattendue.

J'ai à nouveau connecté les microcircuits à BB et j'ai commencé à essayer le flashrom dans différents modes (Bus Blaster et JTAGKey), avec différentes valeurs de diviseur ( -p ft2232_spi: type = busblaster, divisor = n) Soudain, dans l'une des combinaisons, le microcircuit a été reconnu, mais a déjà refusé de lire. Après quelques tentatives supplémentaires, l'identification a également disparu. Ensuite, plusieurs fois, il a été possible d'obtenir plusieurs identifications réussies d'affilée, mais la lecture n'a jamais été réalisée.

Publié dans le forum, mais n'a reçu rien de sensé en réponse. Après avoir fouillé dans la recherche, j'ai trouvé les plaintes de plusieurs personnes concernant le firmware FPGA universel (avec auto-test), j'ai trouvé trois autres versions de firmware là-bas, les ai essayées dans différentes combinaisons avec d'autres paramètres, mais je n'ai pas réussi. Après avoir épuisé toutes les options, il a abandonné les expériences jusqu'à l'arrivée de l'analyseur logique commandé un peu plus tard BB.

Test avec un analyseur


Ayant reçu un clone du populaire analyseur logique Saleae Logic 16 , il l'a connecté aux quatre lignes SPI . Le programme, disponible gratuitement sur le site Web de Saleae , peut déchiffrer I2C, SPI et plusieurs autres, il a donc immédiatement montré le déchiffrement de tous les paquets - envoyés et reçus. Il est immédiatement devenu clair que les paquets «flottent» - la même séquence de bits est regroupée par le programme en paquets à différentes frontières, encore et encore.

En comparant les diagrammes de signaux sur les fiches techniques des microcircuits avec ceux enregistrés, j'ai remarqué à un moment donné que le signal TMS (connecté à la broche CS) au début de chaque session d'échange, il passe à un niveau bas (niveau actif), dans lequel il reste, bien que selon le protocole il devrait revenir à un niveau haut (passif) à la fin de chaque opération. J'ai changé le firmware «officiel» du FPGA en l'un des alternatives - TMS a commencé à bouger plus activement, les bordures des paquets alignés dessus, et après avoir sélectionné le diviseur de fréquence d'horloge dans la ligne de commande flashrom (arrêté à 8), le microcircuit a finalement commencé à répondre clairement à chaque requête, lu et écrasé .

Surpris de ne pas avoir immédiatement prêté attention au comportement de TMS , je me suis rendu compte que j'étais confus du travail réussi avec AVR sur le même firmware FPGA. En regardant la fiche technique ATTiny13, j'ai trouvé que le signal RESET , que TMS démarrepeut être faible pendant tout le temps d'échange, sa montée pour la synchronisation n'est pas nécessaire. Et les puces SPI ont besoin de son ascension pour la synchronisation.

À la suite de tests, j'ai rassemblé des informations sur trois micrologiciels FPGA bien connus dans un message sur le forum .

Limite de réécriture FPGA


Dans l'une des discussions, je suis tombé sur un avertissement que le nombre garanti de cycles de réécriture du firmware de ce FPGA n'est que d'environ mille. Au début, j'étais bouleversé, car pendant les expériences, j'ai réussi à changer une centaine de fois le firmware, et j'imaginais déjà la mort imminente de la puce. Cela ne coûte rien, mais je ne veux pas jouer avec la soudure. Il a ensuite réalisé qu'avec une approche adéquate, les neuf cents cycles restants seraient suffisants pour encore de nombreuses années.

Clignotement en circuit de la ROM dans le routeur


Après un certain temps, j'ai formé un mini-routeur fraîchement cuit sur le RT5350F sous le nom de code "ZLMNet H-G5 / P8201" (désignations tirées de l'interface Web). Vers la même époque, le clip pour SOIC8 / SOP8 est arrivé aussi - j'ai décidé d'essayer de travailler en circuit avec la ROM.

Au début, le flashrom ne voyait pas du tout l'EPROM via BB. L'oscilloscope a montré que le processeur a invariablement vaincu la lutte entre le FPGA et le processeur du routeur pour les niveaux de signal de CS et CLK . Ce qui n'est pas surprenant - dans BB entre les bornes FPGA et le connecteur, il y a des résistances de limitation de courant qui sauvent les clés FPGA à faible courant de l'épuisement.

J'ai connecté USBASP avec AsProg - celui-ci lit / écrit normalement, mais encore une fois lentement (9 minutes pour lire, 25 minutes pour le cycle d'effacement-écriture-vérification). Pour une seule revitalisation d'une brique, c'est toujours acceptable, mais pour des expériences avec un firmware instable ce n'est plus là. De plus, AsProg ne sait pas travailler avec des pages individuelles - seulement avec le microcircuit entier.

J'ai soudé entre les sorties TMS / TCK dans BB et les entrées CS / CLK de l' EPROM pour l'émetteur suiveur - les signaux immédiatement réduits à presque les niveaux corrects, la puce flashrom a reconnu, a commencé à lire / écrire en toute confiance. Avec un diviseur de 8, une lecture complète prend moins d'une minute, la réécriture prend environ deux minutes.

Il s'est avéré que la communication du programmeur avec l'EPROM n'interfère pas du tout avec le processeur - le routeur fonctionne parfaitement. De toute évidence, les lignes CS / CLK sont allouées uniquement à l'EPROM, qui est lue une fois au démarrage, après quoi le processeur n'y accède pas si vous ne commencez pas à la flasher avec des moyens réguliers.

Inconvénients des programmes BB


Les programmes testés (zJTAG, flashrom, avrdude, UrJtag, OpenOCD) qui peuvent fonctionner avec MPSSE ont fait une très triste impression. Premièrement, dans la plupart de ces programmes, avec toute la variété d'adaptateurs FTDI, il n'y a aucune indication explicite de VID / PID - les identificateurs d'adaptateurs connus sont codés en dur dans le code. Mais pour JTAGkey, qui émule BB, PID est défini sur CFF8 et pour FT2232H «propre», il est défini sur 6010. Bien sûr, vous pouvez modifier les identificateurs dans BB à l' aide de FT_Prog , ou patcher la table dans le programme, mais les deux options sont également tordues. Eh bien, j'ai réussi à trouver une version de flashrom avec le support BB compilé pour Windows (sinon je devrais installer CygWin), et avrdude fonctionne très bien lors de la spécification du type de programmeur 2232HIO .

Deuxièmement, certains programmes fonctionnent avec l'adaptateur uniquement via la bibliothèque libusb , qui, à son tour, fonctionne via son propre pilote, ce qui est incompatible avec les pilotes FTDI. C'est bien que dans Windows, pour basculer entre les pilotes, vous n'avez pas besoin de supprimer complètement l'un et d'installer l'autre - il vous suffit de le «mettre à jour» en choisissant de force le bon pilote pour le périphérique donné (canal A ou B).

résultats


Maintenant, rappelant la quantité cumulée de temps et de nerfs consacrés à toutes les expériences décrites, je comprends que le prix de l'élégance extérieure et l'universalité apparente de la solution se sont avérés prohibitifs. Je passe ce temps en plus sur le travail principal - je gagnerais de sérieux programmeurs industriels et débogueurs. Mais le plus indubitable est que de tels exercices vous permettent au moins d'une manière ou d'une autre de s'abstenir de la diapositive finale dans la consommation nette de modules personnalisés prêts à l'emploi, que les Chinois proposent en abondance. En ce sens, il est possible d'envier les ingénieurs anciens et médiévaux - pendant des décennies, ils pourraient résoudre avec enthousiasme des problèmes résolus il y a longtemps sur quelques milliers de kilomètres dans le quartier, tout simplement sans le savoir.

Nous devrions essayer OpenOCD et JTAG sur certains des routeurs disponibles, mais tout le monde n'y met pas la main.

Dangerous Prototypes a également un ancien projet Bus Pirate . Il y a une carte PIC et une interface simple FT232BL en mode série traditionnel. Pour communiquer avec le contrôleur, un terminal standard et des commandes de texte sont utilisés, les réponses sont également affichées sous forme de texte. avrdude, flashrom et un certain nombre d'autres programmes peuvent également fonctionner via BP, cependant, pour des raisons évidentes, la vitesse est plusieurs fois inférieure. La faible vitesse est compensée par l'étendue de l'application - il existe de nombreuses options pour utiliser BP pour émuler divers protocoles.

Pensant que dans cette vie, vous devez tout essayer, j'ai commandé BP v3.6avec câble. Oui, oui, je me souviens des souris sur le cactus et de "demain j'y retournerai".

Source: https://habr.com/ru/post/fr380531/


All Articles