-         

Ergebnis 1 bis 5 von 5

Thema: Festplatte + ATMega => Resetproblem

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    04.11.2005
    Ort
    Hamburg
    Alter
    32
    Beiträge
    42

    Festplatte + ATMega => Resetproblem

    Anzeige

    Ich bin grade dabei mir den Yampp-Mp3 Player zu bauen (http://www.yampp.com

    Mit nem CD-Laufwerk läuft der auch soweit, nur mit ner Festplatte macht er Probleme.

    Zu aller erst schreib ich 0x06 ins Command-Register, warte dann 40ms und schreibe anschließend 0x00 hinein (so wie's in den ATA-3 Spezifikationen steht).
    Wenn ich nun das Error-Register auslese erhalte ich immer 0x04, was bedeutet, das der Befehl ungültig ist oder ein anderer Fehler aufgetreten ist.

    Code:
    //----------------------------------------------------------------------------
    // ATAPI Reset device
    //----------------------------------------------------------------------------
    void ATA_SW_Reset2(void)
    {
    u08 i=10;
    
    	
    	WriteBYTE(0x17, 0x04);	// ATAPI Soft Reset command
    	delayms(40);
    	WriteBYTE(0x17,0x02);
    	delayms(500);
    	while(CheckBusy() && i)
    		i--;
    		
    }
    
    //----------------------------------------------------------------------------
    // Init ATA
    //----------------------------------------------------------------------------
    
    u08 set_drive(u08 drive)
    {
      	WriteBYTE(CMD_A | CMD_DEV_HEAD, drive);	// Set Drive/Head register
    	delayms(10);
    	ATA_SW_Reset2();						// Reset drive
    
    
    
    	DiskErr();
    	/*
    	if( ReadBYTE(CMD_A | CMD_SECT_CNT) == 1 && ReadBYTE(CMD_A | CMD_SECT_NUM) == 1 &&		// check ATAPI signature
    	    ReadBYTE(CMD_A | CMD_CYL_LOW) == 0x14 && ReadBYTE(CMD_A | CMD_CYL_HIGH) == 0xEB )
    			return(1);
    	else
    	{
    		printf("\nWrong ATAPI Signature\nCMD_SECT_CNT: \t %x\nCMD_SECT_NUM: \t %x\nCMD_CYL_LOW: \t %x\nCMD_CYL_HIGH: \t %x\n",ReadBYTE(CMD_A | CMD_SECT_CNT),ReadBYTE(CMD_A | CMD_SECT_NUM),ReadBYTE(CMD_A | CMD_CYL_LOW),ReadBYTE(CMD_A | CMD_CYL_HIGH));
    		return(0);
    	}*/
    	return 0;
    			
    }
    
    
    u08 ATA_Init(void)
    {
    /*
    	if( set_drive(DH_CHS0) )	// try Drive 0 (MASTER)
    	{
    		printf("\nMaster Drive\n");
    		return(0);
    	}
    	*/
    	if( set_drive(DH_CHS1) )	// try Drive 1 (SLAVE)
    	{
    		printf("\nSlave Drive\n");
    		return(0);
    	}
    	return(1);
    }
    Und wie gesagt, wenn ich n CD-Laufwerk anschließ läuft das ohne Probleme (mit der Ausnahme, das ich beim Reset 0x06 auf 0x08 ändern muss).

    Hatte irgendwer schon mal n ähnliches Problem oder weiß eine Lösung?


    Achja die Platte ist eine Maxtor Diamond Max Plus 8 40GB formatiert mit FAT32 4kb-Cluster.
    Läuft am PC ohne Probleme.

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    04.11.2005
    Ort
    Hamburg
    Alter
    32
    Beiträge
    42
    40 Leute lesen dies Thema und keiner hat ne Idee?!
    Kann doch nicht angehen,das keine von euch bis jetzt versucht hat ne Festplatte am AVR zum laufen zu bekommen...

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Kann auch sein das noch keiner der 40 diesen Fehler hatte
    Gruß
    Ratber

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2004
    Ort
    In der Nähe von Esslingen am Neckar
    Beiträge
    706
    Hi,
    Kann doch nicht angehen,das keine von euch bis jetzt versucht hat ne Festplatte am AVR zum laufen zu bekommen...
    kann schon sein!!!
    Gruß Michi

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    04.11.2005
    Ort
    Hamburg
    Alter
    32
    Beiträge
    42
    Hab jetzt gefunden warum man bei den Maxtorplatten kein Software-Reset machen kann:

    Der Befehl wird nicht unterstüzt

    (Nur für den Fall das irgendwann noch jemand das selbe Problem hat)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •