Pourquoi avons-nous besoin de programmeurs matériels?

22

J'utilise un Boarduino et une planche à pain à 30 rangées pour programmer mon ATtiny. Je charge un croquis pas trop compliqué appelé ArduinoISP (inclus par défaut maintenant dans l'IDE Arduino), et soudain j'ai un programmeur qui fonctionne. Atmel vend un bon programmeur entre 30 $ et 40 $, et il existe de nombreux kits pour en faire des moins chers.

J'étais très heureux une fois que j'ai eu mon programmeur qui fonctionnait et que j'ai fait clignoter quelques leds. Cependant, maintenant mon pauvre boarduino est coincé en devoir de programmeur.

Autant que je sache, ce programmeur maintient le bouton de réinitialisation enfoncé, puis transmet et reçoit sur les broches MOSI et MISO. Je pense que le SCK est inutilisé ou du moins inutile. (SCK est nécessaire selon la fiche technique ATtiny, mon programmeur ne fonctionne pas sans lui, et je ne trouve pas l'endroit où je pensais l'avoir lu n'était pas nécessaire.)

Pourquoi ai-je besoin d'un programmeur matériel pour simplement transmettre en série? Je veux dire, supposons que je suis prêt à maintenir le bouton de réinitialisation avec mon doigt au lieu d'utiliser un IC. Tout ce qui reste est l'envoi et la réception en série, donc tout ce dont j'ai besoin est de trois fils GND, RXD et TXD. Heck, si j'ai la ligne "DTR" ou autre chose, vous pouvez même maintenir enfoncé le bouton de réinitialisation avec le câble série.

Pourquoi y a-t-il toutes ces solutions matérielles qui nécessitent également des logiciels sophistiqués (comme AVRdude, ou AVR studio, ou autre)?

Je veux dire que je pouvais comprendre un petit câble USB qui présentait le microcontrôleur comme un périphérique de stockage de masse et vous permettait de faire glisser des fichiers binaires pour la programmation (comme cette carte de développement ARM ). Matériel uniquement, à l'aide de pilotes logiciels standard.

Je pourrais également comprendre une solution logicielle uniquement (modulo accrocher les fils de l'USB à la puce, en utilisant quelque chose comme la puce FTDI pour simplifier ce qui descend les fils). Tout le protocole de programmation sophistiqué serait géré par un logiciel sur l'ordinateur, et le matériel ne serait que quelques fils.

Pourquoi avons-nous à la fois des logiciels et du matériel (compliqués)? Je veux dire, pour autant que je sache, la programmation des microcontrôleurs est assez facile, mais quand je commençais à peine, j'étais vraiment inquiet de savoir comment j'allais jamais acheter une puce de mouser ou digikey sans payer un gourou pour programmer un chargeur de démarrage pour moi.

Je suis sûr qu'il y a une bonne raison (ce n'est pas comme si j'avais écrit le logiciel ou commencé à fabriquer le programmateur USB glisser-déposer), mais en tant que nouveau venu, je n'ai aucune idée de ce que c'est.

Jack Schmidt
la source
Votre programmeur matériel home-brew permet-il le débogage? Vous pourriez bien programmer seul, mais vous auriez besoin d'un programmeur matériel si vous vouliez faire le débogage sur puce (définir des points d'arrêt dans le code et arrêter l'exécution lorsque vous atteignez ce point) car cette opération pourrait faire des choses amusantes avec la ligne de réinitialisation.
Joel B
1
Quelque chose qui pourrait vous amuser, hackaday.com/2013/05/10/…
binarysmacker

Réponses:

18

Vous avez raison, la programmation des AVR est assez simple. C'est juste un protocole personnalisé implémenté au-dessus de SPI, fonctionnant à basse tension. SCK est nécessaire.

Cependant, la programmation de PIC plus anciens (et de programmation AVR non FAI) nécessite des tensions élevées et un protocole personnalisé différent. Cela nécessite un programmeur matériel spécial.

D'autres appareils sont plus complexes. La plupart des microcontrôleurs ARM doivent être programmés via JTAG, ici la mémoire est écrite directement et le processeur est invité à écrire sur le flash. Encore une fois, chaque appareil est différent.

Toby Jaffey
la source
Des idées pourquoi celles-ci sont tellement plus complexes? La méthode AVR (basse tension, protocole standard) semble tellement plus sensée que d'exiger un programmeur personnalisé (comme ce type avec un besoin de programmeur 8051/8052 - aide recherchée, représentant disponible! Electronics.stackexchange.com/questions/4104 )
Kevin Vermeer
2
Il n'y a vraiment rien de spécial ni de coûteux chez les programmeurs PIC; de nombreux modèles sont disponibles en ligne et la plupart des nouveaux PIC peuvent être programmés en basse tension.
akohlsmith
4
Les fabricants de circuits intégrés ne se soucient pas vraiment de la complexité de l'utilisation par les amateurs. Tant qu'il peut être utilisé dans une production en grande quantité, c'est une question de coût.
endolith
2
La programmation haute tension était là en premier, c'était le moyen de programmer des EPROM effaçables aux UV dans les années 80 (et des microcontrôleurs contenant de telles EPROM).
starblue
Correction de la réclamation SCK. J'aime l'idée que seul SPI est nécessaire, mais comme les ordinateurs n'ont pas de port SPI (et diable le câble FTDI a déjà une puce à 4 $ !!), nous pourrions aussi bien faire des folies sur un microcontrôleur à 2 $. L'argument de téléchargement et de débogage JTAG m'a vendu les avantages d'une carte de développement en général, et je pense qu'endolith a raison de dire que personne ne se soucie de ce que je dépense mes 20 $; les fabricants se soucient de ce que les vrais ingénieurs (et leurs employeurs) vont dépenser leur budget.
Jack Schmidt
5

J'ai fait beaucoup de recherches et je me prépare à commencer à jouer avec les AVR, mais je n'en ai jamais utilisé, donc cela peut être faux, mais:

La plupart des programmeurs bon marché ne prendront pas en charge la programmation haute tension AVR. Il est nécessaire si le contrôleur est configuré pour être non programmable à l'aide de bits de fusible ou si vous avez en quelque sorte fait de sérieux bugs et devez le réinitialiser aux valeurs par défaut et ainsi de suite.

AndrejaKo
la source
2
Les programmeurs basse tension comme l'AVRISP mkII [1] ou USBtinyISP [2] peuvent être utilisés pour définir des fusibles avec avrdude ou d'autres programmeurs, mais ils ne peuvent pas enregistrer une puce AVR rendue non amorçable ou dont la ligne de réinitialisation s'est transformée en un GPIO. Vous avez besoin d'un programmateur haute tension pour ce genre de chose. [1] mouser.com/search/… [2] ladyada.net/make/usbtinyisp
blalor
@blalor À la lumière de ces informations, je vais modifier ma réponse.
AndrejaKo
J'ai vu des instructions sur la création d'un programmateur haute tension (et la fiche technique de la puce semble avoir des instructions assez détaillées sur la conception d'un), mais j'attends de briquer une de mes puces jusqu'à ce que je l'essaie. Mes oscillateurs arrivent ici demain, alors je brûlerai des fusibles et tenterai la fée des briques assez tôt!
Jack Schmidt
Il est notable qu'avrdude revérifie vos bits de fusible pour éviter ce problème. Un problème un peu plus courant consiste à régler la puce sur une horloge externe.
Yann Vernier
4

La plupart des programmeurs AVR bon marché ne sont que des interfaces série de synchronisation avec une ligne de réinitialisation. Vous pouvez vous un FT232 pour bitbang out Serial Peripheral Interface (SPI). Le FT232 est conçu pour la synchronisation asynchrone non synchronisée, donc tout est fait dans le logiciel.

Vous pouvez simplement télécharger un chargeur de démarrage comme arduino qui vous permettrait de télécharger du code via l'interface série asynchrone en utilisant le ft232 en mode normal ou n'importe quelle interface série asynchrone en utilisant des convertisseurs de niveau selon les besoins. N'oubliez pas d'utiliser le bon chargeur de démarrage pour votre vitesse d'horloge et de régler correctement les octets de fusible.


la source
1

De nombreux appareils programmables ont toujours exigé qu'ils soient programmés à l'aide de séquences de signaux temporisés de manière relativement précise. Dans de nombreux cas, si l'on voulait seulement programmer un type particulier de périphérique, le matériel requis aurait été assez simple, mais comme différents périphériques avaient des exigences différentes, la construction d'un programmeur plus général était un peu plus difficile.

Aujourd'hui, on pourrait probablement programmer plus de 50% des appareils programmables en utilisant rien de plus qu'un câble d'E / S USB et un logiciel PC, mais les programmeurs "matériels" ont toujours un avantage de vitesse considérable. Pour que le PC réagisse à un signal reçu par un périphérique USB et envoie une réponse, cela prend généralement au moins 1 à 2 millisecondes. Si une séquence de programmation nécessite de demander à plusieurs reprises à un périphérique quand il est prêt pour le prochain bloc de données, puis de l'envoyer, l'utilisation d'un simple câble d'E / S ajouterait une ou deux millisecondes supplémentaires au temps nécessaire pour gérer chaque bloc. Selon la nature de l'appareil en question, cela pourrait augmenter le temps global requis pour la programmation d'un ordre de grandeur par rapport à un programmeur qui pourrait être informé, en attendant qu'un appareil soit prêt, de ce qu'il devrait faire une fois qu'il est.

Personnellement, j'aime l'approche consistant à faire expédier les appareils équipés de flash de l'usine avec un chargeur de démarrage en mémoire qui peut être utilisé avec un minimum de matériel de programmation. Si l'appareil prend en charge la programmation flash sous contrôle logiciel, une telle approche peut simplifier la production sans ajouter quoi que ce soit au coût du silicium au-delà du très petit temps marginal requis pour avoir le programme de test en usine dans le chargeur de démarrage après avoir fait tout le reste. .

supercat
la source