Forum: Mikrocontroller und Digitale Elektronik ATmega32 und DataFlash - keine Kommunikation möglich


von nowayback (Gast)


Lesenswert?

Guten Abend,

gleich vorweg: diese Frage habe ich zuvor im Roboternetz gepostet, 
allerdings konnte mir dort keine Antwort gegeben werden. Ich hoffe, 
unter eich findet sich jemand, der mir mit meinem Problem helfen kann.
Der Link zum Crosspost: 
http://www.roboternetz.de/phpBB2/viewtopic.php?p=443619#443619

Ich bin gerade dabei, meinen Atmega32 mit dem Atmel Dataflash AT45DB321D 
(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 
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):
1
SI - MOSI (PB5)
2
SCK - SCK (PB7)
3
RESET - VCC
4
CS - SS (PB4)
5
SO  - MISO (PB6)
6
GND - GND
7
VCC - VCC
8
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.

von holger (Gast)


Lesenswert?

>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.

Ein Spannungsregler ist ja auch so unglaublich teuer.
Vergiss den Schrott mit Diodenstabilisierung.

von Juri R. (genmutant)


Lesenswert?

Spannungsregler auf 3.3V ist angeschlossen, 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:
1
PORTB |= (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7); 
2
DDRB |= (1<<DDB5) | (1<<DDB7) | (1<<DDB4);
3
DDRB &= ~(1<<DDB6);
4
5
SPSR = (1<<SPI2X);
6
SPCR = (1<<SPE) | (1<<MSTR) | (1<<CPHA) | (1<<CPOL);

Für weitere Hilfe wäre ich sehr dankbar!
Mit freundlichen Grüßen,
Juri

von nowayback (Gast)


Lesenswert?

Das Entfernen der Pullup-Widerstände brachte auch keinen Erfolg, nun 
liegt MISO ständig auf Ground.

Kann mir denn wirklich keiner helfen?

von Michael U. (amiga)


Lesenswert?

Hallo,

Juri R. schrieb:

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

Ich habe gerade sowohl in meiner alten ASM-Source als auch in der 
C-Source nachgeschaut: bei mir läuft der AT45DB081D als auch der 
AT45DB161D im SPI-Mode 0, also ohne CPHA und CPOL.
Ansonsten sind die Dinger sehr pflegeleicht.

Gruß aus Berlin
Michael

von Juri R. (genmutant)


Lesenswert?

Whoooow super!
Das scheint die Lösung gewesen zu sein!
Vielen, vielen Dank!

Wieso steht im Datenblatt Mode 3 kompatibel -.-
Naja völlig egal, es scheint jetzt zu funzen, jedenfalls konnte ich die 
ID auslesen. Der Rest wird dann früher oder später auch noch funzen :)

Nochmal vielen Dank,
Juri

von Michael U. (amiga)


Lesenswert?

Hallo,

fein, wenn er sich jetzt meldet. :)
Im Datenblatt steht Mode 0 und Mode 3 hmmm....
Vermutlich ist das Timing irgendwo an der Grenze. Meine haben jedenfalls 
im Mode 0 noch keine Probleme gemacht (mehrere im Einsatz).

Falls Du die Pagesize umschalten willst: das klappt nicht unbedingt beim 
ersten mal (steht auch im Datenblatt).
Ich habe da immer eine kurze Routine mit UART benutzt, das Statusbyte 
über UART ausgegeben und das Kommando gesetzt.
Dann Strom weg und wieder ran. Wenn er umgeschaltet war ok, sonst eben 
nochmal Strom weg usw.

Mir ist die Pagesize als 2er Potenz lieber, rechnet sich irgendwie 
besser. ;-)

Gruß aus Berlin
Michael

von Juri R. (genmutant)


Lesenswert?

Hast du vielleicht noch einen C-Code zum Lesen von einem Byte aus dem 
Flash (Buffer)? Das will irgendwie nicht klappen -.-
Egal ob ich jetzt zusätzliche Don't Cares sende vor dem Abfragen oder 
nicht. Verschiedene OP-Codes hab ich auch schon ausprobiert (es gibt 
laut Datenblatt 2).

Viele Grüße,
Juri

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.