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
@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.
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
@ 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?!
@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!
> 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?
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.
@ 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. ;)
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.