Eines meiner Projekte würde sehr davon profitieren, ein Programm ausführen zu können, das nicht im Mikrocontroller gespeichert ist (sondern auf einer SD-Karte gespeichert ist).
Ich suche also ein Gerät, mit dem ich den Code von der SD-Karte in den RAM laden und dann den Code aus dem RAM ausführen kann. Momentan habe ich nur den Programmierer, der mit dem PicKit2 geliefert wird, daher würde ich es vorziehen, bei PICs zu bleiben.
Weiß jemand, welche PICs dies tun können? Wenn keine PICs dazu in der Lage sind, welche unterschiedlichen Mikrocontroller würden dafür funktionieren? Vorzugsweise solche, die in einer mit Steckbrettern kompatiblen Verpackung erhältlich sind.
microcontroller
pic
Ponkadoodle
quelle
quelle
Antworten:
Es gibt einige PICs, mit denen Sie externen Programmspeicher hinzufügen können. Ich habe das noch nie gemacht, aber die Application Notes AN869 und AN778 enthalten weitere Informationen zum Implementieren des externen Speichers.
quelle
Eine andere Option, die Sie in Betracht ziehen sollten, ist die Verwendung einer interpretierten Sprache für Ihre auf der SD-Karte gespeicherten Programme. Auf diese Weise führt der Prozessor den von der Karte gelesenen Maschinencode nicht aus, sondern behandelt ihn nur als Daten.
Dieser Ansatz gibt Ihnen Flexibilität auf Kosten der Geschwindigkeit.
Es stehen zahlreiche Optionen zur Auswahl: Übersicht über hochrangige Sprachinterpreter / Compiler für Mikrocontroller
quelle
Wie bereits erwähnt, können PICs (außer dem PIC32) dies nicht. Sie müssen wahrscheinlich zu den größeren Prozessoren einer Familie oder zu einem Prozessor mit externem Speicherbus gehen, da die meisten Mikrocontroller nur über sehr begrenzte RAM-Ressourcen verfügen.
Die MSP430-Prozessoren können Code aus ihrem RAM-Speicher ausführen, aber Sie benötigen so etwas wie den F5438 mit 16 KB RAM-Speicher - das Ausführen von Code in 128 Byte ist eigentlich keine Option!
Wenn ein Prozessor über einen externen Bus verfügt, können Sie RAM in den Codebereich stellen. Möglicherweise müssen Sie eine zusätzliche Logik hinzufügen, um den RAM in zwei Speicherbereiche abzubilden, wenn die Prozessorarchitektur das Schreiben von Daten in den Ausführungsspeicher nicht zulässt.
Ich habe Code aus dem RAM in einem 8051-basierten System ausgeführt, aber das bedeutete, dass der RAM zum Programmieren in den EXTERN-Speicherbereich und zur Ausführung wieder in den CODE-Bereich gemappt werden musste. Das Lade- / Überwachungsprogramm übernahm das Umschalten und Laden der Speicherbank. Bitte fragen Sie nicht nach dem Code - ich habe das vor ungefähr 30 Jahren gemacht und es ist längst verloren (und in PL / M-51 geschrieben)
quelle
Keiner der PICs für den unteren und mittleren Bereich kann aufgrund ihrer Speicherarchitektur aus dem RAM ausgeführt werden.
Jede ARM-basierte CPU sollte vom RAM ausgeführt werden. Obwohl sie in der Regel in smd-Paketen vorliegen, gibt es einige DIP-Module, in denen der Mikrocontroller bereits geladen ist. Schauen Sie sich zum Beispiel das mbed oder LPCXpresso an. Beide kommen entweder mit einem Bootloader oder beim LPCXpresso mit einer Debug-Schnittstelle und kostenlosen Compilern.
Wenn Sie lieber bei einfachen 8-Bit-Mikros bleiben möchten, ziehen Sie vielleicht etwas aus der freescale HCS08-Familie in Betracht. Diese können aus dem RAM ausgeführt werden und es gibt eine Code-beschränkte Version des Codewarrior-IDE- und C-Compilers, die kostenlos verfügbar ist.
Ich bin mir ziemlich sicher, dass der MPS430 dies auch kann, aber ich habe es nie selbst gemacht.
quelle
Der Propeller lädt sein Programm von einem externen Speicher.
quelle
Ich erinnere mich an einen Bootloader für AVRs, der den Chip mit einer .hex-Datei (vermutlich) von einer SD-Karte erneut flashen würde. Ich kann die Originalquelle nicht finden, aber diese Google-Suche liefert einige interessante Treffer. Ja, ich weiß, dass dies AVR und nicht PIC ist, aber Sie werden es vielleicht nützlich finden, wenn die PIC-Sache nicht funktioniert.
quelle
Wie andere Poster angemerkt haben, können Sie auf einem 8- oder 16-Bit-PIC keine Ausführung aus dem RAM ausführen, da sie eine Harvard-Architektur verwenden (separate Code- und Datenbereiche). Ob es sinnvoll ist, ein Programm von einer SD-Karte zu laden und in den Codespeicher zu flashen, hängt davon ab, wie oft Sie dies tun.
Wenn Sie versuchen, eine dynamische Umgebung wie ein Betriebssystem zu erstellen, das Programme ständig überlagert, dann nein. Aber in meinem Fall habe ich ein Programm, das Treiber nach Bedarf von einer 2 GB SD-Karte lädt. Der PIC24FJ256GB110 hat ein Minimum von 10.000 Lösch- / Schreibzyklen. Selbst wenn dies fünfmal pro Tag gemacht würde, würde der Blitz mindestens 5 1/2 Jahre dauern.
(Hinweis: Die Zahl 10.000 ist ein Minimum. Die typische Lebensdauer von Lösch- / Schreibzyklen kann das Fünffache betragen. Wenn Sie also eine Entwicklung durchführen, können Sie einen Prozessor wahrscheinlich 140 Mal am Tag neu flashen - alle 3 1/2 Minuten für acht Stunden - und es könnte noch ein Jahr dauern.)
quelle
An meiner Schule haben wir HC11- oder HC12-Prozessoren mit externem RAM zum Laden und Ausführen von Programmen verwendet ... aber ich habe den Namen der Boards / Kits vergessen :( Auf jeden Fall adressieren Freescale HC (S) -Line-MCUs RAM und ROM identisch , so können Sie Code in den Arbeitsspeicher laden und ausführen.
Wenn Sie eine Warteschlange
blalor
löschen, ist es möglicherweise die beste Lösung, einfach eine Schaltfläche auf Ihrem Board hinzuzufügen, mit der Sie den PIC anhand der auf einer SD-Karte gespeicherten Daten aktualisieren können, die Sie mit einem Bootloader einlegen. Ich kann mir nicht vorstellen, was nicht auf die größeren PICs passen würde. Wenn Sie statische Daten (Grafiken, Text, Sound) haben, bewahren Sie diese auf einem externen Speicher auf.quelle
Sie können wahrscheinlich keine Zuweisung aus dem RAM vornehmen, aber für Ihre Anwendung ist möglicherweise ein kleiner Flash-Loader verfügbar, der die Daten der SD-Karte in den restlichen Flash-Speicher einliest. Ich habe diesen Ansatz mit einem SPI-gesteuerten Flash-Chip verwendet, um zu ermöglichen, dass Firmware von einer drahtlosen Verbindung geladen und dann installiert wird, sobald sie vollständig empfangen wurde. Ich kann mir keinen bestimmten Grund vorstellen, warum es mit einer SD-Karte nicht funktioniert, obwohl ein SD-kompatibler Bootloader möglicherweise etwas Platz in Anspruch nimmt.
quelle
Nicht wenige Mikrocontroller lassen Sie dies tun, klingt wie nicht das Bild. was Sie tun möchten, ist ein Bootloader, der SPI verwendet, um von der SD-Karte zu lesen, das Programm zu kopieren, das wahrscheinlich einen bekannten oder fest codierten Dateinamen haben möchte, wahrscheinlich im Stammverzeichnis, diese Datei in RAM zu analysieren und dann zu verzweigen das programm im ram. Mit den ARM-basierten Controllern können Sie auf jeden Fall so etwas tun.
Eine Alternative wäre, den Bootloader die SD-Karte über SPI lesen zu lassen und statt auf RAM zu kopieren und auf einen Teil des Flashs zu brennen. Möglicherweise möchten Sie eine Taste haben, wenn die Taste beim Einschalten oder Zurücksetzen gedrückt wird, und dann ein neues Programm von der SD-Karte laden. Wenn die Signatur oder Prüfsumme auf diesem ladbaren Teil des Flashs gut aussieht, verzweigen Sie beim Booten zu diesem Teil des Flashs. Oder wenn die SD-Karte vorhanden ist, laden Sie sie, andernfalls verzweigen Sie in den ladbaren Teil des Flashs. Kann diese Methode mit armbasierten und avr-basierten, möglicherweise sogar pic-basierten, aber meine pic-Erfahrung ist veraltet. msp430 würde ich auch annehmen. Grundsätzlich gilt: Wenn Sie Teile des Flashs, die Sie ausführen, vom Mikrocontroller-Prozessor selbst aus neu programmieren können,
quelle