PIC-Programmierung über FPGA

9

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

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 entlö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, einer .hex-Datei, aber wie kann ich ihn über die FPGA-Pins auf das FPGA und dann auf den PIC übertragen?

Der verwendete PIC ist der Mikrochip PIC12F1822.

Myst
quelle
2
Nur überprüfen: Können Sie das FPGA neu programmieren (dh Sie haben alle Werkzeuge, um dies zu tun)?
pjc50
Dies ist eine Art Entwicklungsboard?
Matt Young
Ja, ich habe alle Werkzeuge, um das FPGA neu zu programmieren (es ist über Standard-USB mit dem Computer verbunden).
Myst
1
Nein, sie wurden beschuldigt, weil sie diese Anstrengungen nicht unternommen haben. Eigentlich bin ich auf einem Praktikum und fand das sehr unprofessionell. Obwohl ich das Problem noch beheben muss. Ich kann wirklich keine Möglichkeit finden, diesen PIC mit anderen Methoden als einem externen Programmierer neu zu programmieren, den ich nicht verwenden kann, da das Paket bereits fertig ist.
Myst
2
Gibt es keine Möglichkeit, einige Überbrückungsdrähte an Leiterbahnen oder Stifte des PIC anzulöten, damit Sie sie über einen externen Programmierer programmieren können? Der Versuch, dies über das FPGA zu tun, klingt nach einem Diplomarbeitsprojekt.
Horta

Antworten:

10

Nein, Sie müssen SPI, UART oder I 2 C nicht verwenden, um den PIC zu programmieren. Die einzige Möglichkeit, ein neues Programm in einen PIC zu integrieren, für den kein spezieller Code geladen ist (ein Bootloader), ist die Verwendung der externen Hardware-Programmierschnittstelle. Elektrisch bedeutet dies, dass eine Verbindung zu Vss, MCLR, PGC und PGD hergestellt wird. Es kann nützlich sein, den Programmierer auch an Vdd anzuschließen, dies ist jedoch für diesen Chip nicht erforderlich, solange der Vdd-Pegel bekannt ist und der Programmierer entsprechend angepasst wird.

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 versetzen, wird ein spezieller 32-Bit-Schlüssel relativ zu bestimmten Flanken des MCLR getaktet (siehe Hinweis unten zur Hochspannungsprogrammierung).

Das übergeordnete Protokoll wird komplizierter. Die meisten Dinge werden mit 6-Bit-Befehlen erledigt, von denen einige von 14-Bit-Datenwörtern gefolgt werden. Sie müssen die Programmierspezifikation sorgfältig lesen. Beachten Sie, dass die Programmierspezifikation ein vom Datenblatt getrenntes Dokument ist. Gehen Sie auf der Microchip-Website zur Produktseite für Ihren speziellen PIC. Im Abschnitt Dokumente finden Sie einen Link zur Programmierspezifikation.

Hinzugefügt über Hochspannungsprogrammierung

Diese Arten von PICs haben zwei Möglichkeiten, in den Programmiermodus zu wechseln: Hochspannung (HVP) und Niederspannung (LVP). Bei der Hochspannungsmethode muss die 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 programmiert sind.

Das Niederspannungsverfahren zum Aufrufen des Programmiermodus beginnt damit, dass MCLR hoch, dann niedrig und dann in einer speziellen 32-Bit-Tastenfolge unter Verwendung von PGC und PGD normal getaktet wird. Das Teil wechselt nach der richtigen Tastenfolge in den Programmiermodus und bleibt im Programmiermodus, solange die 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 ab Werk auf diese Weise geliefert, und dieses Konfigurationsbit kann nur so eingestellt werden, dass LVP nicht zulässig ist, wenn die Programmierung mit der Hochspannungsmethode eingegeben wurde. Damit LVP nicht aktiviert wird, müssen alle folgenden Bedingungen erfüllt sein:

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

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

Da das Deaktivieren von LVP eine absichtliche 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 so lange in den Programmiermodus zu versetzen, dass eine Massenlöschung durchgeführt wird (wodurch LVP wieder aktiviert wird).

Olin Lathrop
quelle
3

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

Wenn Ihr PIC bereits in den LVP-Modus versetzt wurde, können Sie den PIC problemlos über das FPGA programmieren. Die Datenblätter enthalten alle die Programmierwellenformen, die zum Programmieren des Chips erforderlich sind. Es wäre also erforderlich, ein eigenes PIC-Programmiergerät im FPGA zu erstellen.

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 wechseln. Wenn Sie diese Art von Hardware noch nicht auf Ihrem Board haben, ist zusätzliche Hardware erforderlich, die letztendlich vom FPGA gesteuert wird, wann sie ausgelöst wird.

Die meisten PIC-Programmierer verfügen über einen kleinen Boost-Regler (Spannungsverdoppler), der die bereitgestellten 5 V bis 10 V mit einem integrierten PIC zur Verwaltung der Spannungsregelung aufnimmt. 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.

Majenko
quelle
1
Nein, 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 wechseln. Diese Sequenz erfordert keine Hochspannung. Dies kann in der Konfiguration deaktiviert werden, das Teil wird jedoch ab Werk mit aktivierter Schlüsselmethode geliefert. Sofern nicht jemand absichtlich den Schlüsselsequenz-Programmmoduseintrag deaktiviert hat, sollte er weiterhin verfügbar sein. Wenn es deaktiviert ist, müssen Sie die MCLR auf 8-9 V erhöhen, um in den Programmiermodus zu gelangen.
Olin Lathrop
Der Schlüsselprogrammiermodus ist der LVP-Modus. Es basiert auf LVP = 1 in der Konfiguration. Es sieht so aus, als ob der Chip standardmäßig LVP = 1 ist, aber IST es = 1 auf diesem bestimmten Chip, oder wurde er bereits mit LVP = 0 programmiert? Wer weiß? Wie ich schon sagte - WENN es sich im LVP-Modus befindet, brauchen Sie die HV nicht, sonst tun Sie es.
Majenko
Um im LVP-Modus zu programmieren, muss ich einen "digitalen" PIC-Programmierer (VHDL) in mein FPGA implementieren. Ich kann mir wirklich keinen Weg vorstellen, das zu tun. Könnten Sie mir helfen, es zu bauen?
Myst
Nein, ich kann nicht. Sie haben die Schaltpläne für 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 Sie kommunizieren können. Sie haben die Programmierdatenblätter zur Verfügung, damit Sie wissen, welche Anweisungen zu senden sind und wie sie zu senden sind. Wie Sie die Firmware von Ihrem Computer an den PIC kommunizieren, liegt ganz bei Ihnen. Wie viel Intelligenz möchten Sie in Ihrem FPGA und wie viel am PC-Ende?
Majenko
OK danke. Zunächst werde ich versuchen, den PIC direkt mit dem PICKIT 3 zu programmieren. In Bezug auf den PICKIT (den meine Firma zu diesem Zweck gekauft hat) habe ich Angst, ihn direkt mit den Pins des PIC zu verbinden, da dies der Fall ist auch mit dem FPGA verbunden. Ich befürchte, dass eine Spannung durch das ausgeschaltete FPGA fließt und Schaden anrichtet. Ist das ein berechtigtes Anliegen?
Myst