Nehmen wir an, Sie hatten einen recht einfachen und kleinen Mikrocontroller und keine Schnittstelle, keinen Computer, keinen Debugger, Compiler oder Assembler. Könnten Sie Ihren Code in der Baugruppe schreiben, ihn (manuell) in Maschinencode umwandeln und dann die entsprechenden Stifte mit einer Spannungsquelle mit Strom versorgen?
Ich verstehe, Sie würden eine angemessene Eingabe / Ausgabe und einen geeigneten Speicher benötigen , um wirklich etwas zu tun , aber wenn Sie so geneigt wären und die Zeit hätten, könnten Sie dies tun? Ich vermute, historisch gesehen, wie wurde das gemacht, als es noch keinen Computer / Compiler / Assembler gab? Fühlen Sie sich frei, mich mit einer externen Ressource zu verlinken. Vielen Dank! :)
Antworten:
Ja!
Wenn Sie möchten, können Sie Code "aus dem Kopf" in Binärform schreiben.
Vor langer (langer) Zeit begann ich mit der Verwendung von (damals) Mikroprozessoren.
Ich und meine Freunde schrieben Code in Assemblersprache, kompilierten ihn manuell zu Maschinencode (etwas, das Sie nach einiger Übung "durch Inspektion" tun können) und gaben ihn dann auf verschiedene Weise in den Prozessor ein. Auf einem System, das wir aufgebaut haben, haben wir die Adresse für Binärschalter (Ein / Aus) eingerichtet oder eine automatische Inkrementierungsfunktion des Prozessors verwendet, 8 Datenbits für Binärschalter eingegeben und dann einen "Clock" -Schalter gedrückt, um die Daten in den Speicher einzugeben.
Die entsprechende Funktionalität könnte mit noch weniger Schaltern auf einem modernen Mikrocontroller durch serielle SPI-Programmierung erreicht werden - siehe unten.
Ja!
Aber es wäre unglaublich langsam zu tun!
Viele moderne Mikrocontroller erlauben die Verwendung einer "SPI" -Schnittstelle zur Programmierung.
Dies besteht typischerweise aus Eingangs- und Ausgangsdatenleitungen und einer "Takt" -Leitung und normalerweise einer Rücksetzleitung.
Viele Prozessoren erlauben, dass der SPI-Takt und die Daten "statisch" sind, was bedeutet, dass es keine Beschränkung gibt, wie lange Sie zum Einrichten der Daten zwischen den Bits brauchen können. Sie könnten einen solchen Prozessor mit einer Datenleitung und einer Taktleitung programmieren, die von manuell betätigten Schaltern angesteuert wurden. Die Taktleitung muss "abprallfrei" sein - Sie müssen in der Lage sein, sie in einem einzigen Übergang pro Operation hoch oder niedrig zu setzen. Daher muss eine minimale Schnittstelle möglicherweise ein durch Schmitt ausgelöstes Gate enthalten. Sie können mit nur einer RC-Verzögerung und einem Druckknopfschalter "davonkommen", aber ein durch Schmitt ausgelöster Eingang ist sicherer. Die Datenleitung muss nicht prellfrei sein, da ihr Zustand nur an der Taktflanke gelesen wird.
Einige Schnittstellen sind interaktiv - Daten werden vom Prozessor während der Programmierung ausgegeben (z. B. Datenausgang = MISO = Master In Serial Out bei AVR-Prozessoren). Um dies zu lesen, müssten Sie z. B. eine LED und einen Widerstand (und möglicherweise einen Puffer oder Transistor, wenn die Treiberkapazität WIRKLICH niedrig war) hinzufügen.
MC6800:
Aus halb verblassendem Gedächtnis (fast 40 Jahre!)
LDI A, $ 7F ...... 86 7F ...... 1000 0110 0111 1111
STA, $ 1234 ...... B7 12 34 ... 1011 0111 0001 0010 0011 0100
LDI X, $ 2734 .. CE 27 34 ... 1100 1110 0010 0111 0011 0100
...
quelle
Ursprünglich wurden die Programme in programmierbaren Maschinen manuell in Papierstreifen oder Karten gestanzt. Später benutzten sie eine Art Schreibmaschine, um zu lochen, und noch später konnten die Computer (wie sie damals bekannt wurden) ihr eigenes Papierband lochen.
Es saß buchstäblich mit einer Karte da und bohrte manuell Löcher hinein.
Jede Spalte ist eine Anweisung oder ein Datenbit, das von der Zustandsmaschine der CPU zur Ausführung von Aufgaben interpretiert wird.
Nun, wenn natürlich alles Flash-Speicher ist, und ja, um die Daten überhaupt dort abzulegen, ist normalerweise ein Computer erforderlich. Das ist aber nicht 100% richtig.
Was macht schließlich ein Computer und ein Hardware-Programmierer, als den Status der E / A-Pins zum richtigen Zeitpunkt festzulegen? Wenn Sie also wirklich masochistisch genug sind, können Sie ein System erstellen, mit dem Sie die richtigen Anweisungen an die Programmierstifte des Mikrocontrollers senden können, um einige Anweisungen zur Ausführung im Flash-Speicher zu installieren.
Vielleicht etwas mit vielen Schaltern, einigen Schieberegistern, einem Taktgenerator usw.
Ich erinnere mich, dass wir am College ein neues Z80-basiertes Programmiersystem hatten - eine Einheit von der Größe eines Koffers mit einem Z80, etwas RAM, einer Reihe von 7-Segment-LED-Anzeigen und einer großen Reihe von Schaltern. Programmieren Sie dies, indem Sie die Anweisungen mit den Schaltern manuell in den Arbeitsspeicher laden.
quelle
Sie sagten "kleiner Mikrocontroller und hatten keine Schnittstelle, keinen Computer, keinen Debugger, keinen Compiler oder Assembler." Sie können ohne Computer, Debugger, Compiler oder Assembler auskommen, benötigen jedoch eine Schnittstelle, um eine Verbindung mit dem Mikrocontroller herzustellen und das Programm zu laden.
Vergessen Sie zuallererst alle höheren Sprachen wie C. Dann ist es am einfachsten, Ihr Programm in Assemblersprache zu schreiben, aber verwenden Sie den Assembler nicht, um es in Maschinencode zu übersetzen. Lesen Sie stattdessen die Montageanweisungen im Programmierhandbuch nach, suchen Sie die entsprechende Hex-Codierung und notieren Sie diese.
Sie müssen Ihre eigenen Variablen zuweisen, damit Sie die entsprechenden Adressen im Operandenteil der Anweisungen eingeben können. Vergessen Sie auch, den Stapel und den Haufen zu verwenden, zu viel Arbeit. Wenn Sie fertig sind, haben Sie ein Maschinenprogramm, das direkt in den Flash-Speicher des Mikrocontrollers geladen werden kann - auch kein Linker erforderlich.
Aufgrund des Fehlens externer Adress- und Datenbusse auf fast allen Mikrocontrollern (da diese zu viele Pins belegen würden, die von E / A-Ports und Peripheriegeräten benötigt werden) werden praktisch alle Mikrocontroller über eine spezielle Schnittstelle wie die folgende programmiert:
Normalerweise ist der "Programmierer" auf der linken Seite mit einem PC verbunden, der eine von einem Compiler / Linker erzeugte Maschinendatei herunterlädt.
Wenn der Programmierer jedoch eine Tastatur hat, wie die folgende:
Dann kann man die Hex-Codes für ein manuell erstelltes Programm direkt in den Programmierer eingeben und das Gerät programmieren, ohne einen Compiler, Linker oder PC zu benötigen, nach dem Sie gefragt haben. (Die Tastatur wird auch zum Bearbeiten von Hex-Dateien und zum Generieren von Prüfsummen verwendet.)
Zugegeben, sehr wenige Programmierer haben Tastaturen wie diese. Dieser wäre für einen Hobbyisten nicht geeignet, da er wahrscheinlich ein paar tausend Dollar kostet.
Dieser spezielle Programmierer programmiert Teile, bevor sie auf eine Platine gelegt werden. Schnittstellen und Buchsen sind unter anderem für mehrere PICs und Atmel AVRs verfügbar.
quelle
In der Praxis ist das manuelle Umschalten von JTAG-Pins sehr fehleranfällig. Die Eingabe eines Programms von beliebiger Größe würde Tausende von Umschaltern erfordern. Aber theoretisch ist es möglich.
Wenn Sie den Mikrocontroller im Voraus vorbereiten (oder ein Boot-ROM dafür schreiben) dürfen, können Sie leicht so etwas wie die externen Kippschalter implementieren, die in früheren Mainframes verwendet wurden. Wenn Sie externe Logik zulassen, können Sie sogar eine Hex-Tastatur verwenden, um die Dinge zu beschleunigen.
Obwohl dies heutzutage nicht mehr so üblich ist, können Sie einen ROM-basierten Mikrocontroller mit benutzerdefiniertem Code kaufen. Sie müssten im Vorfeld etwas Geld anbieten und ein bestimmtes Volumen garantieren, aber ich habe gesehen, dass Kunden dies tun, um Geld für die Massenproduktion zu sparen. In diesem Fall wären keine externen Signale erforderlich, um den Mikrocontroller überhaupt zu programmieren. Der Code würde in das physikalische Layout des Chips eingebaut.
Natürlich können Sie auch einen Mikrocontroller verwenden, der Code über eine externe Speicherschnittstelle ausführt, aber das ist Betrug. :-)
quelle
Absolut. In der Tat verwendete der erste Mikroprozessor Kurs, den ich nahm (circa 87) ein Motorola 68000 Board. Wir würden den Code in der Baugruppe ausarbeiten, das Hex für die Baugruppe nachschlagen und das Hex in ein Terminal eingeben, um die Baugruppe zu programmieren. Wenn Sie bearbeiteten, mussten Sie sicherstellen, dass der eingegebene Code kürzer war als der Code, den Sie ersetzten, und den Rest mit NOPs puffern. Wenn der Code länger wäre, müssten Sie alles neu eingeben! Wir haben gelernt, viele NOPs hinzuzufügen.
quelle
Absolut. Sobald Sie ein Binärformat der tatsächlichen Anweisungen haben (einfach für genau festgelegte Anweisungssätze), müssen Sie nur noch das Programmierprotokoll implementieren.
Nehmen Sie zum Beispiel etwas Kleines wie einen AVR Tiny 4 . Abschnitt 14 beschreibt die Programmierschnittstelle einschließlich des Protokolls und der physikalischen Schicht. Es ist relativ einfach und Sie brauchen nur ein paar Tasten und Pullup / Down-Widerstände, um eine 1 oder eine 0 zu senden / zu empfangen. Wenn Sie sich ehrgeizig fühlen, fügen Sie einige LEDs hinzu, um den Ausgang zurückzulesen.
Das letzte verbleibende Problem ist, wenn Sie es schnell genug schaffen, was zum Glück * für den AVR Tiny 4 (Abschnitt 16) keine Mindestfrequenz für die Programmierung hat.
* Hinweis: Soweit im Datenblatt angegeben. Dies kann in der Realität abweichen ... Ich bezweifle, dass jemand versucht hat, es mit mHz-Taktraten zu programmieren.
Sie können beliebig viel oder wenig automatisieren. Das machen die meisten Programmiergeräte sowieso: Automatisieren Sie den Prozess.
quelle
Mit welchen Mitteln auch immer Sie das Programm in das uC eingeben, Sie "koppeln" damit, denn das ist, was Koppelung bedeutet. Sogar eine Reihe von Schaltern, die Sie manuell umlegen, sind eine "Schnittstelle".
Ich werde diese Frage also wie folgt behandeln: "Wie kann ich mit weitgehend mechanischer (im Gegensatz zu elektronischer) Schnittstellenhardware und auf möglichst coole Weise eine Schnittstelle zu einer uC herstellen?"
Auf die meine Antwort lautet, geben Sie das Programm als Pianorolle ein. Die Pianorolle "tracker bar" eines Player-Pianos bietet im Grunde genommen mindestens 65 (je nach Format) Bits, die Sie basierend auf den Perforationen im Papier unabhängig voneinander ein- und ausschalten können. Der Rest ist anspruchsvolle Arbeit mit einem Exacto-Messer. Aber zumindest wird Ihr Programm, sobald es ausgeführt wird, (etwas) dauerhaft gespeichert (im Gegensatz zu einem manuellen Umschalten).
quelle
Es ist nicht nur möglich , einen Mikrocontroller ohne Computer zu programmieren, sondern Sie können auch einen Computer erwerben, der speziell für die Programmierung mit Hardware-Kippschaltern entwickelt wurde. Das Kit wird als Mitgliedskarte bezeichnet und ist eine Neuentwicklung des COSMAC Elf-Computers aus den 1970er Jahren. Das Kit wurde kürzlich in einem Artikel im IEEE Spectrum-Magazin beschrieben . Es ist auch möglich, neuere Versionen der Mitgliedskarte von einem PC aus zu programmieren.
quelle
Okay. Wie wäre es damit: Sie schreiben das Programm in Assembler und suchen die Opcodes selbst, wie zuvor vorgeschlagen. So wird es in den Computer eingelegt: Nehmen Sie einen alten Kassettenrekorder, entfernen Sie den Abspielkopf, lassen Sie jedoch die Tonwelle und die Andruckrolle. Dies wird Ihr Transport sein. Wenn Sie einen Reel-to-Reel-Player haben, können Sie den Abspielkopf an Ort und Stelle lassen.
Nehmen Sie dann einen langen und schmalen Papierstreifen oder noch besser ein transparentes Klebeband. Hier verschlüsseln Sie Ihr Programm. Sie verwenden so viele Spuren, wie Sie Pins zum Programmieren haben. Auf einer Spur setzen Sie in regelmäßigen Abständen schwarze Punkte. das ist deine uhr Auf den anderen Spuren setzen Sie schwarze Punkte oder Streifen und lassen Leerzeichen entsprechend den Daten und Signalen. Sie strahlen ein Licht auf das Ganze und erkennen es mit kleinen Fototransistoren (oder Sie strahlen eine LED auf das Band und erkennen das Licht mit anderen, ähnlichen) und treiben die Takt- und Signalleitungen mit Transistoren an. Dies nimmt ein wenig Platz auf dem Kassettenrekorder in Anspruch, weshalb Sie möglicherweise den Abspielkopf entfernen müssen.
Natürlich können Sie die Signale auch als Audio codieren, die Decodierung ist jedoch etwas komplizierter. Oder Sie können reflektiertes statt durchgelassenes Licht erkennen. Oder Sie können Löcher in dunkles Klebeband oder Papierband stanzen, anstatt schwarze Markierungen auf transparentem Klebeband zu machen. Was auch immer. Der Kassettenrekorder treibt das Band mit konstanter Geschwindigkeit an, sodass Sie ohne Computer ein getaktetes Signal eingeben können.
quelle
Ja. Das Hauptproblem kann die Interaktion mit der Programmierschnittstelle sein. Wenn Sie eine einfache Adresse und einen Datenbus haben, ist es ein bisschen einfacher. Haben Sie jemals einige der wirklich frühen Computer gesehen? Die Programme werden einzeln mit Schaltern an der Vorderseite in den Arbeitsspeicher eingegeben.
quelle
Die PDP-8-Mincomputer von Digital Equipment vor über 40 Jahren verfügten über keine Fähigkeit zum automatischen Booten. Programme wurden normalerweise von gelochten Papierbändern geladen, aber der Lader zum Laden der Papierbänder musste manuell über die Schalter an der Vorderseite eingegeben werden.
An Standorten von Digital- und PDP-8-Kunden wie OEMs, die diese als Embedded-Controller des Tages verwendeten, war es nicht ungewöhnlich, dass sich Benutzer die Bootloader merken und um die schnellste Zeit, die für den Einstieg in den Boot benötigt wurde, miteinander konkurrieren Lader in die Maschine. Die Maschinen verwendeten Magnetkernerinnerungen (von Frauen mit winzigen Fingern mit Nadeln und haarfeinem Draht in weiten Teilen der Welt von Hand aufgereiht).
Da der Inhalt des Magnetspeichers nicht flüchtig ist, haben die Bootloader ein Herunterfahren überstanden, und eine manuelle Eingabe war erst nach der Erstmontage erforderlich. Der Loader wurde durch einen Programmfehler oder ein Programm, das zur Nutzung des Laderraums erforderlich war, gelöscht.
quelle
Die Antwort lautet: Ja , Sie könnten einen Mikrocontroller ohne Computer, Debugger usw. programmieren. Sie müssten lediglich die verschiedenen Spannungen, Daten, Uhr- und Programmiersequenzen bereitstellen, die vom uC-Hersteller angegeben wurden (keine leichte Aufgabe).
quelle