-
        

Ergebnis 1 bis 2 von 2

Thema: SD-Karte antwortet nicht

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    23.02.2005
    Beiträge
    44

    SD-Karte antwortet nicht

    Anzeige

    Ich versuche die SD Karte zu reseten, aber diese antwortet nicht mit 1 wie sie eigentlich sollte:

    Code:
    .def temp = r16
    .def loop = r17
    
    .org 0x000
    		rjmp RESET			;bei Reset
    .org 0x002
    		rjmp EXT_INT0		;INT0
    
    RESET:
    		;----- Stack
    
    		ldi temp, low(RAMEND)			;Stackpointer
    		out SPL, temp
    
    		ldi temp, high(RAMEND)
    		out SPH, temp
    
    		;----- Kontrolllampen an Port A
    
    		ldi temp, 0xFF
    		out DDRA, temp
    
    		;----- SPI
    
    		ldi temp, 0b10110000			;Datenrichtung von PORTB
    		out DDRB, temp
    
    		ldi temp, 0b01010011			;Master setzen und Takt
    		out SPCR, temp
    
    		sbi PORTB, 4
    
    		ldi temp, 0b00000000			;SPI freigeben, Takt
    		out SPSR, temp
    
    		;----- Interrupts
    
    		ldi temp, 0b00000010
    		out DDRD, temp
    		
    		ldi temp, 0b00000011			;Interrupt Reaktionsimpuls einstellen
    		out MCUCR, temp
    
    		ldi temp, 0b01000000			;Interrupts enablen
    		out GICR, temp
    
    		sei								;Interuppts aktivieren
    
    
    IDLE:
    		rjmp idle
    
    
    EXT_INT0:
    		sbi PORTA, 0	;Led einschalten (Signal) ##################################
    		rjmp RESET_SD
    		reti
    
    
    ;---Reset-----------------------------------------------------------------------
    
    RESET_SD:
    		sbi PORTA, 1	;Led einschalten (Signal) ##################################
    		ldi temp,0xFF	;10 Bytes Zeit
    		rcall SEND_SPI
    
    		ldi temp,0xFF
    		rcall SEND_SPI
    
    		ldi temp,0xFF
    		rcall SEND_SPI
    
    		ldi temp,0xFF
    		rcall SEND_SPI
    
    		ldi temp,0xFF
    		rcall SEND_SPI
    
    		ldi temp,0xFF
    		rcall SEND_SPI
    
    		ldi temp,0xFF
    		rcall SEND_SPI
    
    		ldi temp,0xFF
    		rcall SEND_SPI
    
    		ldi temp,0xFF
    		rcall SEND_SPI
    
    		ldi temp,0xFF
    		rcall SEND_SPI
    
    		cbi PORTB, 4	;Reset Befehl -> 6 bytes
    
    		ldi temp,0x40
    		rcall SEND_SPI
    
    		ldi temp,0x00
    		rcall SEND_SPI
    
    		ldi temp,0x00
    		rcall SEND_SPI
    
    		ldi temp,0x00
    		rcall SEND_SPI
    
    		ldi temp,0x00
    		rcall SEND_SPI
    
    		ldi temp,0x95
    		rcall SEND_SPI
    
    RESET_WAIT:				;auf Antwort warten
    		sbis PINA, 7	; blinken während schleife ##########################################
    		sbi PORTA, 7
    
    		sbic PINA, 7
    		cbi PORTA, 7
    
    		ldi temp, 0xFF
    		rcall SEND_SPI
    
    		cpi temp, 0x01
    		out PORTA, temp
    
    		brne RESET_WAIT
    
    		cbi PORTA, 0	;Led ausschalten (Signal) #######################################
    		sbi PORTB, 4
    
    		ldi temp,0xFF
    		rcall SEND_SPI
    		ret
    
    
    
    SEND_SPI:		;SPI Daten senden (von temp)
    		out SPDR, temp
    SPI_WAIT:
    		sbis SPSR, SPIF
    		rjmp SPI_WAIT
    		in temp, SPDR
    		ret
    Durch die Leds, weiß ich dass er in die schleife reinläuft, aber der brne nie aktiviert wird.

    angeschlossen ist wie auf ulrich radigs seite beschrieben

    habs versucht so übersichtlich wie nur irgend möglich zu schreiben, aber verstehe nicht, wo die antwort bleibt.

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    23.02.2005
    Beiträge
    44
    um es einfacher zu machen den quellcode zu interpredieren, schreib ich mal kurz den aufbau des Programms:

    es gibt eine Methode SEND_SPI, die aus temp ein byte liest, das im SPI durchschiebt, und dann das empfangene byte in temp schreibt. Das heißt, temp ist der übergabe und rückgabe parameter

    die methode reset_sd benutzt die methode send_spi, und ruft sie jedesmal auf um ein byte zu senden oder zu empfangen. wenn empfangen werden soll, dann wird einfach 0xFF geschickt und dann temp ausgelesen

Berechtigungen

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