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
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
@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.
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.