PIC-Programmierung über FPGA

Ich würde gerne wissen, ob es eine Möglichkeit gibt, einen PIC zum ersten Mal über eine FPGA-Karte zu programmieren (in Flash zu schreiben).

Der PIC ist bereits mit dem FPGA verlötet und ich kann ihn nicht entfernen. Auf dem PIC ist kein Bootloader vorhanden. Daher muss ich es im USART / SPI / I2C-Modus mit einem Bootloader programmieren, damit es Daten vom FPGA empfangen kann.

Ich weiß, dass ich es normalerweise auslöten, an einen Hardware-Programmierer wie PICKit anschließen und mit einer Software auf dem Computer wie MPLAB programmieren muss, aber das kann ich mir nicht leisten.

Ich kann den Bootloader mit MPLAB generieren, was eine .hex-Datei ist, aber wie kann ich ihn auf das FPGA und dann über die FPGA-Pins auf den PIC übertragen?

Der verwendete PIC ist Microchip PIC12F1822.

Nur zur Überprüfung: Können Sie das FPGA neu programmieren (dh Sie haben alle erforderlichen Werkzeuge dazu)?
Ist das eine Art Entwicklungsboard?
Ja, ich habe alle notwendigen Tools, um das FPGA neu zu programmieren (es ist über Standard-USB mit dem Computer verbunden).
@MattYoung Es ist in der Tat ein Entwicklungsboard. Was wir wollen, ist, den Pic so zu programmieren, dass er Daten mit dem FPGA austauschen kann. Der PIC wird verwendet, um das globale System mit Verschlüsselungsalgorithmen zu schützen: Nach der anfänglichen Programmierung (Bootloading), die hier das Problem verursacht, und sobald die richtigen Register auf dem PIC aktiviert sind, wird jede Sekunde ein Oktett vom FPGA an den PIC gesendet . Wenn der vom PIC zurückgegebene Schlüssel korrekt ist, kann das globale System weiter funktionieren. Wenn nicht, bleiben einige Funktionen erhalten, andere werden jedoch gesperrt.
Die Designer des Entwicklungsboards haben wahrscheinlich Demodateien für solche Dinge veröffentlicht.
Nein, sie wurden beschuldigt, weil sie sich diese Mühe nicht gemacht haben. Eigentlich bin ich in einem Praktikum und das fand ich sehr unprofessionell. Obwohl ich das Problem noch beheben muss. Ich sehe wirklich keine Möglichkeit, diesen PIC auf andere Weise als mit einem externen Programmierer neu zu programmieren, den ich nicht verwenden kann, da das Paket bereits fertig ist.
Einige zufällige Google-Treffer: microchip.com/forums/m373979.aspx ww1.microchip.com/downloads/en/DeviceDoc/30277d.pdf ... Viel Spaß beim Lesen. Nach dem, was Sie sagen, müssen Sie entweder eine ziemlich komplizierte Zustandsmaschine in Ihrem FPGA codieren oder einen Softcore-Prozessor instanziieren (was auch immer Sie besser in Ordnung sind) :)
Gibt es keine Möglichkeit, einige Jumperdrähte entweder an Leiterbahnen oder Pins auf dem PIC zu löten, damit Sie sie über einen externen Programmierer programmieren können? Der Versuch, dies über das FPGA zu tun, klingt wie ein Diplomarbeitsprojekt.

Antworten (2)

Nein, Sie müssen nicht SPI, UART oder I 2 C verwenden, um den PIC zu programmieren. Die einzige Möglichkeit, ein neues Programm in einen PIC zu bekommen, der für diesen Zweck keinen speziellen Code geladen hat (ein Bootloader), besteht darin, die externe Hardware-Programmierschnittstelle zu verwenden. Elektrisch bedeutet dies den Anschluss an Vss, MCLR, PGC und PGD. Es kann sinnvoll sein, den Programmer auch an Vdd angeschlossen zu haben, ist aber bei diesem Chip nicht notwendig, solange der Vdd-Pegel bekannt ist und der Programmer entsprechend eingestellt ist.

Die Low-Level-Hardware-Schnittstelle ist recht einfach. PGD ​​ist die Datenleitung, die vom PIC an der fallenden Flanke von PGC (der Taktleitung) abgetastet wird. Um den PIC überhaupt in den Programmiermodus zu bringen, wird ein spezieller 32-Bit-Schlüssel relativ zu bestimmten Flanken auf MCLR eingetaktet (obwohl siehe Hinweis unten bezüglich Hochspannungsprogrammierung).

Das Protokoll auf höherer Ebene wird komplizierter. Die meisten Dinge werden mit 6-Bit-Befehlen erledigt, denen einige von 14-Bit-Datenwörtern folgen. Sie müssen die Programmierspezifikation sorgfältig lesen. Beachten Sie, dass die Programmierspezifikation ein separates Dokument aus dem Datenblatt ist. Gehen Sie auf die Produktseite für Ihren speziellen PIC auf der Microchip-Website, dort finden Sie einen Link zu den Programmierspezifikationen im Dokumentenbereich.

Über Hochspannungsprogrammierung hinzugefügt

Diese Arten von PICs haben zwei Möglichkeiten, in den Programmiermodus zu gelangen, Hochspannung (HVP) und Niederspannung (LVP). Bei der Hochspannungsmethode muss MCLR auf 8 bis 9 Volt angehoben und während der Programmierung dort gehalten werden. Diese Methode funktioniert immer, unabhängig von möglichen Daten, die in den PIC einprogrammiert sind.

Das Niederspannungsverfahren zum Eintreten in den Programmiermodus beginnt mit dem Treiben von MCLR auf High, dann auf Low und dann mit einer speziellen 32-Bit-Schlüsselsequenz unter normaler Verwendung von PGC und PGD. Das Teil tritt bei der richtigen Tastenfolge in den Programmiermodus ein und bleibt im Programmiermodus, solange MCLR niedrig gehalten wird.

Die Niederspannungsmethode kann durch eines der Konfigurationsbits deaktiviert werden. Der gelöschte Zustand des Konfigurationsbits ermöglicht jedoch eine Niederspannungsprogrammierung, es wird so vom Werk geliefert, und dieses Konfigurationsbit kann nur so eingestellt werden, dass LVP nicht zugelassen wird, wenn die Programmierung mit der Hochspannungsmethode eingegeben wurde. Damit LVP nicht aktiviert wird, müssen daher alle folgenden Bedingungen erfüllt sein:

  1. Der PIC wurde zuletzt mit einem HVP-fähigen Programmiergerät programmiert, und es wurde der HVP-Programmeingabemodus verwendet.

  2. Die in den PIC programmierte HEX-Datei setzt das LVP-Bit im Konfigurationswort 2 absichtlich in den nicht gelöschten Zustand.

Da das Deaktivieren von LVP ziemlich genau eine bewusste Aktion und den richtigen Programmierer erfordert, ist es wahrscheinlich immer noch aktiviert. Wenn es aus irgendeinem seltsamen Grund absichtlich deaktiviert wurde, müssen Sie 8-9 V an MCLR liefern, um den PIC mindestens lange genug in den Programmiermodus zu versetzen, um eine Massenlöschung durchzuführen (wodurch LVP wieder aktiviert wird).

Das Programmieren eines PIC erfordert eine hohe Spannung. Ja, es ist möglich, einen PIC in den "LVP"- oder Niederspannungs-Programmiermodus zu schalten, aber dazu benötigen Sie einen Hochspannungs-Programmierer.

Wenn Ihr PIC bereits in den LVP-Modus versetzt wurde, können Sie den PIC einfach vom FPGA aus programmieren. Die Datenblätter enthalten alle die Programmierwellenformen, die zum Programmieren des Chips benötigt werden, also wäre es ein Fall, ein eigenes PIC-Programmiergerät im FPGA zu bauen.

Wenn der PIC jedoch nicht in den LVP-Modus versetzt wurde, müssen Sie eine Hochspannung (normalerweise 10 V) erzeugen und diese zum richtigen Zeitpunkt an den MCLR-Pin anlegen, um in den Programmiermodus zu gelangen. Wenn Sie diese Art von Hardware nicht bereits auf Ihrem Board haben, wäre zusätzliche Hardware erforderlich, die letztendlich vom FPGA gesteuert wird, wann sie ausgelöst wird.

Die meisten PIC-Programmierer enthalten einen kleinen Boost-Regler (Spannungsverdoppler), um die bereitgestellten 5 V auf 10 V zu bringen, wobei ein PIC an Bord verwendet wird, um die Spannungsregelung zu verwalten. Sie verwenden häufig PWM vom PIC und einen ADC-Eingang am PIC als einfachen Boost-Regler.

Sie sollten sich die öffentlich verfügbaren PICkit2-Schaltpläne ansehen.

Nein, sehr wahrscheinlich ist keine Hochspannung erforderlich. Die meisten neueren Teile, einschließlich aller 12F1xxx/16F1xxx-Serien, können eine Tastenfolge verwenden, um in den Programmiermodus zu gelangen. Diese Sequenz erfordert keine Hochspannung. Dies kann in der Konfiguration deaktiviert werden, aber das Teil kommt ab Werk mit aktivierter Schlüsselmethode. Es sollte immer noch verfügbar sein, es sei denn, jemand hat den Eintritt in den Programmmodus für die Tastenfolge absichtlich deaktiviert. Wenn es deaktiviert ist, müssen Sie MCLR auf 8-9 V erhöhen, um in den Programmiermodus zu gelangen.
Der Schlüsselprogrammiermodus ist der LVP-Modus. Es stützt sich auf LVP=1 in der Konfiguration. Es sieht so aus, als ob dieser Chip standardmäßig LVP = 1 hat, aber IST es auf diesem bestimmten Chip = 1 oder wurde er bereits mit LVP = 0 programmiert? Wer weiß? Wie ich schon sagte - WENN es im LVP-Modus ist, brauchen Sie das HV nicht, sonst schon.
Um also im LVP-Modus zu programmieren, muss ich einen "digitalen" PIC-Programmierer (VHDL) in mein FPGA implementieren? Ich kann mir wirklich keine Möglichkeit vorstellen, das zu tun. Könnt ihr mir helfen es zu bauen?
Nein, ich kann nicht. Sie haben die Schaltpläne für das pickit2 zur Verfügung, damit Sie wissen, welche Signale benötigt werden. Sie haben die Quelle für die pickit2-Firmware zur Verfügung, damit Sie wissen, wie man kommuniziert. Sie haben die Programmierdatenblätter zur Verfügung, damit Sie wissen, welche Anweisungen Sie senden müssen und wie Sie sie senden müssen. Wie Sie die Firmware von Ihrem Computer zum PIC übertragen, liegt ganz bei Ihnen. Wie viel Intelligenz wollen Sie in Ihrem FPGA und wie viel auf der PC-Seite?
OK danke. An erster Stelle werde ich versuchen, den PIC direkt mit dem PICKIT 3 zu programmieren. Bezüglich des PICKIT (das meine Firma für diesen Zweck gekauft hat) habe ich Angst, es direkt an die Pins des PIC anzuschließen, da diese vorhanden sind auch mit dem FPGA verbunden. Ich mache mir Sorgen, dass etwas Spannung durch das ausgeschaltete FPGA gehen und Schaden anrichten könnte. Ist das eine berechtigte Sorge?
Abhängig von der maximalen Spannung für die FPGA-Pins und wo Sie die Signale einbinden, ja, sehr stark. Wenn Sie absolut sicher sein wollen, heben Sie die erforderlichen Stifte auf dem PIC an, schneiden Sie die gemeinsamen Spuren ab oder entfernen Sie den PIC, bevor Sie ihn programmieren.