Hallo an alle im Forum! Ich habe schon einige Artikel gelesen die sich mit externen Datenspeicher beschäftigen aber fand auf meine frage keine Antwort. Also erstmal für den Überblick was ich machen möchte. Ich will mit einem 8051 Derivat eine Platine entwickeln die man dann auf ein Steckbrett aufstecken kann. Das ganze soll für Experimente und Lernzwecken dienen. Entschuldigt bitte meine etwas ungewöhnlichen fragen aber ich Programmiere normalerweis 8051 die mit integrierten Flashspeicher ausgerüstet sind. Jetzt stellte sich mir die frage ob ich noch einen externen Datenspeicher anbinden soll oder nicht. Ich dachte da mal erst an RAM-Speicher oder EEPROM. Wenn ich den externen Datenspeicher anbinden möchte müsste ich es dann in der sog. Von Neumann-Architektur realieren? Welchen nutzen hätte ich von einem externen Datenspeicher? Kann ich in so einem RAM-Speicher Programm ablaufen lassen oder nur Temporäre Daten speichern? Bitte um Konstruktive Kritik und Anregungen. MfG Klaus
>Wenn ich den externen Datenspeicher anbinden möchte müsste ich es dann >in der sog. Von Neumann-Architektur realieren? Die brauchst du nur wenn du auch Programme dort laufen lassen willst. >Welchen nutzen hätte ich von einem externen Datenspeicher? Groesseren Programm b.z.w. Datenspeicher. Auch lassen sich so weitere Ports realisieren wo du parallel darauf zu greifen kannst >Kann ich in so einem RAM-Speicher Programm ablaufen lassen oder nur >Temporäre Daten speichern? Wie gesagt dann in der von Neumann Architektur. Gruss Helmi
@Helmut Lenzen Vielen Dank für deine Antwort! Das mit der Porterweiterung hört sich gut an. Lässt sich das auch parallel mit externen Speicher realisieren?
Bei der 8051-Familie geschieht der Zugriff auf externen Speicher über ein gemultiplextes 8-Bit-Port als Daten-Adress Byte von 8 Bit, dazu kommen noch mehrere Leitungen eines anderen Port für die höherwertigen Bits der Adresse. für den Zugriff auf externen Datenspeicher existiert der MOVX - Befehl, bei dessen Ausführung die Signale ALE, RD/WR erzeugt werden, mit denen das Adress-Latch und der Zugriff auf das RAM gesteuert werden. Externes RAM wird also ganz schön kompliziert (und auch halb? so schnell) Programm im externen Datenspeicher ist wegen des Zugriffs über MOVX wohl nicht möglich. externes RAM bringt Zugriff auf wesentlich mehr Speicherraum: allerdings meist langsamer als beim internen RAM. Bei der Benutzung des Ports für RAM-Zugriff steht es für andere Nutzung nur mit Einschränkungen zur Verfügung.
Ja sicher geht das. Du musst nur deine Addressdekodierung so auslegen das sich für die Ports und das RAM unterschiedliche Addressen ergeben. Man kann sogar mehr Speicher addressieren als der Prozessor Addressleitungen hat . Stichwort Banking.
>Programm im externen Datenspeicher ist wegen des Zugriffs über MOVX wohl >nicht möglich. Doch es geht. Man muss nur die PSEN Leitung mit RD Leitung über ein AND Gate zusammen führen.
Es gibt auch 8051er mit internen RAM und EEPROM. Und auch welche, wo der FLASH (Programmspeicher) während der Laufzeit umprogrammiert werden kann, so das man auch ein neues Programm laden könnte. Das Angebot ist riesig. http://www.keil.com/c51/chips.asp Ein externer RAM kann natürlich auch dran. Die von Neumann Architektur schränkt zwangsweise den Adressraum ein, oder Du machst eine Art Bank-Switching. Für Einstieg sind aus meiner Sicht besonders geeignet: AT89C51ED2, AT89S8253 Atmel LPC900 Serie, z.B P89LPC922 NXP Für größere, professionelle Projekt auch schon mal die uPSD3xxx Serie von STM.
Vielen Dank für euere Antworten und nützlichen Hinweisen. Ich werde erst den Controller auf die Platine mit RS232 bannen und alle Pins dann rausführen. Ich werde einen AT89C51AC2 verwenden. Für externe Anbindungen Speicher oder Porterweiterungen werde ich seperate Platinen herstellen um hier flexibler zu sein. Über weitere Anregungen würde ich sehr freuen. MfG Klaus
> Ein externer RAM kann natürlich auch dran. Die von Neumann Architektur > schränkt zwangsweise den Adressraum ein, oder Du machst eine Art > Bank-Switching. Ich glaube da besteht ein Missverstaendnis. Erstens schraenkt vonNeumann den Adressraum nicht ein, sondern die verfuegbaren bits fuer Adressierung, also max 16-bit beim 8051, das macht 64 KB max (ohne Banking). Das groessere Missverstaendnis ist allerdings zu glauben, dass der 8051 auf einer von Neumann Architektur aufbaut, er ist naemlich Harvard basierend, Adressraeume fuer Daten und Caode sind grundsaetzlich getrennt, bei von Neumann (z.B. ARM7) gibt es aber die Adressen nur einmal. Also eine Adresse 0x1000 kann nicht zweimal vorkommen, bei Harvard kommt sie aber 2 mal vor, einmal inm Datenbereich und einmal in Codebereich. > > Für Einstieg sind aus meiner Sicht besonders geeignet: > AT89C51ED2, AT89S8253 Atmel > LPC900 Serie, z.B P89LPC922 NXP Ich mag die LPC900 serien von NXP aber die genannten Typen habe keinen externen Bus. Da sollte es schon eher der LPC954 sein, der hat einen ext. Bus. Robert Teufel ------------------------------------------------- Partner in Silicon Valley gesucht? Ich stehe gerne zur Verfuegung. -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- http://www.lpc2000.com http://www.mcu-related.com
Hier mal ein Beispiel für Externes RAM und Eprom am 80x51. Auch externe Ports sind dort realisiert. Der externe Bus ist durch Bustreiber zum Prozessor hin abgetrennt. Am externen Bus sind bis zu 256 Addressen verfügbar. Gruss Helmi
@Helmut Lenzen Danke für deinen Beitrag. Ich werde den Schaltplan mal Studieren so bald ich dazu komme. Sieht auf jedenfall sehr Interessant aus. MfG Klaus
Klaus wrote: > Das ganze soll für Experimente und Lernzwecken dienen. > > Entschuldigt bitte meine etwas ungewöhnlichen fragen aber ich > Programmiere normalerweis 8051 die mit integrierten Flashspeicher > ausgerüstet sind. Dann ist es unsinnig, noch externen SRAM dranzupappen. Im Gegenteil, für Lernzwecke ist es besser nicht tonnenweise SRAM zu haben, damit man lernt zu überlegen und nicht Variablenspeicher nach der Gießkannenmethode zuweist, wie es leider unter Windows üblich ist. Also am besten sogar verschweigen, daß noch 1kB interner XRAM verfügbar ist, sondern erstmal nur die 256 Byte benutzen. Und die freien 18 Portpins kann man viel besser als IO-Ports gebrauchen. Wenn man die UART zum Flashen abzieht, hast Du also 30 IOs zur Verfügung statt nur 12. > Jetzt stellte sich mir die frage ob ich noch einen externen > Datenspeicher anbinden soll oder nicht. Ein klares nein von mir. Peter
@Helmut Lenzen Wenn mich nicht alles täuscht ist in deinem DM9000 Schaltplan ein kleiner Fehler drin. Der Low-Drop Spannungsregler U17 (LM3940) ist verkehrt herum eingezeichnet. Der Eingang liegt an 3,3V und der Ausgang an 5V. Es müsste aber genau umgedreht sein. Oder die Beschriftung der 3,3V und 5V daneben ist falsch.
@Fox Mulder Gut beobachtet , das hast du recht der ist verkehrt rum eingezeichnet. Das hatte ich aber schon bei der bestueckung gesehen und den um 180 Grad gedreht eingesetzt. Wie gut das der den GND in der mitte hat. Gruss Helmi
Hier: http://www.goblack.de/desy/mc8051chip/bauanleitung/desy535_2cls/cls22schaltplan_komplett.html ist ein Beispiel, wie man es machen könnte. Sinnvoll oder nicht... Gut, dass es heutzutage 8051er µC gibt, wo 62K Flash EEPROM Program Memory, 4K Data Flash EEPROM, 2304 Bytes On-chip RAM u.s.w. schon auf dem Chip sind.
Hallo! Ist zwar schon ne weile her aber ich habe jetzt meinen µC AT89C51AC2 auf eine Platine gebannt. Es funktioniert auch alles Wunderschön also Programm schreiben Flashen und ausprobieren. Was mich jetzt im Moment interessiert ist, welche Vorrausetzungen man benötigt um Programme direkt auf dem µC zu Debuggen. Also einzelschritte Ausführen über ein Entwicklungstool das direkt mit dem µC verbunden ist. Ich habe zwar schon Beiträge über Bootloader gelesen aber schreiben könnte ich bis jetzt keinen. In manchem Beiträge wird sogar von einem Monitorprogramm geredet aber darunter kann ich mir auch nicht wirklich was vorstellen vll. auch ein Bootloader? Kann einer vll. erklären wo die Unterschide sind? Wie schwierig ist es einen Bootloader selber zu schreiben bzw. welches Wissen muss man sich da aneignen? MFG Klaus
> Was mich jetzt im Moment interessiert ist, welche Vorrausetzungen man > benötigt um Programme direkt auf dem µC zu Debuggen. > Also einzelschritte Ausführen über ein Entwicklungstool das direkt mit > dem µC verbunden ist. Im Prinzip ein entsprechendes Debugtool, eine IDE, die die Debugfunktionen unterstützt, und natürlich einen entsprechenden µC. Mit den C8051Fxxx-Controllern und dem Keil Entwicklungspaket konnte ich da schon sehr gute Erfahrungen machen. > Ich habe zwar schon Beiträge über Bootloader gelesen aber schreiben > könnte ich bis jetzt keinen. Dann hast du ihn nicht verstanden. Warum solltest du keinen schreiben können? > Kann einer vll. erklären wo die Unterschide sind? Ein Bootloader gibt dir die Möglichkeit, die µC-Software direkt in der Schaltung ohne Hardware-Tools updaten zu können. Der BL wird anstelle des normalen Programms ausgeführt, erhält die neue Version und schreibt sie in den Speicher. Ein Monitor-Programm wird zusätzlich zum normalen Programm gelinkt, und gibt dir auf eine Schnittstelle Daten aus, wie z.B. Zustand der Register, aktueller Variableninhalt, etc. War früher sehr beliebt, als es noch keine Möglichkeit gab, direkt die µC-Hardware debuggen zu können. Hast du dir während einer Software-Entwicklung schon mal Daten (z.B. Variablen-Inhalte) auf die serielle Schnittstelle oder ein Display ausgegeben? Das ist im Prinzip eine Art Monitor, aber seeeeehr primitiv. > Wie schwierig ist es einen Bootloader selber zu schreiben bzw. welches > Wissen muss man sich da aneignen? Ist eigentlich nicht schwierig - wenn man richtig plant. Du brauchst zum einen Wissen darüber, wie dein Controller sich selbst programmieren kann, also die entsprechenden Schreib-/Lesefunktionen. Dann musst du dir Gedanken drüber machen, über welches Protokoll du mit dem BL kommunizieren willst, hard- wie softwareseitig. Also RS232, etc. und wie die Kommandos für den BL aufgebaut sind, inkl. Fehlerprüfung etc. Wie du den BL aktivieren willst, spielt auch eine Rolle, also über Kommando in der normalen Applikation, über Pinzustand beim Reset oder immer zuerst nach Reset ausführen etc. Kommt natürlich auch drauf an, ob sich dein µC dafür eignet, einige Sachen werden je nachdem besser unterstützt als andere. Du musst sicherstellen, dass der BL sich nicht selber überschreiben kann. Auf der Applikationsseite musst du sicherstellen, dass das Programm dort anfängt, wo es der Bootloader erwartet. Sonst läuft es nicht. Bei einem Standard-8051er ist es so, dass der Programmstart immer bei 0x0000 anfängt, da bei 0x0003 schon der erste Interruptvektor ist, muss man direkt auf den Bootloader springen, der prüft, ob die normale Applikation ausgeführt werden soll, oder ob BL-Funktionalität zum Zug kommt. Daher muss die Applikation an einer bestimmten Stelle stehen, damit der BL dorthin springen kann, wenn die Applikation ausgeführt werden soll. Das musst du bei der Software-Entwicklung beachten. Beim AT89C51ED2 ist es ein bisschen anders, da kannst du zum einen den Bootloader über einen Pinzustand beim Reset starten, oder ihn aus der Applikation aufrufen (sogar während der Applikation Teile des BL verwenden -> API). Über ein spezielles Flash-Register kannst du einstellen, wo dein BL startet, und der µC kann bei einem bestimmten Pinzustand beim Reset dorthin springen. Vorteil ist, dass deine Applikation nicht beachten muss, wo sie steht, sie kann ganz normal bei 0x0000 starten. Arbeiten mit Interrupts im Bootloader ist wiederum nicht möglich, da sich die Interruptvektoren nicht verschieben lassen, andere Architekturen können das wiederum. Das hört sich jetzt alles recht viel an, ist aber halb so wild, musst halt fragen, wenn was unklar ist. Ralf
Hallo Ralf! Danke für deine Ausführliche Antwort. Weisst Du ob es irgend eine Litaratur gibt wo man sich selber beibringen kann wie so ein Bootloader zu Programmieren ist. Ehrlich gesagt hätte ich jetzt schwierigkeiten damit Anzufangen, weil ich im Moment nicht weiss wo hinten und vorne ist. Mir fehlt zu der Materie noch die Theorie wie sowas Prinzipiell ablaufen müsste. Möcht hier betonen das ich hier nicht um fertige Lösungen betteln möchte sondern selber machen möchte. Wie gesagt hab ich hier noch Startschwierigkeiten. Mfg Klaus
Literatur wirst du kaum eine finden, weil es keinen Universalbootloader
gibt. Jeder hat so seine Spezialitäten und ist auch immer auf einen
bestimmten Bedarf zugeschnitten.
> Wie gesagt hab ich hier noch Startschwierigkeiten.
Das ist kein Problem. Zum Start kommst du von ganz allein. Mach dir eine
Liste von dem, was du brauchst. Also die Funktionen zum
Schreiben/Lesen/ChipErase etc. Der AC2 hat bereits einen Bootloader,
soweit ich das sehen kann, also überleg dir, ob du per API-Call die
entsprechenden Bootloaderfunktionen aufrufen oder eigene machen willst.
Mach dir Gedanken, über welche Schnittstelle das ganze gehen soll (meist
UART), und mit welchem Protokoll du arbeiten willst. Die Flip-Software
von Atmel kann mit dem Bootloader kommunizieren.
Wenn du was spezielles brauchst, wie z.B. Verschlüsselung, dann musst du
das auch beachten.
Wenn du alles aufgelistet hast, dann baust du das Schritt für Schritt
zusammen, also zuerst mal die Funktionen für den Flash-Zugriff, dann die
Kommunikation an sich, dann das Auswerten von Kommandos usw.
Mach nicht den Fehler, parallel dazu eine PC-Software entwickeln zu
wollen, die mit dem BL kommuniziert, das geht meist in die Hose, weil
man manchmal an der falschen Stelle sucht.
Wenn du z.B. die Liste fertig hast, kannst ja Bescheid sagen. Und das
Studium der (Bootloader-)Datenblätter von ED2 und AC2 ist sicherlich
hilfreich.
Ralf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.