...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
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.
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.
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...
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.
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
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. :-))
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...
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.
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
Wurde IDE eigentlich irgendwann mal auf 3,3V Logik umgebaut oder läuft das immernoch mit 5V?
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.
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.