Mit 2 Microcontrollern auf einen Speicher zugreifen?

Jan 06, 2006 26 Replies

Hallo,



ich möchte in einem System 2 mit Microcontroller auf Ram-Speicher zugreifen.



Also einen Programmprozessor der die Daten im Sram auswertet, und einen Kommunikationsprozessor der die Daten ein und ausliest.



Giebt es dafür spezielle Ram-Speicherbausteine mit doppelt ausgeführten Adress und Data Leitungen oder bleibt nur die möglichkeit abwechselnd auf den Speicher zuzugreifen?



mfg Andreas


Gibt es. z.B.

formatting link

MfG

Gibt es. Heisst Dualport-Ram und ist nicht ganz billig. Vermutlich deshalb weil es so ein fettes Gehaeuse mit den ganzen Leitungen braucht.

Olaf

[Dual Port SRAM]

Angesichts von Preisen und Verfügbarkeit ist es aber trotzdem empfehlenswert, sich entweder

(a) (wenn die Speicherzugriffe vglw. selten sind) eine Synchronisationslösung zu überlegen, die sicherstellt, daß nur ein Prozessor zur Zeit auf den Speicher zugreift, oder

(b) sich nach einem (IIRC auch frei verfügbaren) Core für CPLDs umzusehen, die aus einem normalen SRAM ein Dual Port SRAM machen.

Michael

Wenn die Geschwindigkeit keine große Rolle spielt, dann seriell: I2C-Speicher bzw. SPI-Speicher. Wohl eher nicht als EEPROM, sondern in anderer Technik, z.B.

formatting link

Mit SPI schaffst du immerhin bis zu 25MBit/Sek. Was nicht gerade langsam ist. Beide Schnittstellentypen gibts meist "umsonst" auf Controllern als Peripherie.

Die ganzen Dual-Port-RAMs sind schwer und teuer beschaffbar. Guck dir mal

formatting link
MOBL-RAM an. Eine Seite parallel, die andere sequentiell mit einem Adresszähler.

Gruß - Henry

"Andreas Sauer" schrieb im Newsbeitrag news:43becc9e$0$20774$ snipped-for-privacy@newsread4.arcor-online.net...

zugreifen.

Es gibt sicher viele Möglichkeiten in Abhängigkeit von der geforderten Größe des RAM, des Micocontrollers (Adreß-/Datenbus vorhanden?) oder soll der RAM nur zur Datenübergabe dienen? Mehr Infos wären gut ;-)

MfG

(Andreas Sauer) 06.01.06 in /de/sci/electronics:

Am einfachsten mit Fifos. Damit hast Du den Ärger mit all den Adressleitungen und dem filligranen Timing nicht. Eine Seite klopft mit einen Takt die Daten rein bis voll und die andere Seite lutscht mit ihrem Takt raus bis leer.

Wenn Du wirklich "wahlfreien" Zugriff brauchst solltest du überlegen ob das wirklich nötig ist. Da Du von "Kommunikationsprozessor" sprichst scheint das nicht nötig zusein.

Rainer

Dual-Port-RAM kann bei Einzelstücken/Kleinserien angenehm sein, sonst sprechen eventuell Kosten dagegen.

Wenn man einzelnes Gerät mit DIL-ICs aufbauen will: IDT7130

1kx8 war früher verbreitet und gibts öfters bei ebay. Soweit man einzelne braucht habe ich noch welche. Hat allerdings üppige Bauform DIL48. Kann auch nicht gleichzeitig auf eine Speicherstelle von beiden Seiten zugreifen, entweder man kann Prozessoren mit waitstates bremsen oder man muß mit Interrupt patchen.

Anwendung wäre z.B.:

formatting link
( Artikel nicht fertig, kann Fehler enthalten ) Dort ist das RAM auch Programmspeicher für den frontend-6502, sowas vereinfacht Softwareentwicklung.

MfG JRD

"Andreas Sauer"

und Data Leitungen oder bleibt nur die

Ich empfehle einen uC der Multitasking beherrscht. Erfordert dann aber schon sehr ausgiebige Informatikkentnisse. Ich weiß nicht ob ich mir persönlich sowas zutrauen würde aber es ist sehr wahrscheinlich die günstigere Alternative, wenn es bei dir um Massenfertigung geht. Andererseit ist das Problem vmtl. auch mit nur einem Prozessor lösbar.

lg,

Markus

"Andreas Sauer" schrieb im Newsbeitrag news:43becc9e$0$20774$ snipped-for-privacy@newsread4.arcor-online.net...

zugreifen.

Hallo Andreas,

Um welche Microcontroller handelt es sich denn?

Die Möglichkeiten können stark eingeschränkt sein, wenn man die "falschen" Microcontroller hat.

Es gibt Dual-Port-Speicher. Aber das wurde ja scon mehrfach erwähnt.

Haben deine Prozessoren überhaupt ein richtiges externes Memory-Interface? Für Dual-Port-RAM müßten sie dann idealerweise auch noch die Fähigkeit besitzen bei Speicherzugriffen "kurz" zu warten wenn ein Zugriffskonflikt auftritt.

Erzähl doch einfach noch etwas mehr über dein Prozessorsystem und welche Datenraten auftreten.

Gruß Helmut

^^^^^^^^^^^^^^^^^^^

Hm, welcher uC unterstützt denn _kein_ Multitasking? Multitasking wird in Software realisiert, der uC muss also nur zeitgesteuerte Interrupts können. Und das können wohl (fast?) alle.

Gruß, Johannes

Ein nutzer-sichtbarer und manipulierbarer Stackpointer wäre von Vorteil, wenn man den einzelnen Tasks nicht die Benutzung des Stacks verbieten will.

Einen Timerinterrupt braucht man dagegen nur, wenn man wirklich preemptives Multitasking möchte. Kooperatives Multitasking geht auch ohne.

Stefan

"Johannes Bauer"

das ist kein echtes Multitasking. Ist wohl Definitionssache. Dem Op ging es vermutlich um die Rechenleistung die eine einzelne CPU sonst nicht bringt. Deshalb wäre echtes Multitasking (also wirklich zeitlich parallele berechnungen) eine Lösung.

Richtig, daran hatte ich nicht gedacht. Welche Prozessoren bieten das nicht an?

Ja, aber kooperatives Multitaking a la Koroutinen ist _noch_ fehleranfälliger: wenn nur ein Prozess blockiert, hängt das System. Alle Prozesse werden mit in den Abgrund gerissen.

Im Endefekkt ist bei der Implementierung (zumindest sehr häufig) dennoch nicht der Prozessor der limitierende Faktor, sondern der Programmierer.

Gruß, Johannes

Ja, offenbar... zumindest würde _ich_ das, was meine CPU im Laptop momentan veranstaltet schon als "Multitasking" bezeichnen.

Du empfiehst also einen SMP-uC mit UMA. Gibt es sowas überhaupt? Und wenn ja, zu welchem Preis? Ist der geringer als ein Dual Port SRAM?

Gruß, Johannes

"Johannes Bauer" schrieb im Newsbeitrag news: snipped-for-privacy@news.cis.dfn.de...

AT90S1200 :-)

Aber man muss nicht an den Stack-Pointer-Wert, sondern nur an den Stack-Inhalt drankommen koennen. Man kann naemlich beim Taskwechsel alle Werte vom Stack poppen (egal wie viel drauf waren) und speichern, die gespeicherten alten Werte vom anderen Task alle pushen (egal wie der Stack-Pointer stand) und mit korrektem Stackinhalt weitermachen. Der AT90S1200 kann selbst das nicht, denn so weit ich weiss kann man den Inhalt vom Stack nur in den PC zuruecktun, nicht in ein Register. Beim AT90S1200 muesste man slso eine virtuelle Maschine (P-Code oder so) programmieren, um Multitasking machen zu koennen. Dafuer ist er dann aber etwas zu klein.

Programmfehler sind immer schlecht.

Eben, siehe Windoof, 1 Gigabyte Code und nicht mal echtzeitfaehig.

Manfred Winterhoff, reply-to invalid, use mawin at gmx dot net homepage: http://www.geocities.com/mwinterhoff/ de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/ Read 'Art of Electronics' Horowitz/Hill before you ask. Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.

Wie viel Daten sollen denn parallel bereit liegen und welche Datenmenge muss pro Zeiteinheit transportiert werden?

Es gibt neben Dual-Port RAMs, die für das Platinen-Layout nicht gerade freundlich sind, natürlich auch noch die Möglichkeit interne Schnittstellen der Controller zu "missbrauchen" um die Kommunikation ablaufen zu lassen.

Ein Full-CAN-Controller bietet z.B. die Möglichkeit vom Programmprozessor im Kommunikationsprozessor 15 Datensätze a 8Byte (120 Byte) abzulegen, ohne dass der Kommunikationsprozessor dabei auch nur einen Befehl ausführen muss (und umgekehrt). Und das bei Übertragungsraten von bis zu 1MBit/s abzüglich Protokoll-Overhead und nur 2 Leitungen.

Daniel

.~. Daniel Schramm Phone: +49 231 6108112 Mail:daniel.schramm@gmx.de /V\ Bruehlweg 36 Mobile:+49 178 8839848 ICQ: 35816985 // \\ 44379 Dortmund Fax: +49 231 96989961 WWW: pinguin.sauerland.de /( )\ Germany ^`~'^

[Stackpointer]

Es gibt meines Wissens auch ne ganze Latte PICs mit solchen Einschränkungen.

Dazu wäre es aber von Vorteil, zu wissen, wo der Stackpointer steht, damit man die korrekte Anzahl Werte poppen kann :)

Eben.

Ich habe hier bloß mal einen Prototypen für eine Anwendung mit kooperativem Multitasking gebaut. Der "Scheduler" hat mich einen Nachmittag gekostet. Ein preemptiver Scheduler wäre wesentlich teurer gewesen.

Multitasking hat in kleinen Projekten vor allem den Vorteil, dass man sein Projekt einfach modularisieren kann. Wenn man halt ein neues Peripheriegerät pollen will, muss man sich nicht in irgendwelche Hauptschleifen reinhängen, sondern packt einfach einen neuen Task dazu. Kooperatives Multitasking hat zusätzlich den Vorteil, dass man Dinge wie '++i' tun darf, ohne sich um Mutexe und ähnlichen Kram kümmern zu müssen.

Stefan

Helmut Sennewald schrieb:

Das ganze soll ein SPS System werden.

Der Hauptprozessor arbeitet als Interpreter und liest bei jedem Zyklusbeginn die Eingangsdaten des Kommunikationsprozessors, und beim Zyklusende schreibt er die Ausgangsdaten. Es sollen Zykluszeiten von ca 1ms erreicht werden, daher soll die ganze Kommunikation ausgelagert werden.

Der Kommunikationsprozessor nimmt dann die bearbeiten E/A Daten des Hauptprozessors und verteilt diese an die verschiedenen Slaves über Can-Bus bzw. irgendeinen 2-wire BUS wie I2C

Die Idee mit dem abwechselnden Zugriff auf den SRAM denke ich ist am schnellsten und kostengünstigsten, es sollen maximal ca 2MB E/A Daten bearbeitet werden,

Als Prozessoren hatte ich an Atmel 90S8515 gedacht, da diese ein externes Speicherinterface besitzen.

mfg Andreas

Nimm lieber den mega8515. Der kann mehr als der 90S, ist besser dokumentiert und billiger.

Wahnsinn, gerade nachgesehen - den gibt's jetzt schon für 3,45 Euro. Ich hab damals für meine 90s8515 noch 7 gezahlt.

Schöne neue uC-Welt :-)

Gruß, Johannes

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required