2x SPI ?

Hallo in die Runde,

bei meinem aktuellen Projekt möchte ich 2 Shields via SPI an das Board ankoppeln. Es geht mir erstmal um die generelle allgemeine Beschreibung/Erklärung.

Bei meinem Projekt nutze ich einen Teensy 3.6, ein TFT mit RA8875 und einen nrf24.

Das RA8875- Display ist etwas eigen was SPI mit weiteren Geräten angeht- daher möchte ich separate PINs nutzen.

Bei mir benutzt die nrf lib doch schon eigene Pins

Das RA8875- Display ist etwas eigen was SPI mit weiteren Geräten angeht-

Aha!

Ich bin da ja zu 90% Laie... aber irgendwie stört der RA8875 die SPI- Kommunikation, weil da wohl ein Tri-State-Buffer fehlt.

Im Moment hab ich auch nrf24 und TFT an den selben SPI- PINs- das TFT läuft damit super. Mit dem nrf24 bekomme ich aber keine Kommunikation zustande- auch nicht, wenn ich einen Sketch schreibe, der sich auf das wesentliche für den nrf24 beschränkt und so auf einem nano sauber läuft.

Zumindest ist mein Verdacht, dass tatsächlich der RA8875 die Kommunikation stört.

Habe meinen Beitrag schon geändert....

Ja- das kenne ich- wobei es aber schon 2 Jahre alt ist- zum damaligen Zeitpunkt konnte der Teensy wohl nicht wirklich die 3 verschiedenen SPI- PINs... dann bin ich mal über die Lib "SPIN" gestolpert: GitHub - KurtE/SPIN: SPIn - Virtual class for Multiple SPI Busses - Teensy 3.5 beta

Aber da tue ich mir auch sehr schwer es zu verstehen :frowning: :-/

Dafür kann ich aber ganz verzwickte Abläufe ohne delays schreiben- falls da mal jemand Bedarf hat... Auch Berechnungen für Sonnenaufgang/Sonnenuntergang und sowas kann ich ganz gut :slight_smile: nur die C/C++ Sprache ist für mich schwierig :-/

Ich stell mir das mit meinem Halbwissen eigentlich so vor:

Ich kopiere die SPI- library und benne einfach alle "SPI" in SPI1" um, ändere die in der lib definerten PINs und binde dann beide lib in meinem Sketch ein...

Würde das so einfach gehen?

Spin_Print_Pin_Info.ino spuckt das aus:

Spin - print processor SPI Pin information
Teensy 3.1/[color=blue]3.2[/color] - 34 pins

Serial pin information for BUSS 0
2: CS0-0
6: CS0-0
7: MOSI
8: MISO
9: CS0-0
10: CS0-0
11: MOSI
12: MISO
13: SCK
14: SCK
15: CS0-0
20: CS0-0
21: CS0-0
22: CS0-0
23: CS0-0
*** End SPIN - Enter anything to repeat ***

Müßte das Objekt dann nicht SPIN heißen, bei Dir (Teensy 3.6) wohl auch SPIN1 und SPIN2?

Ja, aber jetzt weiß ich ja nur welche PINs ich nehmen kann- alternativ... aber nichts zusätzlich, oder?

MaHa76:
Ich stell mir das mit meinem Halbwissen eigentlich so vor:

Ich kopiere die SPI- library und benne einfach alle "SPI" in SPI1" um, ändere die in der lib definerten PINs und binde dann beide lib in meinem Sketch ein...

Würde das so einfach gehen?

Beim Teensy 3.6 sollte es eigentlich schon SPI, SPI1 und SPI2 geben. Die werden ganz unten in SPI.h angelegt

extern SPIClass SPI;
#if defined(__MKL26Z64__)
extern SPIClass SPI1;
#endif
#if defined(__MK64FX512__) || defined(__MK66FX1M0__)
extern SPIClass SPI1;
extern SPIClass SPI2;
#endif

Benutzen kannst du (mindestens) die hier beschrifteten Pins
https://www.pjrc.com/teensy/pinout.html

Die fett gedruckten sind die Defaultwerte, also z.B. Pin 0 ist der MOSI von SPI1. Die grauen sind Alternativen, also z.B. MOSI von SPI1 auf Pin 21.

Also binde ich nur die SPI- lib ein und definiere dann die PINs für die beiden Geräte- sinngemäß:

#define MISO_nrf24 13
.
.
.

#deine MISO_RA8875 21
.
.
.

wie gesagt nur sinngemäß- kann es heute Abend mal mit den richtigen PINs komplett machen...

MaHa76:
Also binde ich nur die SPI- lib ein und definiere dann die PINs für die

Nein, wozu ?

Lies die Doku
https://www.pjrc.com/teensy/td_libs_SPI.html

insbesondere "Alternate SPI pins"

The main SPI pins are enabled by default. SPI pins can be moved to their alternate position with SPI.setMOSI(pin), SPI.setMISO(pin), and SPI.setSCK(pin). You can move all of them, or just the ones that conflict, as you prefer. The pin must be the actual alternate pin supported by the hardware, see the table above; you can't just assign any random pin.

Doch doch... ich hab es gelesen... aber ich hab es so verstanden, dass wenn die org. SPI Pins durch ein Shield schon anderweitig belegt sind, dass ich dann die komplette SPI- Kommunikation auf die anderen PINs umziehen kann... aber nicht, dass ich die parallel für verschiedene Shields für SPI nutzen kann. Sprachen sind generell nicht meine Stärke :slight_smile: egal ob C++ oder englisch - sorry...

Warum hängst du nicht das inkompatible Ding z.B. an SPI und alles andere an SPI1, dann kannst du deren Defaultpins verwenden ?

Ja, ich denke so probiere ich es auch mal... ich war mir nur nicht sicher ob die normale SPI- lib 2 SPI Schnittstellen unterstützt und ob ich die PINs dann noch irgendwie zuordnen muss....

Kurze Rückmeldung nach langer Zeit... es funktioniert nicht :frowning:

Hallo,

wenn ich das Problem richtig verstehe liegt das Problem am fehlerhaften, also praktisch nicht vorhandenen Tri-State Ausgang des RA8875? Dann könnte man die Tri-State Stufe nachrüsten, also extern "anbauen". Ansteuern würde diese dann mit dem Chip-Select Signal. Schau dir das mal genauer an. Tristate-Logik, Grundlage, Praxis (74HC125 74HC126 74HC00 74HC245 74HC533 Bus-Schaltung)

Da ich Deine Hardware nicht habe, kann ich Dir keine Antwort "So habe ich es gemacht, so funktioniert es" geben.

Mein Ansatz: Alternativ zu #16 kannst Du auch zwei der drei SPI-Schnittstellen des Teensys nutzen.

nrf24 an SPI und SPI1, geht das?

TFT an SPI und SPI1, geht das?

Wenn ja, nrf24 an SPI und TFT an SPI1 oder umgekehrt, geht das?

Also bei der Problematik mit dem RA8875 habe ich einen Tri- State Buffer nach dieser Anleitung eingebaut: Fix compatibility with other SPI devices · sumotoy/RA8875 Wiki · GitHub

Ich hab auch generell auf sehr kurze Kabel geachtet- die sind alle unter 5cm Länge.

Die Variante mit SPI und SPI1 habe ich versucht, das klappt aber auch nicht... :frowning:

Ich überlege schon fürs Funken einen kleinen nano daneben zu setzen und dann die beiden via I2C oder so kommunizieren zu lassen...

Ich habe deine Hardware auch nicht....
Also untestbar, für mich.

Die Variante mit SPI und SPI1 habe ich versucht, das klappt aber auch nicht... :frowning:

Wenn dein Teensy 2 SPI Schnittstellen hat, und es dennoch nicht funktioniert, dann hast du Probleme ganz anderer Art, als du vermutest.

Ein LA könnte dir evtl. zeigen, wo es klemmt