Warum brauchen wir Hardware-Programmierer?


22

Ich benutze einen Boarduino und ein 30- reihiges Brotbrett , um meinen ATtiny zu programmieren. Ich lade eine nicht allzu komplizierte Skizze namens ArduinoISP (standardmäßig in der Arduino IDE enthalten) und habe plötzlich einen funktionierenden Programmierer. Atmel verkauft einen netten Programmierer für 30 bis 40 US-Dollar, und es gibt viele Kits, mit denen man günstigere machen kann.

Ich war sehr glücklich, als ich meinen funktionierenden Programmierer bekam und die kleinen LEDs zum Blinken brachte. Jetzt ist mein armer Boarduino jedoch fest im Dienst des Programmierers.

Soweit ich weiß, hält dieser Programmierer die Reset-Taste gedrückt und sendet und empfängt dann auf den MOSI- und MISO-Pins. Ich denke, dass das SCK nicht verwendet oder zumindest nicht benötigt wird. (SCK wird gemäß dem ATtiny-Datenblatt benötigt, mein Programmierer funktioniert nicht ohne es, und ich kann den Ort nicht finden, von dem ich dachte, dass ich es gelesen habe, er wird nicht benötigt.)

Warum brauche ich einen Hardware-Programmierer, um nur seriell zu übertragen? Ich meine, nehmen wir an, ich bin bereit, die Reset-Taste mit meinem Finger zu drücken, anstatt einen IC zu verwenden. Alles, was übrig bleibt, ist serielles Senden und Empfangen. Alles, was ich brauche, sind drei Drähte, GND, RXD und TXD. Heck, wenn ich die "DTR" -Leitung oder was auch immer habe, können Sie sogar die Reset-Taste mit dem seriellen Kabel gedrückt halten.

Warum gibt es all diese Hardwarelösungen, die auch ausgefallene Software erfordern (wie AVRdude oder AVR Studio oder was auch immer)?

Ich meine, ich könnte ein kleines USB-Kabel verstehen, das den Mikrocontroller als Massenspeichergerät darstellt und Sie Binärdateien zum Programmieren ziehen lässt (wie dieses ARM-Entwicklungsboard ). Nur Hardware unter Verwendung von Standardsoftwaretreibern.

Ich könnte auch eine reine Softwarelösung verstehen (Modulo-Verkabelung vom USB zum Chip, mit etwas wie dem FTDI-Chip, um die Verkabelung zu vereinfachen). Das gesamte ausgefallene Programmierprotokoll würde von der Software auf dem Computer verwaltet, und die Hardware wäre nur ein paar Drähte.

Warum haben wir sowohl (komplizierte) Software als auch Hardware? Ich meine, soweit ich das beurteilen kann, ist das Programmieren von Mikrocontrollern ziemlich einfach, aber als ich gerade anfing, war ich wirklich besorgt darüber, wie ich jemals einen Chip von Mouser oder Digikey kaufen würde, ohne einen Guru dafür zu bezahlen, einen Bootloader zu programmieren für mich.

Ich bin mir sicher, dass es einen guten Grund gibt (es ist nicht so, dass ich die Software geschrieben oder mit der Herstellung des Drag-and-Drop-USB-Programmiergeräts begonnen habe), aber als Neuling habe ich keine Ahnung, was es ist.


Ermöglicht Ihr selbst gebrauter Hardware-Programmierer das Debuggen? Sie können zwar gut programmieren, benötigen jedoch einen Hardware-Programmierer, wenn Sie ein On-Chip-Debugging durchführen möchten (Festlegen von Haltepunkten im Code und Unterbrechen der Ausführung, wenn Sie diesen Punkt erreichen), da diese Operation unter Umständen witzige Dinge mit der Reset-Zeile bewirken kann.
Joel B

1
Etwas, das Sie amüsieren könnte, hackaday.com/2013/05/10/…
binarysmacker

Antworten:


18

Sie haben recht, das Programmieren von AVRs ist ziemlich einfach. Es ist nur ein benutzerdefiniertes Protokoll, das auf SPI implementiert ist und mit niedriger Spannung ausgeführt wird. SCK wird benötigt.

Das Programmieren älterer PICs (und nicht ISP-AVR-Programmierung) erfordert jedoch hohe Spannungen und ein anderes benutzerdefiniertes Protokoll. Dies erfordert einen speziellen Hardware-Programmierer.

Andere Geräte sind komplexer. Die meisten ARM-Mikrocontroller müssen über JTAG programmiert werden, hier wird der Speicher direkt geschrieben und der Prozessor wird angewiesen, in den Flash zu schreiben. Auch hier ist jedes Gerät anders.


Irgendwelche Ideen, warum diese so viel komplexer sind? Der AVR-Weg (Niederspannung, Standardprotokoll) scheint so viel sinnvoller zu sein, als einen benutzerdefinierten Programmierer zu benötigen (wie dieser Typ, der einen 8051/8052 Programmierer benötigt - Hilfe gesucht, Vertreter verfügbar! Electronics.stackexchange.com/questions/4104 )
Kevin Vermeer

2
PIC-Programmierer haben nichts Besonderes oder Teueres an sich. Viele Designs sind online verfügbar, und die meisten neuen PICs können mit Niederspannung programmiert werden.
Akohlsmith

4
IC-Hersteller interessieren sich nicht wirklich dafür, wie komplex etwas für Bastler ist. Solange es in großen Stückzahlen produziert werden kann, dreht sich alles um die Kosten.
Endolith

2
Hochspannungsprogrammierung war zuerst da, es war der Weg, UV-löschbare EPROMs in den achtziger Jahren (und Mikrocontroller, die solche EPROMs enthielten) zu programmieren.
Starblue

Der SCK-Anspruch wurde behoben. Ich mag die Idee, dass nur SPI benötigt wird, aber da Computer keinen SPI-Port haben (und das FTDI-Kabel bereits einen 4-Dollar- Chip enthält !!), könnten wir uns genauso gut einen 2-Dollar-Mikrocontroller zulegen. Das JTAG-Argument zum Hochladen und Debuggen hat mich über die Vorteile eines Entwicklungsboards im Allgemeinen aufgeklärt, und ich denke, Endolith hat den Vorteil, dass es niemanden interessiert, für was ich meine 20 USD ausgebe. Die Hersteller kümmern sich darum, wofür echte Ingenieure (und ihre Arbeitgeber) ihr Budget ausgeben.
Jack Schmidt

5

Ich habe viel recherchiert und bereite mich darauf vor, mit AVRs zu spielen, habe aber noch nie einen benutzt. Das mag also falsch sein, aber:

Die meisten billigen Programmierer unterstützen die AVR-Hochspannungsprogrammierung nicht. Dies ist erforderlich, wenn der Controller mit Sicherungsbits nicht programmierbar ist oder wenn Sie schwerwiegende Fehler gemacht haben und ihn auf die Standardeinstellungen zurücksetzen müssen.


2
Niederspannungsprogrammierer wie der AVRISP mkII [1] oder der USBtinyISP [2] können verwendet werden, um Sicherungen mit avrdude oder anderen Programmierern zu setzen. Sie können jedoch keinen AVR-Chip speichern, der nicht mehr bootfähig ist oder dessen Reset-Leitung in einen solchen umgewandelt wurde ein GPIO. Sie benötigen dafür einen Hochspannungsprogrammierer. [1] mouser.com/search/… [2] ladyada.net/make/usbtinyisp
blalor

@blalor Aufgrund dieser Informationen bearbeite ich meine Antwort.
AndrejaKo

Ich habe einige Anweisungen zum Herstellen eines Hochspannungsprogrammierers gesehen (und das Datenblatt für den Chip scheint ziemlich detaillierte Anweisungen zum Entwerfen eines Chips zu enthalten), aber ich warte, bis ich einen meiner Chips ziegele, bis ich es versuche. Meine Oszillatoren kommen morgen hierher, also brenne ich Sicherungen und verführe die Ziegelfee bald genug!
Jack Schmidt

Es ist bemerkenswert, dass avrdude Ihre Sicherungseinsätze doppelt überprüft, um dieses Problem zu vermeiden. Ein etwas häufigeres Problem ist das Einstellen des Chips auf einen externen Takt.
Yann Vernier

4

Die meisten billigen AVR-Programmierer synchronisieren nur serielle Schnittstellen mit einer Reset-Leitung. Sie können einen FT232 verwenden, um das Serial Peripheral Interface (SPI) zu bitbangen. Der FT232 ist für asynchrone serielle Nicht-Synchronisierung ausgelegt.

Sie könnten einfach einen Bootloader wie arduino hochladen, der es Ihnen ermöglicht, Code über die asynchrone serielle Schnittstelle unter Verwendung des ft232 im normalen Modus oder über eine beliebige asynchrone serielle Schnittstelle unter Verwendung von Pegelwandlern nach Bedarf hochzuladen. Vergessen Sie jedoch nicht, den richtigen Bootloader für Ihre Taktrate zu verwenden und die Sicherungsbytes richtig einzustellen.


1

Viele programmierbare Geräte haben in der Vergangenheit verlangt, dass sie unter Verwendung von relativ genau getakteten Signalsequenzen programmiert werden. Wenn man nur einen bestimmten Gerätetyp programmieren wollte, war die erforderliche Hardware in vielen Fällen recht einfach. Da jedoch unterschiedliche Geräte unterschiedliche Anforderungen stellten, war der Aufbau eines universell einsetzbaren Programmiergeräts etwas schwieriger.

Heute könnte man wahrscheinlich mehr als 50% der programmierbaren Geräte mit nur einem USB-E / A-Kabel und PC-Software programmieren, aber "Hardware" -Programmierer haben immer noch einen erheblichen Geschwindigkeitsvorteil. In der Regel dauert es mindestens 1-2 Millisekunden, bis der PC auf ein von einem USB-Gerät empfangenes Signal reagiert und eine Antwort sendet. Wenn eine Programmiersequenz erfordert, dass ein Gerät wiederholt gefragt wird, wann es für den nächsten Datenblock bereit ist, und dieser dann gesendet wird, verlängert die Verwendung eines einfachen E / A-Kabels die für die Verarbeitung jedes Blocks erforderliche Zeit um ein oder zwei Millisekunden. Abhängig von der Art des fraglichen Geräts kann dies die für die Programmierung erforderliche Gesamtzeit im Vergleich zu einem Programmierer um eine Größenordnung verlängern. Dabei kann abgewartet werden, bis ein Gerät bereit ist, was es tun soll, wenn es fertig ist.

Persönlich mag ich den Ansatz, mit Flash ausgestattete Geräte ab Werk mit einem Bootloader im Speicher auszuliefern, der mit einem Minimum an Programmierhardware verwendet werden kann. Wenn das Gerät die Flash-Programmierung unter Softwaresteuerung unterstützt, kann ein solcher Ansatz die Produktion vereinfachen, ohne dass die Kosten für das Silizium über die sehr kurze Grenzzeit hinaus erhöht werden, die erforderlich ist, um das werkseitige Testprogramm im Bootloader zu haben, nachdem alles andere erledigt wurde .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.