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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.