mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI - keine Daten im Datenregister


Autor: Oli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich bin kurz vorm nervenzusammenbruch!;)
Ich bin schon ca. 2 volle tage dran die SPI schnittstelle zwischen einem 
master und einen slave zum laufen zu bekommen. Ich habe zwei ARM - 
LPC2148 boards von Keil.

Was auf anhieb funktionierte: master setzt den SELECT SLAVE auf LOW und 
schreibt etwas in das S0SPDR (Datenregister) zb 0x01 um es zum Slave zu 
schicken. Sobald ich dieses Register schreibe wird ein Interrupt 
ausgelöst. Man möchte es kaum glauben, der  Interrupt wurde wie gewollt 
ausgelöst. Der Slave hat diesen auch bemerkt in ging auch in die ISR 
Routine. Nun zu meinem Problem: das Datenregister beinhaltet nicht die 
daten(0x01) sonderen immer 0xFF, obwohl ich nirgendwo im code 0xFF 
übergebe( eine art DEFAULTwert)?!

Die dokumentation des LPC2148 ist auch so ziehmlich schwach in bezug auf 
SPI.

Hat jemand Ahnung, wie das protokoll von SPI aussieht bzw. wie man 
prinzipiell die kommunikation zwischen master und slave aufbaut?
Oder hat jemand einen zb Code zum LPC21XX? leider habe ich nur zum ATMEL 
etwas im forum gefunden.

gruss
  oli

Autor: Obelix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was sagt dein Oszi zur Schnittstelle?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich mich recht erinnere, funktioniert das LPC-SPI nur dann, wenn 
sämtliche 4 Pins auf SPI gesetzt werden (MISO, MOSI, SCK, SS).


Peter

Autor: Oli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Obelix,
leider habe ich ein anloges oszi, und soweit ich weis kann ich keine 
aperiodischen signale, sprich datenuebtragung, darstellen. SCLK ist aber 
vorhanden.

@ Peter Dannegger
Ja, ich hab es auch so gemacht, 3 leitungen (MOSI, MISO, SCLK 
->p0.4,p0.5,p0.6) 1 zu 1 zwischen master und slave verbunden. dann habe 
ich mir einen freien Port (zb port0.3) beim master. Dieses signal habe 
ich dann mit SSL des slaves verbunden.

Wie sollte es den eigentlich funktionieren?
Ist es so?: wenn man etwas in das S0SPSD (datenreg) schreibt , dass dann 
ein interrupt ausgelöst wird (master und slave), danach kann in der ISR 
- routine im slave aus dem Datenregister die daten ausgelesen werden.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oli wrote:

> @ Peter Dannegger
> Ja, ich hab es auch so gemacht, 3 leitungen (MOSI, MISO, SCLK


Ich sprach doch deutlich von allen 4 !

Also SS des Master einschalten und über pullup an VCC.


Peter

Autor: Oli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Peter Dannegger
ja, 3 leitung MISO, MOSI, CLK 1:1 PLUS SSL zwischen master(freier port) 
und slave(SSL), der SSL des masters bleibt doch frei oder? Wenn ich dann 
den slave ansprechen will, muss der master den "freien port" auf 
low-active setzen. korrekt?!


Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach einfach mal, was ich geschrieben hab.


Peter

Autor: Oli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter Dannegger

Sorry nochmal,
damit da nichts daneben geht, wie ich jetzt es von dir verstanden habe:



   MASTER:-SSL --------pullup VCC              SLAVE:
          -CLK --------------------------------CLK
          -MISO--------------------------------MISO
          -MOIS--------------------------------MOSI
          -Port zur Ansteuerung des SLaves-----SSL

Wie groß soll der PULLUP sein.

Nochmal danke für deine GEDULD!



Autor: Oli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:
natürlich soll MOIS -> MOSI sein

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde MISO-MOSI und MOSI-MISO anschließen.

Autor: Dieter Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich würde MISO-MOSI und MOSI-MISO anschließen.

Wird das je nach Einstellung (Master / Slave) schon intern gekreuzt oder 
muss es so gemacht werden wie holger schrieb?

Autor: Ralph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MOSI bedeutet Master Out Slave In
MISO bedeutet Master In Slave Out

Also auf keine Fall drehen !!!! MOSI muss auf MOSI


Eine SPI Verbindung muss aus 3 Signalen bestehen, das sind :

1. CLK
2. MOSI
3. MISO

Jedes weitere Signal ist optional

4. Slaveselect : wird auf LOW gelegt um den Slave auszuwählen.
Ist nur ein Master und EIN Slave am Bus, dann kann Slaveselect am Slave 
auf GND gelegt werden.Damit ist dieser Slave IMMER ausgewählt.
Die Beschaltung am Master hängt in dem Fall vom µC ab, und ist nur dann 
notwendig wenn der Slaveselect von µC in Hardware unterstüzt wird.
Ist Slaveselect am Master nur in Software möglich, das heißt das der 
User einen Port von Hand schalten muss, kann man diesen Port auch 
weglassen, bzw, anderst verwenden.

Sind mehrere Slave am Bus, muss vom Master zu jedem Slave ein 
unabhängiges Signal gelegt werden.

5. Busy : mit Busy kann der Slave den Master anhalten wenn der Slave zb 
das Datenwort noch nicht in das Schieberegister gelegt hat.



Welche dieser optionalen Signale vom µC in Hardware und welche von User 
in Software programmiert werden müssen, häng von der SPI implementierung 
im µC ab.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Ralph
> Also auf keine Fall drehen !!!! MOSI muss auf MOSI

Tatsächlich, du hast recht. Die werden quasi automatisch
gekreuzt. Ich nehme alles zurück und behaupte das Gegenteil. ;)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und da stehts ja auch eindeutig:

MISO Input/Output Master In Slave Out. The MISO signal is a 
unidirectional signal used to transfer serial data
from the slave to the master. When a device is a slave, serial data is 
output on this signal.
When a device is a master, serial data is input on this signal. When a 
slave device is not
selected, the slave drives the signal high impedance.


MOSI Input/Output Master Out Slave In. The MOSI signal is a 
unidirectional signal used to transfer serial data
from the master to the slave. When a device is a master, serial data is 
output on this signal.
When a device is a slave, serial data is input on this signal.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.