|
|||||||
| Hinweise |
Wie greife ich direkt auf die HDD zu?
Dieses Thema wurde 5 mal beantwortet und 3023 x angesehen.
![]() |
|
|
Themen-Optionen |
|
|
#1 |
|
Könner
Registriert seit: 01.2007
Ort: Halle
Beiträge: 68
|
Folgendes gilt fuer P-ATA HDD und Compactflash Karten, da diese auch AT-A implementieren. AT Festplatten haben zumeist ein ausreichendes Subset der folgenden features.
Ich moechte mich erstmal auf den PIO 0 Modus beschraenken, weil der am einfachsten zu nutzen ist. Der Anschluss der Festplatte ist von der Art her wie eine Verlaengerung eines Systembusses. Man benoetigt von dem 40 Anschluessen nicht alle, sondern: 1 Reset 2 Ground 3 - 18 Data Bus wobei die Zuordnung immer abwechselnd ist: 7,8,6,9,5,10 usw. Dann benoetigt man zur Adressierung Pin 35,33,36 - Adressbits 0 bis 2. und Pins 37,38 CS1FX,CS3FX fuer den Chip Select 0 und 1 Zum Lesen und Schreiben gibt es noch die Read DIOR Pin 25 bzw. Write DIOW Pin 23 Leitung. Fuer 16 Bit Adressierung muss man weiterhin Pin 32 IOCS16 auf aktiv ziehen Das macht man am besten standardmaessig. Weitere Pins werden fuer PIO 0 nicht benoetigt, zu beachten gilt, dass CS1FX, CS3FX, IOCS16, RESET, DIOR, DIOW low aktiv sind. Softwaremaessig beginnt es zuerst damit, das Laufwerk zu resetten. Dabei muss /RES fuer mindestens 25 Mikrosekunden auf aktiv gehalten werden. Danach fragt man den Laufwerksstatus ab und das ist das erste mal, wo man auf ein Register in der HDD zugreift. Das Status Register ist im Command Control Block also CS1FX Register 0 beim Lesen. Ein Lesezugriff laeuft so ab: Adresse anlegen, in dem Fall 0 DIOR aktivieren Daten lesen DIOR deaktivieren gleich analog ein Schreibzugriff auf ein Register der HDD: Datenports des IO Bausteins zur HDD auf Ausgang setzen Adresse anlegen DIOW aktivieren Datum anlegen DIOW deaktivieren (Datum wird uebernommen) Datenports des IO Bausteins zur HDD auf Eingang setzen Ok wenn man das Statusregister nach Reset gelesen hat kann man die Bits auswerten: Bits 7 BSY Busy 6 DRDY Drive Ready 3 DRQ Data request sind die wichtigsten. Nach Reset wartet man bis BSY inaktiv geht. Folgende Zugriffe gehen alle auf CS1FX. Laufwerk identifizieren: Bevor man ein Kommando absetzt muss man warten, bis die HDD Ready ist, dazu liest man davor das Status Register aus und prueft ob DRDY gesetzt ist. Die Identifizierung einer HDD laeuft so ab, dass man einen virtuellen Sektor a 512 Byte liest, in dem die HDD ihre Daten mitteilt. Dazu setzt man im Kommandoregister $07 den Befehlscode $ec. Dann wartet man bis im Statusregister BSY ausgeht. Um die Daten nun zu lesen fuehrt man einen Transfer von 512 Byte Sektordaten durch. Das laeuft immer nach folgendem Schema ab: Man wartet bis im Statusregister BSY = 0 und DRQ = 1 ist. Danach fuehrt man 256 aufeinanderfolgende 16 Bit Lesezugriffe auf Adresse 0 aus. (Sector schreiben geht analog) In dem Identifizierungsdaten gibt es nur wenige wirklich wichtige Daten: Byte Offset 2,3 Cylinder low,high 6 Heads 12 Sectors 114 bis 117 Kapazitaet in Sektoren - nur bei LBA 99 Bit 1 - LBA Support ja / nein Mit LBA werden die Sektoren sequentiell durchnummeriert. Im folgenden nehme ich an, dass die HDD LBA supportet, ca. ab 500 MB Kapazitaet sollte sie das koennen. Einen Sektor lesen: Man wartet bis DRDY gesetzt ist. Dann schreibt man einen 1 in das Sektorcount Register 3. Dann schreibt man eine 28 bittige Sektornummer in Register 3 bis 6 beginnend mit dem LSB. Nun schreibt man das Sektor lesen Kommando $20 in das Kommandoregister 7 und wartet danach bis BSY ausgeht. Nun kann man wie oben beschrieben die Sektordaten transferieren. Einen Sektor schreiben geht analog, nur dass man Kommandocode $30 verwenden muss. Damit hat man schon die komplette Basisfunktionalitaet um eine Festplatte zu lesen und zu schreiben. Um auf einen Rutsch mehrere Sektoren zu lesen benutzt setzt man Sektorcount auf einen hoehere Zahl, 0 entspricht 256 Sektoren. Nach dem Transfer eines 512 Byte Buffers muss man warten bis DRQ wieder aktiv geht bis man den naechsten Sektor transferiert. LBA 48 ist auch sehr einfach zu nutzen, man muss ein anderes Kommando zum lesen und zu schreiben von Sektoren benutzen: $24 bzw $34. Dann sind die LBA und das Sektorcountregister 2 Byte FIFOs. Dabei werden die highest 4 Bits der LBA 28 Adressierung nichtmehr in Register 6 geschrieben, sondern es wird nurnoch 3,4,5 benutzt. Zuerst werden Bits 24 bis 47 geschrieben, dann 0 bis 23. Das nun 16 bittige Sektorcountregister hat den Vorteil, dass man gleich noch mehr Sektoren auf ein Kommando transferieren kann. Geändert von elianda (05.01.2007 um 12:42 Uhr) Grund: kleine Rechtschreibkorrektur |
|
|
|
|
|
#2 |
|
Semi Profi
Registriert seit: 10.2006
Ort: Fulda
Beiträge: 235
|
Um was gehts denn hier genau?!
|
|
|
|
|
|
#3 |
|
EffizienzGuru
Admin in Rente Registriert seit: 10.2006
Ort: HAL / SK
Beiträge: 6.238
|
Um was es hier geht, steht im Threadtitel.
Was ich mich frage, was man damit erreicht, wo der Sinn der Aktion besteht. Kann uns der Threadersteller vielleicht dazu noch ein paar Infos zukommen lassen?
__________________
|
|
|
|
|
|
#4 |
|
Semi Profi
Registriert seit: 10.2006
Ort: Fulda
Beiträge: 235
|
Ich hab auch mehr auf den Sinn angespielt... -.-
|
|
|
|
|
|
#5 |
|
Administrator in Rente
Bughunter Registriert seit: 09.2006
Ort: Salzburg (Österreich)
Beiträge: 3.563
|
Wo hast du die Festplatte eigentlich angeschlossen bzw. womit steuerst du sie an?
__________________
Früher im Sandkasten war das alles viel einfacher:
Da gabs was mit der Schüppe auf die Fresse ... und gut wars - aber Heute? Werd auch du ein Guru Geändert von buyman (05.01.2007 um 13:31 Uhr) Grund: Kleiner Zustatz |
|
|
|
|
|
#6 |
|
Könner
Registriert seit: 01.2007
Ort: Halle
Beiträge: 68
|
Naja ich wollte mal aufzeigen, dass es nahezu trivial einfach ist auf eine P-ATA Festplatte direkt zuzugreifen. Bei aktueller PC Hardware kommt man garnichtmehr so direkt heran, da der IDE-Controller dazwischen ist.
Zum ansteuern reicht irgendein digitaler I/O Baustein mit TTL kompatiblen Ausgaengen. Theoretisch geht es auch mit dem LPT Port, nur da hat einer zuwenig Pins. Selbst verwende ich den 8255 von Intel, das ist sozusagen die Gebrauchskartoffel der digital I/O Bausteine. Der Chip bietet 24 Bit, deren Datenrichtung man in 8 Bit Bloecken waehlen kann. Der ist an einem C64 oder C128, da diese Systeme die beste Dokumentation ueberhaupt bieten. |
|
|
|
![]() |
| Lesezeichen |
| Themen-Optionen | |
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 Uhr.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40














