Utilisation bus SPI1 et SPI5 sur Arduino GIGA R1 en multitâche

Bonjour,
Sur mon projet j'ai à utiliser plusieurs écrans epaper avec librairie GxEPD2.
Sur une carte traditionnelle c'est lent car le rafraichissement des écrans est assez lente.

J'avais au début opté pour l'utilisation de deux cartes en parallèle.
Puis j'ai découvert la carte Arduino GIGA R1 qui possède deux cœurs qui peuvent faire du multitâche et possède deux ports SPI ( les écrans fonctionnent en SPI).

1er essai : je télécharge dans chaque cœur un programme et je relie les deux écrans sur le même bus par défaut. Cela se lance mais bloque rapidement du fait du conflit qu'il y a (ce qui paraissait normal car il n'y a pas d'arbitrage pour l'utilisation du bus.

2ème essai je mets le deuxième écran animé par le deuxième coeur sur le deuxième port en démarrant le deuxième bus SPI suivant les indications Arduino

#include <SPI.h>
const int CS_2 = 5;
void setup() {
pinMode(CS_2, OUTPUT);
SPI1.begin();
digitalWrite(CS_2, LOW);

SPI1.transfer(0x00);
digitalWrite(CS_2, HIGH);
}

et sur le cœur 1(principal M7)

#include <SPI.h>
const int CS_1 = 10;
void setup() {

  pinMode(CS_1, OUTPUT);
  SPI.begin();
  digitalWrite(CS_1, LOW);
  SPI.transfer(0x00);
  digitalWrite(CS_1, HIGH);
}

Résultat inchangé les deux communiquent toujours sur le bus par défaut
Auriez-vous une idée pour faire que chaque cœur possèdent un bus SPI différent par défaut?
Sinon quel intérêt d'avoir plusieurs bus SPI si on ne peux pas les orienter?
Cela couperai aussi l'intérêt d'avoir un double cœur travaillant en multitâche qui nécessite un bus SPI pour chaque.
Merci de votre aide car je n'ai pas les compétences informatiques nécessaires pour venir à bout de ce problème et comprendre les subtilités de gestion de plusieurs bus SPI.
Cordialement
Jean-Claude

Je n’ai pas cette carte mais quand j’avais lu la doc il me semblait que le M4 n’était pas booté par défaut et qu’il fallait faire un truc du genre RPC.begin(); Dans le sketch du M7 pour activer le M4.

Il faudra aussi vérifier si la bibliothèque que vous utilisez pour les écrans est capable de gérer un SPI spécifique.

Bonjour,
Merci de votre aide.
Oui le cœur M4 démarre bien car je le fais booter avec la ligne de commande : RPC.begin(); et le programme s'exécute bien mais il bloque du fait du conflit sur le même bus SPI.
Par contre la bibliothèque des écrans n'est pas prévue pour gérer d'autres pins de SPI et c'est là que le bas blesse, c'est pour cela que je cherchais une possibilité d'affecter par défaut le 2ème bus sur le deuxième cœur, mais là rien dans la doc qui permet seulement de le démarrer.
j'avais aussi essayé la possibilité de déplacer des pins suivant les réalisations de Teensy " Alternate SPI pins" à la page : https://www.pjrc.com/teensy/td_libs_SPI.html , mais cela me renvoi une erreur car les commandes (SPI.setMOSI(pin), SPI.setMISO(pin), and SPI.setSCK(pin)) ne sont pas acceptées.
Voilà ou j'en étais de mes réflexions et recherches
Cordialement
Jean-Claude

je ne vois pas cette commande dans le code que vous avez posté.

➜ il faut dans ce cas modifier la bibliothèque pour en tenir compte.

Bonjour,
Oui je n'avais pas mis sur le m4 le démarrage du SPI 1 (défaut) mais seulement le SPI5 pour espérer que par défaut il s'y oriente, mais peine perdue.

Il est vrai qu'il faudrait modifier la bibliothèque, mais là, je n'ai malheureusement pas les connaissances et compétences nécessaires.
Merci pour cet échange
Cordialement
Jean-Claude

Ping pour Jean-Marc / @ZinggJM (do you speak also French near Lucerne ?)

in reference of Waveshare e-paper displays with SPI - #3430 by ZinggJM

Bonjour,

Oui, je parle aussi Français, mais pas facilement neanmois.
Je suis né à Geneve, mais d'origine de pres Lucerne.
Mon Français c'est endormie, fault de non-usage.

I am somewhat lost without spelling checker, so I prefer English.
And I get tired fast, when reading long posts in French.

You can pass an instance of an SPI class to a GxEPD2 instance (program).
So you can use different SPI channels for each GxEPD2 instance.
But you can't use multiple SPI channels with a single GxEPD2 instance.
Jean-Marc

thanks for the quick answer

Hello,
I only use Epaper screens on my projects with the help of the very complete GxEPD2 library and I thank JM Zingg for all this work and his help a few years ago to use the Arduino DUE boards.

My current project uses three screens (2 GDEY042T81 and 1 GDEQ0583T31) with numerous partial refreshes with 2 Arduino DUE (one for 2 GDEY042T81 and one for GDEQ0583T31) for more display fluidity.

The Giga R1 board works very well with GxEPD2 with the Arduino DUE commands.

But for the moment it is impossible to work with both programs on each core because a separate SPI bus is required per core.

The definition and call of a different SPI bus by the GxEPD2 library would be a solution to the direct assignment by the card of a dedicated SPI bus per core.

But I am self-taught in computers and I will need step-by-step help in order to carry out this SPI bus assignment using the GxEPD2 library.
If JM Zingg can give me a little tutorial on this to do this test I would thank him.

Best regards

Jean-Claude

Bonjour,
La solution de contournement de ce problème est résolu en analysant la librairie de GxEPD2.
J'ai suivi les indications portées dans les extras situés : Arduino\librairies\GxEPD2\extras\sw_spi\README.txt.
J'ai remplacé les fichiers originaux GxEPD2_EPD.cpp et GxEPD2_EPD.h de la librairies par ceux se trouvant Arduino\librairies\GxEPD2\extras\sw_spi\src
, en mettant la ligne de commande :display.epd2.init(13, 11, 115200, true, 20, false); // define or replace SW_SCK, SW_MOSI display.init(115200);
avant l'initialisation due l'écran: display.init(115200);
les pins utilisés sont ceux du deuxième port SPI (SPI5).
Ne pas engager suivant la documentation Arduino de la carte Giga R1 le port SPI car cela génère une erreur lors de la compilation.
j'ai chargé le programme sur le cœur M4 et cela a fonctionné parfaitement, les deux programmes se sont effectués en parallèle.
Pour rappel le programme injecté sur le Cœur M7 était réalisé avec la bibliothèque non modifiée.
Cordialement
Jean-Claude

bravo et merci du partage

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.