PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATmega32 und DataFlash - keine Kommunikation möglich



nowayback
25.05.2009, 22:07
Guten Abend,

ich bin gerade dabei, meinen Atmega32 mit dem Atmel Dataflash AT45DB321D (Datenblatt (http://www.atmel.com/dyn/resources/prod_documents/doc3597.pdf)) zu verbinden, um auf eine größere Sinus-Tabelle zugreifen zu können.
Den Code habe ich von dieser Seite (http://www.siwawi.arubi.uni-kl.de/avr_projects/#bf_app) übernommen.
Allerdings ist der Source nicht mit meinem Atmega32 pinkompatibel, deswegen habe ich hier (http://paste2.org/p/224984) die Zeilen 76 und 77 angepasst und hier (http://paste2.org/p/224985) die Zeilen 93-95 entsprechend abgeändert.

Hier meine Verkabelung (Flash - µC):

SI - MOSI (PB5)
SCK - SCK (PB7)
RESET - VCC
CS - SS (PB4)
SO - MISO (PB6)
GND - GND
VCC - VCC
WP - VCC
Natürlich ist VCC (sowie Reset und WP) nicht direkt mit den 5 Volt verbunden, sondern indirekt über 2 Leuchtdioden. So kommen nur ca. 3,5V am Flash an.

Leider klappt die Verbindung nicht.
Ich habe zwar mit einem Oszilloskop ausmessen können, dass SCK und MOSI ordnungsgemäß funktionieren.
Allerdings antwortet der Flash nicht; MISO ist stets auf GND.
Somit bin ich nicht einmal in der Lage, die ID bzw. den Status auszulesen.
Es fließt ungefähr ein Strom von ~1mA über VCC und die LEDs zum Flash.

Für jede Hilfe bin ich dankbar, mit meinem Latein bin ich nach mehrtägiger Fehlersuche am Ende.

nowayback
26.05.2009, 10:12
Also ich habe heute einen anderen Flash ausprobiert, wieder keine Antwort von ihm.
Der Flash kann also nicht kaputt sein.

nowayback
28.05.2009, 16:28
Die LEDs wurden durch einen 3.3V-Schaltregler ersetzt, als Output krieg ich allerdings nur durchgehend high.
Irgendwelche weiteren Ideen?
Vielleicht sind die Ports oder internen Pull-Ups falsch?
Im Moment sind sie so eingestellt:


PORTB |= (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7);
DDRB |= (1<<DDB5) | (1<<DDB7) | (1<<DDB4);
DDRB &= ~(1<<DDB6);

SPSR = (1<<SPI2X);
SPCR = (1<<SPE) | (1<<MSTR) | (1<<CPHA) | (1<<CPOL);


Für weitere Hilfe wäre ich sehr dankbar!

nowayback
28.05.2009, 20:25
Das Problem wurde gelöst.
Für alle, die einmal das selbe Problem haben:
Hardware-SPI auf Level 0 setzen, das geht durch folgende Zeilen


SPSR = (1<<SPI2X);
SPCR = (1<<SPE) | (1<<MSTR) | (0<<CPHA) | (0<<CPOL);