Hallo, ich bin mittlerweile etwas weitergekommen bei meinen Problemchen von gestern. Wie gesagt ich möchte mit einem Mikrocontroller (MC9S12XF512) ein EEPROM (M95080) über SPI ansteuern. Hier die Links zu den Datenblättern: http://www.mikrocontroller.net/attachment/97308/MC9S12XF512.pdf http://www.mikrocontroller.net/attachment/97306/EEPROM.pdf Im Prinzip ist mir der Ablauf jetzt klar. Ich muss eigentlich nichts anderes machen, als die Kontrollregister SPICR1 und SPICR2 sowie die Baudrate in SPIBR geeignet einstellen. Danach kann ich entweder, sobald im Statusregister SPISR das Bit SPIF gleich 1 ist das Datenregister SPIDR auslesen (Receive), oder sobald im Statusregister SPISR das Bit SPTEF gleich 1 ist in das Datenregister SPIDR schreiben (Transmit). Die Datenübertragung an sich übernimmt dann der Mikrocontroller automatisch, sprich ich muss/kann mich z.B. nicht um das Setzen von SS kümmern. Jetzt hab ich nur ein Problem: Laut Mikrocontrollerdatenblatt S.938 f. umfasst eine Datenübertragung entweder 8 oder 16 Bits (je nach gewählter Einstellung im Kontrollregister SPICR2 Bit7). Im Datenblatt des EEPROMS auf S.16 ist der erforderliche Ablauf zum Lesen des EEPROMs beschrieben. Hier steht, dass auf dein 8 Bit langen Befehl READ eine 16 Bit lange Adresse des zu lesenden Feldes folgen muss, woraufhin der Inhalt dieses Feldes übertragen wird. Sprich die Datenübertragung muss insgesamt mindestens 32 Bit lang sein. Der Mikrocontroller bietet mir aber nur max 16 Bit an. Ich kann das ja schlecht aufteilen, da der Mikrocontroller nach 16 Bit ja die Übertragung beendet und SS auf High zieht, oder??? Vielleicht ist es mir ja heute gelungen, mich ein wenig präziser auszudrücken, sodass sich jemand meiner erbarmt und Hilfe anbietet. Danke!
Mach das, was das Datenblatt sagt, sende erst 8 bit Befehl, stelle dann schnellstmöglich um auf 16 bit und sende dem Ding seine Adresse. Ader die Adresse auf 2 Anläufe, könnte je nach Protokoll möglich sein, kann aber auch Datenmüll produzieren.
Mücke schrieb: > Ich kann das ja schlecht aufteilen, > da der Mikrocontroller nach 16 Bit ja die > Übertragung beendet und SS auf High zieht, oder??? Dann nimmm doch die SS-Leitung selber in die Hand. Das ist die übliche Vorgehensweise beim SPI-Master. Denn es könnten ja auch 2 oder mehr SS-Leitungen für mehrere SPI-Devices am Bus angeschlossen sein.... :-o
Philipp Bigott schrieb: > kann aber auch Datenmüll produzieren. Das denke ich auch, denn auf S. 16 im DB dess EEPROM steht: "The Read Cycle is tetermined by driving the Chip Select High". Und das passiert ja auch.
Lothar Miller schrieb: > Dann nimmm doch die SS-Leitung selber in die Hand. Das ist die übliche > Vorgehensweise beim SPI-Master. Soweit ich es im Datenblatt des Mikrocontrollers richtig verstanden habe, funktioniert das leider nicht. Zumindest wüsste ich nicht wie. Denn wenn ich SPI über das Kontrollregister aktiviere, liegen die Pins ja nicht mehr in meiner Hand.
Nach ca. 30 Sekunden Suche im Datenblatt habe ich den folgenden Satz entdeckt: "If the SPI is in master mode and MODFEN is cleared, then the SS port pin is not used by the SPI."
Mücke schrieb: >> Dann nimmm doch die SS-Leitung selber in die Hand. Das ist die übliche >> Vorgehensweise beim SPI-Master. Ah ok, müsste doch gehen. Ich werds mal so versuchen. Falls es nicht klappt, meld ich mich wieder mit Code. Danke!
hm, also irgendetwas klappt nicht. Als Ergebnis bekomme ich nach dem entsprechenden Tastendruck Wert = 0 und nicht wie erhofft Wert = FF (wie es im Datenblatt steht auf S.18 steht). Ich habe mich auch schon an den Befehl fürs schreiben gemacht, aber auch nach dem Schreiben bleibt "Wert" auf 0. Ich habe auch schon ein paar delays eingefügt, aber sicher bin ich mir da nicht. Und die Werte, die im Datenblatt angegeben sind, kann ich leider nicht wirklich zuordnen. Wär echt super, wenn ihr über meinen Code drüberschauen könntet. Bin wie gesagt noch ziemlich Anfänger und weiß nicht weiter. Danke!!!
InitSPI() wird natürlich auch schon zu Beginn der main aufgerufen
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.