Bonjour,
L'inscription sur ce forum et les premiers messages sont modérés par un Administrateur.
Ce n'est pas très convivial mais malheureusement nécessaire suite au spam intensif de nos amis russes.
Cordialement,
Dominique

M5Stacks(ESP 32) : utilisation simultanée du TFT et de SD card possible ?

A la recherche d'un pilote pour supporter un périphérique matériel? Ou une bibliothèques spécialisée (ex: FFT).
Peut être développez-vous des pilotes MicroPython?
Cette section est le bon endroit pour en parler?
Règles du forum
Vous aimez MicroPython? Nous aussi! Ces forums sont destinés aux amoureux de Python sur MicroContrôleur.
Le support se fait sur base volontaire et uniquement pour des produits officiels (pas de copie SVP).
Le forum de MicroPython.org sera une excellente référence documentaire (en anglais).

Merci de suivre les recommandations suivantes.
Pensez à:
  • Titre claire: permettant d'identifier le produit et le problème
  • Contenu complet: schéma, message d'erreur, etc (tout ce qui permet d'aider à distance).
  • Fichier joint: Max 300 Ko
  • Courtoisie et précision
sensor56
Messages : 43
Inscription : jeu. 1 avr. 2021 07:14

M5Stacks(ESP 32) : utilisation simultanée du TFT et de SD card possible ?

Message par sensor56 »

Salut,

sur le core M5Stack, j'essaie d'utiliser simultanément l'écran TFT et la carte SD.

L'écran TFT driver ILI9342C fonctionne bien avec driver ILI9342C et (moins bien) avec ILI9341. Utilise bus SPI + broche CS=14

La carte SD utilise bus SPI + CS=4 Fonctionne à peu près solo. J'arrive à la monter, lire le contenu, etc.

Par contre, si je mets les 2 ensemble, même en mettant la même frequence (40 000 000), çà ne passe pas. Erreur au montage de la SD.

Est-ce qu'il y a une règle à respecter ? SD en premier et TFT en second ? etc.

Bref, je suis preneur exemple code avec les 2 qui fonctionnent si quelqu'un a déjà fait çà sous MicroPython.

Sinon, je vois comme solution de tenter avec SPISoft + étage externe SD pour ne pas partager le même bus SPI avec le TFT... mais c'est pas terrible d'en arriver là sur un module qui a le TFT + SD inside.

Note : à priori, çà serait bon avec la version Micropython Lobo... mais j'utilise la version Micropython officielle.
https://loboris.eu/forum/showthread.php?tid=56
Avatar de l’utilisateur
Dominique
Administrateur du site
Messages : 134
Inscription : dim. 17 mai 2020 22:43

Re: M5Stacks(ESP 32) : utilisation simultanée du TFT et de SD card possible ?

Message par Dominique »

A priori, la chip select doit être suffisant (disable au niveau haut).

Par contre, je ne serais pas étonné qu'il faille patienter un peu lors du passage d'un périphérique à l'autre.

Le problème que je pourrais également voir c'est que le signal CS sert aussi à signaler un début de transaction.
A tu pensé à créer les signaux CS avec cs = Pin( pin_value, Pin.OUT, value=1 )... histoire d'éviter l'activation du périphérique (ou déclaration d'une transaction) en passant le signal au niveau bas (donc activation) en créant l'instance de la broche. Ce truc là m'a déjà fait tourné en bourrique pendants des jours.

Dominique
Dominique, MC Hobby.
sensor56
Messages : 43
Inscription : jeu. 1 avr. 2021 07:14

Re: M5Stacks(ESP 32) : utilisation simultanée du TFT et de SD card possible ?

Message par sensor56 »

OK, je vais voir si çà vient de çà. Mais c'est écrit nulle part... Un exemple qui fonctionne avec écran TFT + SD card, c'est pas exotique pourtant... Si t'en as un je prends.

Bon, sinon, j'ai testé avec la version Micropython dit lobo : le problème est résolu et surtout le TFT pulse "à donf" comparativement au module.

Par contre, j'arrive pas à la recompiler moi-même à partir du dépôt. Je fais un autre post pour çà.
sensor56
Messages : 43
Inscription : jeu. 1 avr. 2021 07:14

Re: M5Stacks(ESP 32) : utilisation simultanée du TFT et de SD card possible ?

Message par sensor56 »

Bon, çà fonctionne, mais en fait, il y a des sources de confusion en raison de l'existence de la classe `SDCard` du module machine de l'ESP 32 d'une part et de la possibilité d'utiliser un module `sdcard` séparé.

Voici mes constats - remarques pour un usage simultané de l'écran TFT et de la carte SD sur M5Stack :

- j'utilise un micropython générique mais avec driver pour ILI9342C intégré, dispo ici : https://github.com/russhughes/ili9342c_ ... /sdcard.py L'avantage de cette version c'est qu'elle est à jour (Micropython 1.14) et intègre le driver pour le TFT de core M5Stack (simple (= pas la v2) dans mon cas)
- il faut déclarer un seul port SPI et l'utiliser pour les 2, ce qui ne permet pas l'usage de la classe `SDCard` du module machine ESP32 qui fait sa propre initialisation et ne reçoit pas le port SPI mais les noms des broches
- il faut donc utiliser le fichier sdcard.py à placer sur la flash. La version qui fonctionne pour M5Stack est ici : https://github.com/russhughes/ili9342c_ ... /sdcard.py
- ensuite on déclare l'objet SPI qui sera commun aux 2. Pour moi çà fonctionne même avec baudrate 60 000 000 !
- et dernière chose, faire un reset de la carte obligatoire entre 2 reflashage car sinon les déclarations précédentes toujours actives bloquent la nouvelle programmation.
- j'ai laissé / mis les broches CS avec value=1 mais çà ne change rien qu'on le mette ou pas. çà fonctionne dans les 2 cas.

Le code qui fonctionne, à toutes fins utiles (ici, je teste le TFT suivi d'un affichage du contenu (10ers fichiers) sur le TFT ) :

Code : Tout sélectionner

from machine import SPI, Pin # SDCard = NON ! utiliser sdcard
import sdcard # fichier ici pour M5Stack  : https://github.com/russhughes/ili9342c_mpy/blob/main/lib/sdcard.py

import uos as os
import utime as time

from ili9342c import ILI9342C, color565, BLACK, BLUE, WHITE, RED, YELLOW, GREEN
import vga1_16x16 as font

WIDTH=320
HEIGHT=240


# declaration SPI commun au TFT et SDCard
#spi=SPI(2, baudrate=60000000, sck=Pin(18), mosi=Pin(23))
spi=SPI(2, sck=Pin(18), mosi=Pin(23),miso=Pin(19),baudrate=40000000)

#sd=SDCard(slot=2, width=1,sck=Pin(18), mosi=Pin(23),miso=Pin(19), cs=Pin(4, Pin.OUT, value=1), freq=40000000) # 40Mhz maxpour SD card => NON !
# utiliser un seul et même spi...

sd=sdcard.SDCard(spi, Pin(4, Pin.OUT, value=1))

# sdcard
os.mount(sd, '/sd')
print(os.listdir('sd'))

# afficheur SPI

display = ILI9342C(spi,WIDTH,HEIGHT, reset=Pin(33, Pin.OUT), cs=Pin(14, Pin.OUT, value=1),
                   dc=Pin(27, Pin.OUT), backlight=Pin(32, Pin.OUT), rotation=0, buffer_size=16*32*2)

display.init()

# test couleur
for color in [BLUE, RED, YELLOW, GREEN, WHITE]:
    display.fill(color)
    time.sleep_ms(300)

# affiche texte
display.fill(0) # efface = remplissage noir
display.text(font,"TFT OK !",0,0,WHITE) # affiche message en 0,0

# affiche contenu de la sd card
display.fill(0) # efface = remplissage noir

for idx,item in enumerate(os.listdir('sd')[:10]):
    display.text(font,item,0,16*idx,WHITE) # affiche message en 0,0
Avatar de l’utilisateur
Dominique
Administrateur du site
Messages : 134
Inscription : dim. 17 mai 2020 22:43

Re: M5Stacks(ESP 32) : utilisation simultanée du TFT et de SD card possible ?

Message par Dominique »

Bonjour,

Voici ce que je te propose:

Tu devrais déclarer les deux broches de contrôles le plus haut possible dans ton script.

cs_tft=Pin(14, Pin.OUT, value=1)
cs_sdcard=Pin(4, Pin.OUT, value=1)

Puis, si tu as des broches reset sur le TFT et/ou la SDCard, faire un reset matériel.
A défaut, un reset logiciel....
Il est important que l'un des périphériques n'essaye pas de répondre quand tu veux dialoguer avec l'autre....
A la mise sous tension, on ne sait pas si l'un des deux périphérique n'a pas déjà entamé une transaction s'il a détecté un flan descendant sur sa broche CS (SSEL).

Juste au cas où.... j'imagine qu'il n'y a pas de 3ieme périphérique SPI sur ce bus?

Après cela, cela devrait aller mieux.
Dominique, MC Hobby.
Répondre