Forum: Mikrocontroller und Digitale Elektronik Ist eine Kollision zwischen I/O-Bereich und Speicherbereich möglich?


von Rolf F. (Firma: G.) (benutzername0)


Lesenswert?

Können Bereiche im Speicherraum und im I/O-Raum kolliedieren?
Speziell interessiert mich das für Bausteine am ISA-Bus unter x86, aber 
auch generell, für andere Plattformen.

von Max D. (max_d)


Lesenswert?

Es gibt Milliarden verschiedener Systeme, irgendeines wird schon 
kollidieren....

von uwe (Gast)


Lesenswert?

>Speziell interessiert mich das für Bausteine am ISA-Bus unter x86
ISA hat extra Leitungen für IO Operationen: /IOR /IOW
Für Speicher hat es /MEMR und /MEMW
Da kann nichts kollidieren außer man will es und baut seine ISA Karte 
halt so, daß der Adressdecoder bestimmte bereiche überlappen läßt.

von Thomas K. (muetze1)


Lesenswert?

Und selbst die CPU hat dafür extra Befehle um halt gezielt einen I/O 
oder Speicherzugriff zu machen. Zumindest bei x86

Es gibt dann ja noch die Virtualisierung und das Speichermapping von I/O 
Ports, aber das kam wimre erst mit dem PCI Bus.

von Rolf F. (Firma: G.) (benutzername0)


Lesenswert?

Aha, danke für die Antworten.
Bei vielen Mikrocontrollern gilt ja Speicherraum = I/O-Raum; da liegen 
Speicheradressbereiche und Portbereiche nebeneinander.

Nun bin ich bei der Fehlersuche zu einem PC/104-Board, bei dem einiges 
am ISA-Bus im gleichen Bereich ist wie ein "PCI Express Root Complex" in 
der Memory MAP (im Manual zu dem Board).

von SeDa (Gast)


Lesenswert?

Ich glaube du mixt da Harvard und von Neumann Architektur.

von Amateur (Gast)


Lesenswert?

Die Intel-PC-Linie hat schon von Anfang an eigene Select-Leitungen für 
Speicher- und Peripheriezugriffe.

Schon zu Zeiten von 8080 oder Z80 und früher war das Usus. Ist ja auch 
logisch, da diese im Allgemeinen auch andere Zugriffsregeln und Zeiten 
haben. Am Anfang ging es darum den Speicher maximal schnell 
anzusprechen, wobei die externen Bausteine schon bald nicht mehr 
mithalten konnten. Schon sehr bald wurde das feiner Graduiert, um ja 
nach Adresse unterschiedliche Zugriffszeiten etablieren zu können. Am 
Anfang waren das RAM (schnell) und EPROM (langsam).

Natürlich hatten beide auch "eigene" Adressräume. Also widersprachen 
sich die Speicheradresse 0 und die Peripherieadresse 0 nicht.

von Lukas T. (tapy)


Lesenswert?

Max D. schrieb:
> Es gibt Milliarden verschiedener Systeme, irgendeines wird schon
> kollidieren....

OT aber lustig:
Ein Aldi-PC von ~08 wurde mir mit der Fehlerbeschreibung "Keine Töne" 
überantwortet. Als letztes wurde "nichts gemacht" - außer einem 
RAM-Upgrade, wie ich später erfuhr.

RAM voll (4 GB): Soundchip nicht ansprechbar. Mit drei oder zwei GB 
gings.
Ich tippte hier zumindest auf ein Addressierungsproblem.

Ich habe (zu meiner Schande gestanden) eine ganze Weile gesucht.

von Noch einer (Gast)


Lesenswert?

Augenblick mal -- unter ISA war das doch ein furchtbares Kuddelmuddel.

Die Karten hatten doch für Daten, und auch Befehle, Speicher in den 
Bereich A0000 - FFFFF eingeblendet. Daneben gab es Programme, die in den 
ungenutzten ISA-Bereich Hauptspeicher für TSRs einblendeten. Ergebniss 
waren abstruse Fehler, bei denen die Daten nur im Prozessorcache, aber 
nicht auf der Karte landeten...

Wenn du dich damit wieder beschäftigen musst... Mein herzliches Beileid!

von Amateur (Gast)


Lesenswert?

>RAM voll (4 GB): Soundchip nicht ansprechbar. Mit drei oder zwei GB
>gings.
>Ich tippte hier zumindest auf ein Addressierungsproblem.

Wahrscheinlich wurde eine ältere Karte verwendet, die, als sie gebaut 
wurde, niemals von 4GByte geträumt hatte. Um die schnellen 
Speicherzugriffsmöglichkeiten zu nutzen - schneller als I/O - hat diese 
ihren eigenen Speicher, für den Treiber sichtbar, in den damals 
"ungenutzten" Speicherbereich, oberhalb von 3GByte, eingeblendet.
Aus diesem Grunde gehe ich auch nicht von einer Speicher <-> 
I/O-Kollision aus, sondern von einer Speicher <-> 
Speicher-Doppelbelegung.

von michael_ (Gast)


Lesenswert?

Rolf F. schrieb:
> Nun bin ich bei der Fehlersuche zu einem PC/104-Board, bei dem einiges
> am ISA-Bus im gleichen Bereich ist wie ein "PCI Express Root Complex" in
> der Memory MAP (im Manual zu dem Board).

Kann man da nicht im BIOS bestimmte Bereiche ausblenden?
Was für ein BS läuft da?
Mindestens unter DOS/W98 konnte das per Initialisierung gemacht werden.

von Georg A. (georga)


Lesenswert?

Aber 2008 gab es schon laaaange das Plug&Play-Konzept, das mit PCI 
eingeführt wurde. Da wird die Startadresse der PCI-Karten erst vom Bios 
anhand aller benötigten MemIO-Bereiche ausgewürfelt und der Karte via 
Config-Space in den Basis-Adress-Registern (BAR*) mitgeteilt. 
Normalerweise ändert sich dieses Mapping bei unveränderter Peripherie 
auch nicht, wenn sich die RAM-Grösse ändert. Das Bios versucht schon 
generell, das "von hinten" her aufzubauen, sodass immer möglichst viel 
RAM übrigbleibt.

Ich habe eher den Verdacht, dass der Treiber ein Problem damit hat, dass 
die DMA-Adressen >2GB sein können. Wenn der Programmierer gepennt hat, 
wird das als negativ und damit evtl. als Fehler bei der 
DMA-Bereich-Allozierung interpretiert.

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
Noch kein Account? Hier anmelden.