Programmieren eines PIC mit einem PIC

Ich baue ein Gerät mit zwei PICs, einem PIC18F46K22 und einem PIC16F88 . Ich habe einen Puffer auf dem 18F46K22, der ein Programm enthält, das ich in den Programmspeicher des 16F88 schreiben möchte. Ich kann das nicht manuell machen, weil es spontan passieren muss (der Puffer könnte sich ändern), also muss die Programmierung vom 18F46K22 initiiert werden. Die CONFIG-Bits können jedoch manuell gesetzt werden, ich muss sie nicht im laufenden Betrieb ändern. Es besteht auch keine Notwendigkeit, vom 18F46K22 in das RAM oder EEPROM des 16F88 zu schreiben.

Die beiden Chips werden mit 5V versorgt und es steht keine 12V Versorgung zur Verfügung. Ich denke, ich muss mit Low Voltage Programming (LVP) gehen?

Gibt es jemanden, der so etwas schon gemacht hat? Gibt es irgendwo einen Code oder eine Schaltung, um einen PIC mit einem PIC zu programmieren?

Am Ende soll dies ein einfaches PIC-basiertes Codiergerät herstellen: Der Benutzer bearbeitet den Puffer auf dem 18F46K22 und programmiert den 16F88 damit. Es wird eine I 2 C-Schnittstelle zwischen den beiden geben, so dass ein Teil der Ergebnisse geteilt werden kann. Die Programmierung des 16F88 dient nur mathematischen Zwecken: Der Chip erhält einige Eingaben über I 2 C und einen START-Trigger an einem Pin. Danach wird das Ergebnis über I 2 C zurückgesendet.

Viel einfacher wäre es, wenn man den Puffer im Datenspeicher (RAM) des 16F88 halten würde. Wenn Sie jedoch nichtflüchtigen Speicher benötigen, können Sie das EEPROM des 16F88 verwenden (vorausgesetzt, die Länge des Puffers beträgt <= 256 Bytes).
@m.Alin warum wäre es einfacher, den Puffer im Datenspeicher des 16F88 zu speichern? Das ist der Chip, den ich programmieren möchte.
Nur zur Verdeutlichung: Wollen Sie ein neues Programm des 16F88 schreiben oder nur einen Puffer im 16F88 ändern?
@m.Alin Ich möchte den Programmspeicher des 16F88 vollständig löschen und ein neues Programm darauf schreiben. Ab dem 18F46K22 müssen keine Daten im RAM oder EEPROM des Gerätes gespeichert werden. Entschuldigung für jedes Missverständnis.
In diesem Fall habe ich Ihre Frage falsch interpretiert. Vielleicht möchten Sie sich den Pickit 2-Programmierer ansehen; AFAIK verwendet einen PIC18F und seine Firmware ist Open Source .

Antworten (2)

Das Programmieren eines PIC durch einen anderen PIC ist durchaus möglich, und wenn Sie LVP verwenden, ist die Schaltung trivial. Der Aufwand besteht darin, den Code auf dem Master-PIC zu schreiben, der den Programmieralgorithmus gemäß den Spezifikationen im Dokument "Programmierspezifikation" für den Slave-Chip implementiert. Dies tun die meisten Programmierer (die Hardware-Dinge, nicht die Menschen), aber beachten Sie, dass der Programmieralgorithmus in den meisten Fällen zumindest teilweise in der PC-seitigen Software implementiert ist.

Es gibt verschiedene Beispiele, die Sie überprüfen können, pickit2 wurde bereits erwähnt. Meine Wisp648-Firmware (in Jal) und PC-seitige Software (in Python) sind ebenfalls Open Source, und IIRC, die Software für Olins Programmierer, ist es auch.

Aber die Programmierspezifikationen sind nicht so schwer, ein Gerät von Grund auf neu zu lesen, insbesondere wenn Sie nur einen Zielchip unterstützen müssen. Im Wesentlichen zwingen Sie den Chip in den Programmiermodus (Reset loslassen, während LVP aktiv ist), und dann füttern Sie ihn mit Befehlen und zugehörigen Daten (in einer SPI-ähnlichen Weise), wobei Sie das erforderliche Timing einhalten. Anschließend können Sie mit einem handelsüblichen Programmiergerät überprüfen, ob Ihr Programmieraufwand erfolgreich war.

Eine andere Lösung wäre, einen Bootloader in den F88 zu stecken. Der Nachteil ist, dass Sie den Bootloader programmieren müssen (aber ein geeigneter kann bereits beendet werden) und dass der Bootloader etwas Speicher benötigt, aber der Vorteil ist, dass Sie das Kommunikationsprotokoll auswählen können (oder sich an einen vorhandenen Bootloader halten, der wird verwenden häufig ein UART-basiertes Protokoll).

Ich stimme Wouter zu.

Nebenbei verkaufe ich auch PIC-Programmierer. Die gesamte Software und Firmware für meine Programmierer ist in der Entwicklungssoftware- Version unter www.embedinc.com/picprg/sw.htm enthalten . Das ist sehr komplex, aber das liegt daran, dass diese Software/Firmware so viele verschiedene Programmieralgorithmen unterstützen muss. Die POD (Programming Obfuscation Division) von Microchip hat einige sehr schlaue Leute, die sich ständig neue und andere kleine Dinge einfallen lassen, die man tun muss, um PICs zu programmieren. Trotz aller Bemühungen ist es soEs ist immer noch möglich, alle verschiedenen PICs zu programmieren, aber es erfordert viel Graben und Lesen zwischen den Zeilen der manchmal völlig falschen Dokumentation. Die Software/Firmware in dieser Version wäre wesentlich kleiner, wenn alle PICs auf die gleiche Weise programmiert würden.

Glücklicherweise kann Ihre Firmware spezifisch für den bestimmten PIC sein, den Sie zu programmieren versuchen. Sie müssen sich die Programmierspezifikation besorgen und sie sorgfältig lesen, aber Sie können es sich leisten, alle anderen Programmierspezifikationen zu ignorieren. Sie können wahrscheinlich eine Reihe von Firmware-Modulen auf niedrigerer Ebene verwenden, die ich habe, insbesondere für die USBProg-Programmierer. Das ist die EUSB-Firmware, die auch gemeinsame Dateinamen PICPRG_xxx.INS.ASPIC verwendet. Die gesamte Firmware soll auf einem PIC 18 laufen, so dass vieles davon direkt verwendbar sein sollte.

Normalerweise lasse ich den Programmierer ungefähr eine Adress-/Lese-/Schreibschnittstelle präsentieren und lasse die Host-Software mit den höheren Ebenen umgehen. Glücklicherweise sind die höheren Levels der relativ einfache Teil. Sie müssen in der Host-Software nach Beispielen für die Löschalgorithmen suchen. Ich schiebe diese auf den Host, da jeder nur einmal pro Programmiervorgang ausgeführt wird, sodass die Geschwindigkeit kein großes Problem darstellt.

Fragen Sie hier, wenn Sie speziellere Fragen haben.