www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ernsthafte Frage


Autor: toddoy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mal endlich etwas Zeit und beschäftige mich weiter mit meinem
alten Projekt der Festplattenansteuerung mit Atmega32.
Um einen Einstieg zu finden lese ich mit dem Commando (Identify Drive)
meine Festplattenparameter aus, soweit alles Super, bis auf dass die
richtigen Festplattenparameter aus der Ausgabe alle um 1 Word
verschoben sind.

Beispiel:

Word Nr: 000     00208   0b0000000011010000
Word Nr: 001     01114   0b0000010001011010
Word Nr: 002     16383   0b0011111111111111 // Anzahl Zylinder

      '                                             sollte eigentlich
in                                                              '
                                       der Word Nr.2 zu finden  '
                                        sein
Word Nr: 003     00000   0b0000000000000000
Word Nr: 004     00016   0b0000000000010000 // Köpfe nach Datenblatt '
'                                              in word Nr.3
Word Nr: 005     00000   0b0000000000000000
Word Nr: 006     00000   0b0000000000000000
Word Nr: 007     00063   0b0000000000111111 //sektoren richtig wäre '
    '                                             word Nr. 6
Word Nr: 008     00000   0b0000000000000000
Word Nr: 009     00000   0b0000000000000000
Word Nr: 010     00000   0b0000000000000000
Word Nr: 011     08224   0b0010000000100000

Habe ich die IDE Spezifikation falsch verstanden, oder mache ich etwas
falsch.

Hier mein Programm Listing zum auslesen (Benutze WinAvr)
void IdentifyDrive(void)
{
uint16_t dummy;
//uint16_t * ptr_eeprom = 0;
uint16_t * ptr_eeprom = 0;
uint16_t temp;
WaitNBusy(0);

SetMasterActive();
SetRegAddr(COMMAND_REG); // command Register
WriteRegister(0xec);     // identify Drive Opcode
delay2us();
SetRegAddr(DATA_REG);
eeprom_busy_wait();
  for(dummy = 0; dummy < 256 ;dummy++)
  {
  delay2us();
  eeprom_busy_wait();
  eeprom_write_word(ptr_eeprom,ReadRegister() );
  ptr_eeprom = ptr_eeprom + 1;
  }
sendstring("\n Fertig Informationen auslesen");  // Debug
};


Wäre froh, wenn ich endlich Klarheit hätte, warum die ausgelesenen
Daten um 1 Word verschoben sind.

Gruß Tobi

Autor: toddoy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat sich geklärt Timing Problem (AVR war zu schnell :=) )

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.