Mit 2 Microcontrollern auf einen Speicher zugreifen?

A

Andreas Sauer

Guest
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
 
Andreas Sauer wrote:

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?
Gibt es.
z.B. http://cgi.segor.de/user-cgi-bin/sidestep2.pl?foto=1&Q=dualport&M=1

MfG
 
Andreas Sauer <620@ktmlc4.de> wrote:

Giebt es dafür spezielle Ram-Speicherbausteine mit doppelt ausgeführten
Adress und Data Leitungen oder
Gibt es. Heisst Dualport-Ram und ist nicht ganz billig. Vermutlich
deshalb weil es so ein fettes Gehaeuse mit den ganzen Leitungen
braucht.

Olaf
 
Tuxfriend wrote:

[Dual Port SRAM]

Gibt es.
z.B. http://cgi.segor.de/user-cgi-bin/sidestep2.pl?foto=1&Q=dualport&M=1
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. www.ramtron.com

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
www.cypress.com MOBL-RAM an. Eine Seite parallel, die andere sequentiell mit
einem Adresszähler.

Gruß -
Henry


"Andreas Sauer" <620@ktmlc4.de> schrieb im Newsbeitrag
news:43becc9e$0$20774$9b4e6d93@newsread4.arcor-online.net...
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
 
Michael J. Schülke wrote:

(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
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:

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.

Gibt 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?
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.:
http://www.embeddedFORTH.de/scorbot.pdf
( Artikel nicht fertig, kann Fehler enthalten )
Dort ist das RAM auch Programmspeicher für den frontend-6502,
sowas vereinfacht Softwareentwicklung.

MfG JRD
 
"Andreas Sauer"

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?
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" <620@ktmlc4.de> schrieb im Newsbeitrag
news:43becc9e$0$20774$9b4e6d93@newsread4.arcor-online.net...
Hallo,

ich möchte in einem System 2 mit Microcontroller auf Ram-Speicher
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.

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
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
 
Makus Gr0n0tte wrote:
Ich empfehle einen uC der Multitasking beherrscht.
^^^^^^^^^^^^^^^^^^^

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
 
Johannes Bauer wrote:
Makus Gr0n0tte wrote:
Ich empfehle einen uC der Multitasking beherrscht.
^^^^^^^^^^^^^^^^^^^
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.
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"

Ich empfehle einen uC der Multitasking beherrscht.
^^^^^^^^^^^^^^^^^^^

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.
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.
 
Stefan Reuther wrote:

Ein nutzer-sichtbarer und manipulierbarer Stackpointer wäre von Vorteil,
wenn man den einzelnen Tasks nicht die Benutzung des Stacks verbieten will.
Richtig, daran hatte ich nicht gedacht. Welche Prozessoren bieten das
nicht an?

Einen Timerinterrupt braucht man dagegen nur, wenn man wirklich
preemptives Multitasking möchte. Kooperatives Multitasking geht auch ohne.
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
 
Makus Gr0n0tte wrote:

das ist kein echtes Multitasking. Ist wohl Definitionssache.
Ja, offenbar... zumindest würde _ich_ das, was meine CPU im Laptop
momentan veranstaltet schon als "Multitasking" bezeichnen.

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.
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" <dfnsonfsduifb@gmx.de> schrieb im Newsbeitrag
news:57q493x9ku.ln2@news.cis.dfn.de...
Richtig, daran hatte ich nicht gedacht. Welche Prozessoren bieten das
nicht an?

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.

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.

Programmfehler sind immer schlecht.

Im Endefekkt ist bei der Implementierung (zumindest sehr häufig) dennoch
nicht der Prozessor der limitierende Faktor, sondern der Programmierer.
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.
 
Andreas Sauer wrote:

Hallo,

Also einen Programmprozessor der die Daten im Sram auswertet,
und einen Kommunikationsprozessor der die Daten ein und ausliest.
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
^`~'^
 
MaWin wrote:
"Johannes Bauer" <dfnsonfsduifb@gmx.de> schrieb im Newsbeitrag
[Stackpointer]
Richtig, daran hatte ich nicht gedacht. Welche Prozessoren bieten das
nicht an?

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

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.
Dazu wäre es aber von Vorteil, zu wissen, wo der Stackpointer steht,
damit man die korrekte Anzahl Werte poppen kann :)

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.

Programmfehler sind immer schlecht.
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:
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
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
 
Andreas Sauer wrote:
Als Prozessoren hatte ich an Atmel 90S8515 gedacht
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
 

Welcome to EDABoard.com

Sponsor

Back
Top