Forum: Mikrocontroller und Digitale Elektronik Frage zu SPI (ATmega168; AT25DF641)


von Johannes G. (Gast)


Lesenswert?

Hallo,

ich bin gerade dabei einen AT25DF641 Dataflash von Atmel mit einem 
ATmega168 anzusprechen. Soweit ja kein Problem, da die Datenblätter sehr 
leicht verständlich sind.
Nur nun habe ich ein Problem:
Bei dem AVR initalisiere ich das SPI als Master. Um nun ein Byte zu 
senden, schiebe ich das Byte in das Register SPDR.
Beim Lesen vom Dataflash, muss ich ein Opcode und die Adresse an den 
Dataflash senden. Diese schickt mir aber nun nur die Daten, wenn ich 
weiterhin ein Clock Signal anlege. Nur wie soll ich das mit dem AVR 
empfangen? Dafür müsste ich doch dann in den Slave Modus wechseln oder? 
Aber im Slave Modus sendet der AVR ja auch kein Clock Signal...
Ich hoffe ihr versteht mein Problem, ich weiß nicht wie ich es besser 
beschreiben soll...
Wenn ihr noch Fragen habt, fragt einfach, ich weiß im Moment echt nicht 
wie ich das lösen soll..

Viele Grüße,
   Johannes

von Frank K. (fchk)


Lesenswert?

SPI ist IMMER bidirektional. Du schreibst ein Byte nach SPDR, startest 
damit den Transfer, und bekommst ein Byte in SPDR zurück, wenn der 
Transfer komplett ist. Wenn Du Kommando und Adresse sendest, 
interessieren Dich die Dummy-Bytes, die das Flash sendet, nicht. Zum 
Lesen schickst Du Dummy-Bytes und bekommst Deine Daten zurück.

fchk

von Johannes G. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

kann es sein, dass das beim Dataflash dann nicht so ist?
Ich habe mal ein Bild aus dem Datenblatt angehängt... Dort sieht es 
nicht so aus wie wenn der Flash immer ein Dummybyte zurück schickt.. bzw 
ich ihm ein Dummybyte schicken muss, damit er ein weiteres Byte 
schickt..
Irgendwie verstehe ich das im Moment nicht so ganz..
Kann mir das vielleicht nochmal jemand erklären?

Vielen Dank schonmal :)
Johannes

von holger (Gast)


Lesenswert?

>Irgendwie verstehe ich das im Moment nicht so ganz..
>Kann mir das vielleicht nochmal jemand erklären?

Der Master erzeugt den Clock. Der Slave macht NICHTS von alleine.
Wenn du Daten aus dem Teil haben willst musst du Dummy Bytes schicken
um die Daten abzuholen. Das ist das ganze Geheimnis bei SPI.

von Johannes G. (Gast)


Lesenswert?

Ach so läuft das.. dankeschön ;)
Ich denk dann werde ich das vielleicht als Soft SPI lösen, dann bin ich 
da vllt etwas flexiebler ;)

von holger (Gast)


Lesenswert?

>Ich denk dann werde ich das vielleicht als Soft SPI lösen, dann bin ich
>da vllt etwas flexiebler ;)

Wie bitte? Erklär das mal!

von Johannes G. (Gast)


Lesenswert?

So bin ich an bestimmte Port Pins gebunden, und an einen bestimmten AVR 
Controller. Wenn ich das mit Soft SPI löse (Geschwindigkeit ist bei 
meiner Anwendung relativ egal), dann kann ich den Code auf jedem AVR 
verwenden und an allen Pins. So war das gemeint ;) Vom Aufwand her 
bestimmt etwas komplizierter, aber ich denke so bin ich eben etwas 
flexibler ;)

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.