Programmeur pour EPROM sur Arduino

Lors de l'étude et de la réparation d'ordinateurs plus anciens que moi, il était nécessaire de flasher des ROM. Tests de RAM et périphériques à effectuer. Je n'avais pas de programmeur normal à l'époque.


Bien sûr, il est possible d'assembler sur la logique du port LPT, mais cette option a été rejetée, car pour l'utilisation, il serait nécessaire d'inclure un autre vieil homme. Dans les ordinateurs modernes, cette interface est toujours présente (mais pas un connecteur à part entière, mais sur le peigne) et l'achat d'une carte dans un emplacement PCI n'est pas non plus un problème, mais il existe déjà des difficultés avec le logiciel. Il a été écrit il y a longtemps lorsque l'utilisation des ports d'entrée / sortie dans les systèmes d'exploitation était effectuée différemment. Par conséquent, dans les versions modernes des logiciels Windows, cela ne fonctionnera pas.


Il convient de mentionner tout de suite que je connais l'existence du TL866. Et même pendant le processus de développement, il l'a acheté pour lui-même, mais il n'est pas en mesure de flasher des puces qui nécessitent une tension de programmation élevée. Maximum 18 volts (TL866 + ou 21 pour la version précédente).


Une recherche rapide sur Google m'a conduit à ce référentiel . Après avoir assemblé le programmeur, j'ai pu jeter quelques puces d'intérêt. Mais avec le firmware, tout s'est avéré beaucoup plus compliqué ... Le logiciel ne sait tout simplement pas comment ... Bien sûr, vous pouvez le tromper en exposant la mauvaise puce, mais cela ne fonctionne pas dans tous les cas et ce n'est clairement pas notre méthode


J'ai été très déçu de l'interface utilisateur qui, au lieu de la version classique avec le droit de sélectionner le port pour l'utilisateur, a parcouru toutes les interfaces série disponibles. En conséquence, tous les appareils redémarrent. C'est particulièrement offensant, probablement, lorsque vous avez une imprimante 3D pendant 10 heures pour imprimer une pièce à partir d'un lecteur flash USB, et ici une telle configuration ...


Le monde d'OpenSource est magnifique en ce que vous pouvez prendre le projet et l'ajouter à votre tâche. Dans ce cas, il n'y a pas de code source pour l'interface graphique. Au moins, je ne les ai pas trouvés, même si je pouvais écrire au développeur. C'est devenu intéressant et il y avait une petite raison d'étudier Qt. Le logiciel sera donc multiplateforme.


Nous prenons comme base le schéma du projet précédent et modifions l'appareil à la fonctionnalité requise. J'ai décidé de sacrifier le support EEPROM dans les logiciels. Ce n'est peut-être pas une bonne solution, mais les puces effaçables électriquement n'ont plus besoin d'une tension aussi élevée. Lors de la finalisation, je me suis appuyé sur le microcircuit le plus volumineux (27C512 pour DIP28) et j'ai éliminé toute confusion concernant les jambes d'adresse. L'adresse entière sera définie exclusivement à l'aide de registres à décalage (74HC595). Cela libère les jambes supplémentaires du microcontrôleur lui-même, qui seront nécessaires pour contrôler l'alimentation en tension de programmation. Et tous les signaux nécessaires (PRG) peuvent être obtenus en modifiant l'adresse avant de la charger dans les registres.


Le principe d'application de la programmation de la tension est resté le même. Modifications uniquement dans le domaine de la protection des broches du microcontrôleur et des registres à décalage. J'ai remplacé les résistances (1 KOhm) par des diodes avec un pull-up au journal. 0. Il s'agit d'une option moins agressive. Bien que, en toute justice, et les résistances fonctionnent.


Après avoir étudié la documentation de toutes les puces d'intérêt, j'ai déterminé que trois points d'alimentation Vpp sont nécessaires:

  1. 27C16 CI de 21 pieds (prise DIP28 de 23 pieds)
  2. 27C32 et 27C512 par signal #OE (Sortie activée)
  3. 27C64, 27C128, 27C256 sur 1 branche de microcircuits


Les microcircuits 27C16 et 27C32 diffèrent des autres dans le boîtier, ils doivent donc alimenter la 26e branche de la prise. Il s'agit de la jambe d'adresse A13 pour les frères plus volumineux. Le courant provenant de la sortie du registre à décalage devrait être suffisant pour fonctionner, mais au moment du chargement des données, ses sorties passent à l'état Z. Un mode similaire est autorisé, mais l'inclusion à la lecture ou à l'écriture d'une cellule n'est guère la norme. Par conséquent, un transistor supplémentaire est installé sous la commande de puissance. Et un autre était nécessaire pour le 27C16, qui, pour le moment de la lecture, doit fournir 5 volts à l'entrée Vpp. Vous pouvez, bien sûr, régler la tension de programmation sur 5 volts pendant la lecture, mais la commutation entre 25 et 5 volts n'est pas pratique.


S'il y a des jambes libres ADC, alors pourquoi ne pas mesurer la tension de programmation? La carte est divorcée sous l'Arduino Nano. Il y a deux entrées supplémentaires, qui ne peuvent être utilisées que pour l'ADC. C'est en fait une caractéristique de nombreux microcontrôleurs AVR dans un boîtier de montage en surface. Sur l'Arduino chinois UNO, il y a souvent des entrées A6 et A7. Étant donné que la tension peut aller jusqu'à 30 volts (il semble que, surtout, ils veulent des RF5 domestiques, 25 volts), nous calculons le diviseur à partir de ce qui est disponible. Une précision de 0,5 volt est suffisante pour cette tâche. Cette fonction est infaillible, pas un voltmètre.


Il était possible, bien sûr, de devenir confus et d'agir comme un contrôleur WID (contrôle de la largeur d'impulsion), mais il n'y avait pas de jambes libres. Par conséquent, sur la carte de circuit imprimé, il y a un siège pour le convertisseur DC-DC Step Up sur la puce MT3608, qui sont disponibles pour un sou sur Ali.


Selon le schéma, c'est tout.




L'algorithme pour travailler avec ces microcircuits est très simple. Vous pouvez le lire dans une courte vidéo.




Les schémas et les logiciels sont disponibles dans le référentiel sur GitHub: https://github.com/walhi/arduino_eprom27_programmer . Pendant l'assemblage, vous pouvez modifier en toute sécurité les valeurs des résistances. Certes, avec le séparateur, vous devez corriger légèrement le code d'esquisse.



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


All Articles