Forum: Mikrocontroller und Digitale Elektronik HDD Fragen zu DMA, Features usw.


von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

...mal wieder etwas Nostalgie^^

Derzeit beschäftige ich mich mit IDE/ATA Festplatten,

Beitrag "HDD SD an AVR ATmega1284p Assembler Beispiele"
Beitrag "HDD Festplatte ATA IDE an AVR µC Mikrocontroller ATmega1284p Assembler - viele Fragen"

Sektoren im CHS und LBA-Modus read/write funktioniert, nur bei 2 Platten 
read nicht möglich, trotz langer Wartezeiten, Ursache unklar.

Die 512 Bytes der IDENTIFY lassen sich auch auslesen.

Fragen:

1. Bei keiner einzigen HDD war der 8-Bit Data-read/write Modus möglich,
obwohl laut Spezifikation (ATA-1...8) Features 01h möglich wäre.

Eine kleine Routine setzt alle möglichen Features-Adressen und
zeigt z.B. folgendes Resultat:

02h 03h 42h 44h 55h 66h 6Dh 82h AAh BBh C2h CCh

"01h" ist nicht dabei, also nicht implementiert



2. Wozu nutzt man den DMA-Modus gemau und wie arbeitet man mit ihm?

Danke


Bernhard

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bernhard S. schrieb:
> Bei keiner einzigen HDD war der 8-Bit Data-read/write Modus möglich,

Das ist normal, diese Betriebsart war schon immer exotisch, da sie in 
normalen PCs nie benötigt wurde. IDE-Platten kamen erst Jahre nach dem 
Ende der XTs heraus, und damit war 16-Bit-I/O etablierter Standard.

Wenn du CF-Karten im "TrueIDE"-Modus ansteuerst, wirst Du vermutlich 
andere Resultate erzielen, vielleicht auch mit einem Microdrive, falls 
Du noch irgendwo eines auftreiben kannst.

DMA-Betriebsarten wurden genutzt, um höhere Datenübertragungsraten als 
im klassischen PIO-Modus erzielen zu können. Das Interface war durch den 
Takt und die Anzahl der Taktzyklen, die ein I/O-Zugriff benötigt, auf 16 
MByte/sec limitiert.

Obendrein war die CPU bei PIO-Zugriffen recht ausgelastet; während eines 
DMA-Zugriffs konnte die CPU andere Dinge erledigen.

Der DMA-Zugriff hat nichts mit dem DMA-Controller (8237) zu tun, der im 
PC-Design vorhanden ist; dieser war für die Aufgabe viel zu langsam und 
hatte im PC letztlich nie eine andere Aufgabe als eh' schon sehr 
langsame Diskettenlaufwerksoperationen durchzuführen.

Die DMA-Betriebsarten kamen erst mit schnelleren Bussystemen als dem 
ISA-Bus in Schwung, da der ISA-Bus selbst die gleichen 
Geschwindigkeitseinschränkungen aufwies wie die IDE-Schnittstelle im 
PIO-Betrieb; mehr als 16 MByte/sec waren damit nicht übertragbar.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bernhard S. schrieb:

> 1. Bei keiner einzigen HDD war der 8-Bit Data-read/write Modus möglich,
> obwohl laut Spezifikation (ATA-1...8) Features 01h möglich wäre.

ATA heißt ja "AT attachment", d.h. es wurde der 16-Bit-AT-Bus auf die 
Platte weitergeleitet. Daher hat vermutlich nie jemand ernsthaft Bedarf 
gesehen, 8bittige Zugriffe zu implementieren.

> 2. Wozu nutzt man den DMA-Modus gemau und wie arbeitet man mit ihm?

Beim PC-AT wurde dadurch die CPU davon entlastet, die ganze Zeit auf dem 
Bus zu warten, bis sie das nächste Byte (oder Wort) von der Platte lesen 
kann. Stattdessen erledigt das der DMA-Controller, indem er der CPU 
immer kurz den Bus entzieht, wenn wieder ein Byte/Wort bereit ist.

Da aber die PC-AT-Architektur etwas verkorkst war, funktionierte der 
DMA-Controller des Mainboards nicht über den gesamten Adressraum (oder 
so ähnlich, Details habe ich vergessen). Der wurde am Ende nur für den 
Floppycontroller benutzt. Damit man alles ansprechen kann, haben die 
Platten dann Busmaster-DMA implementiert, d.h. sie haben die 
DMA-Funktion selbst erledigt.

So oder so ähnlich … ist lange her.

von c-hater (Gast)


Lesenswert?

Bernhard S. schrieb:

> 1. Bei keiner einzigen HDD war der 8-Bit Data-read/write Modus möglich,
> obwohl laut Spezifikation (ATA-1...8) Features 01h möglich wäre.

Das liegt schlicht daran, das alle PC's, mit denen eine IDE-Platte in 
der Realität zu tun bekam, schon AT's waren, also 16Bit-Transfers über 
den ISA-Bus nativ unterstützten. Kein Grund, mit diesem Kram den damals 
noch sehr teuren Firmware-ROM der HDs vollzuballern.

> 2. Wozu nutzt man den DMA-Modus gemau und wie arbeitet man mit ihm?

Man kann damit mehr als ein Wort übertragen, ohne jedes Mal eine 
längliche ISR zu beschäftigen. DMA halt. Block definieren, DMA starten, 
was anderes tun. Erst wenn der Transfer des kompletten Blocks fertig 
ist, gibt's einen Interrupt und die CPU muss sich wieder in die 
Niederungen der IO-Aktivitäten begeben.

Nützt natürlich nur was, wenn man genügend RAM für Blockgrößen hat, wo 
das Konzept zum Vorteil wird...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Da aber die PC-AT-Architektur etwas verkorkst war,

Das halte ich für die Untertreibung der Woche, wenn nicht des Monats.

von Michael U. (amiga)


Lesenswert?

Hallo,

Bernhard S. schrieb:
> 1. Bei keiner einzigen HDD war der 8-Bit Data-read/write Modus möglich,
> obwohl laut Spezifikation (ATA-1...8) Features 01h möglich wäre.

Die einzige mir persöhnlich bekannte HD, die den 8-Bit-Mode konnte:
https://stason.org/TULARC/pc/hard-drives-hdd/western-digital/WD-93028-X-20MB-3-5-HH-IDE-XT.html

Als ich mit meine MP3-Bastelei mit HD am AVR gemacht habe, habe ich 
keine HD mehr gefunden, die es konnte. Das war irgendwann um das Jahr 
2000 rum.

Bernhard S. schrieb:
> 2. Wozu nutzt man den DMA-Modus gemau und wie arbeitet man mit ihm?

Naja, eben Direct Memory Access. Der DMA-Controller des Rechners kopiert 
die Daten vom HD-Interface direkt in den Ram ohne CPU-Hilfe.
Die Realisierung bei HDs hat mich nie interessiert, weil dazu eben der 
Prozessor einen DMA-Controller haben müßte, nur dann hat man was davon 
wegen Geschwindigkeitsgewinn. Was Du jetzt nutzt, ist der PIO-Mode und 
der ist eben eine Folge einzelner IO-Zugriffe und entsprechend 
langsamer.

PS: man war ich wieder langesam... ;)

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rufus Τ. F. schrieb:
> Jörg W. schrieb:
>> Da aber die PC-AT-Architektur etwas verkorkst war,
>
> Das halte ich für die Untertreibung der Woche, wenn nicht des Monats.

:-))

von Bernhard S. (bernhard)


Lesenswert?

Ich danke Euch für die sehr interessanten und hilfreichen Antworten.

Frage zu DMA:

Könnte man einzelne Bytes in den DMA-Buffer schreiben und diese per 
write-Kommando auf die HDD schreiben?

Mir schwebt gerade ein schneller Logiktester vor den Augen...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bernhard S. schrieb:
> Könnte man einzelne Bytes in den DMA-Buffer schreiben und diese per
> write-Kommando auf die HDD schreiben?

Nein, Festplatten werden immer blockweise geschrieben (früher waren das 
auch tatsächlich noch physische Sektoren). Ein Block wird immer im 
Ganzen übertragen, denn er muss auf der Spur zuerst gelöscht und dann 
neu geschrieben werden.

Mit DMA hat das wenig zu tun.

von Michael U. (amiga)


Lesenswert?

Hallo,

ich vermute jetzt mal, er will die HD in einen DMA-Mode stzen, dann mit 
DMARQ/DMAACK usw. seine Logikdaten vom HD-Datenbus in den HD-Buffer 
befördern und dann auf die HD schreiben.
Da würden mir aber bei der Ansteuerung der Geschichte schon die Haare zu 
Berge stehen...
Bleibe ich lieber bei meiner Lösung:
http://www.avr.roehres-home.de/logikanalyzer/index.html
Nutze ich immernoch, max. 80MHz / 8Bit, 32k Speicher. :-)

Gruß aus Berlin
Michael

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Wurde IDE eigentlich irgendwann mal auf 3,3V Logik umgebaut oder läuft 
das immernoch mit 5V?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Beides, d.h. die Logikpegel erreichen oft nur 3.3V-Pegel, aber die 
verwendeten Bausteine sollten 5V-tolerant sein.

Näheres wirst Du in den entsprechenden Spezifikationen finden.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Danke, in den Specs stand das etwas verklausuliert ;)

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.