ATmega32 und DataFlash - keine Kommunikation möglich

Gast #1276880
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.
Gast #1276905
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.
#1278748
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
#1279234
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
#1279296
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
#1279317
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
#1280872
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren