[résolu] Problème MISO avec lecteur SD et player MP3 sur le bus SPI Arduino Uni

Bonjour,

C’est long, je sais… Je travaille sur un projet un peu similaire au jukebox mp3 de Daniel Herrera (Juke Box MP3), avec quelques différences car j’ai besoin de fonctionnalités un peu particulières et aussi d’utiliser des noms de fichiers mp3 longs.

Je développe avec une carte Arduino Uno, un afficheur LCD 4x20 sur I2C, 7 touches de commandes encodées sur 3 fils avec des diodes, un lecteur de carte µSD basique sur SPI avec juste MISO, MOSI, CLOCK et CS, et un encodeur mp3 LC-Technology à base de VS1053 (MP3 LC).

Mon lecteur de carte µSD est équipé d’un circuit LVC125A qui gère l’adaptation de niveau 5V vers 3,3V sur les 4 signaux MISO, MOSI, CLOCK et CS.

Le lecteur mp3 par contre, bien qu’alimenté en 5V n’accepte que des niveaux 3,3V en entrée, j’ai donc chuté les sorties MOSI, CLOCK, CS, RST et DCS de l’Arduino avec de simples diviseurs (3,3 kΩ + 5,6 kΩ). L’entrée MISO étant elle reliée directement.

J’utilise la bibliothèque <SdFat.h> standard pour le lecteur µSD et pour le module MP3 LC-Technology la librairie qu’on trouve sous l’appellation “Arduino_Library-vs1053_for_SdFat” (<vs1053_SdFat.h>).

J’ai rencontré une première difficulté car le module mp3 démarrait en MIDI, j’ai donc court-circuité les pattes 33 & 34 du VS1053 comme c’est suggéré ici ou là, ça a fonctionné mais j’ai découvert plus tard que celà pouvait être corrigé logiciellement en agissant sur GPIO0 et GPIO1 au niveau de la fonction vs_init() de la bibliothèque. J’ai enlevé le shunt et appliqué la modif de la bibliothèque, et en effet ça fonctionne.

J’en vient au problème qui justifie ce post, j’ai ensuite eu de grosses difficultés avec le module mp3 qui rendait une erreur code 4 au begin, erreur qui traduirait un problème de communication SPI. j’ai vu sur des forums étrangers que je n’étais pas le seul à rencontrer ce problème, mais apparemment personne ne proposait de solution. Malgré cette erreur je parvenais à lancer la lecture de fichiers mp3, l’envoi d’une commande au mp3 et le transfert de data entre la SD et le mp3 fonctionnaient donc.

Par contre il m’était impossible de lire les registres du vs1053, ils remontaient tous et toujours 0xFFFF, comme si la sortie MISO du module mp3 n’envoyait que des 1. J’ai bien sûr joué un peu à forcer les CS et DCS des modules pour palier un éventuel problème de conflit sur le bus, en vain. M’étant aperçu que tout allait bien lorsqu’il n’y avait pas de module SD j’ai pensé qu’il devait y avoir un problème de niveaux de signaux entre la sortie MISO de la carte SD en 5V et celle du mp3 en 3,3V qui sont toutes les deux reliées ensemble à l’entrée 12 de l’Arduino.

J’ai effectué divers essais en désespoir de cause, avec des diodes et diverses résistances au niveau de ce nœud MISO et je me suis aperçu qu’il n’y avait plus aucun problème en mettant une résistance de 220 à 470 Ω sur la ligne MISO en provenance de la carte SD.

Maintenant tout fonctionne parfaitement, plus d’erreur code 4 au begin du player mp3 et plus de problème pour lire ses registres, avec donc les deux lignes MISO reliées à D12 de l’Arduino mais via une résistance de 470Ω en série sur la ligne qui vient du lecteur SD. C’est bien, mais si des experts pouvaient m’expliquer pourquoi, je me sentirait mieux :slight_smile: .

Amicalement,
Paulo

modele exact du lecteur SD carte ?

elektrax:
modele exact du lecteur SD carte ?

Il n’y a pas de marquage d’identification sur le lecteur de carte SD, mais c’est exactement le même que celui qui est utilisé ici : Micro-SD-Card-Tutorial/

c'est un catalex v1.0 11/01/2013
mauvaise conception hardware, il fonctionne tres bien quand il ne partage pas le bus spi avec un autre module spi, dans le cas contraire....
photo ICI
vous constaterez que c'est le meme que le votre
"But there's another problem; as the ENABLE pin 13 of the MISO buffer is always tied to ground, other slaves, if using multiple slaves, on the same SPI bus cannot communicate with the master as the signals will interfere each other"

et ICI
"Just an FYI - if you are thinking about picking up a microSD card module, avoid the ones made by Catalex. They do not seem to play well with other SPI devices."

pour moi, qui ai connu le probleme il y a 4 ans, voilà votre explication

Merci beaucoup Elektrax,

Pouvez-vous me conseiller un modèle de lecteur SD qui accepte de ne pas être seul sur le bus SPI ?

Sinon, j'ai un second module SD, je peux essayer de faire les modifs suggérées.

Si la broche est accessible (ou alors en levant la broche du circuit), tu pourrais connecter le OE de la porte qui pilote la ligne MISO au CS et ainsi régler ton problème.

fdufnews:
Si la broche est accessible (ou alors en levant la broche du circuit), tu pourrais connecter le OE de la porte qui pilote la ligne MISO au CS et ainsi régler ton problème.

J'ai coupé la piste de masse qui partait de la pin 13 à quelques mm dans l'espoir de m'y rattacher, mais hélas la pin restait reliée à la masse par le dessous du boîtier. Alors j'ai dessoudé la pin pour me piquer dessus directement, mais à, peine avais-je commencé à la soulever qu'elle s'est cassée net en sortie de boîtier.

Pas grave je vais tester avec ce genre de lecteur plus simple, sans adaptation de signaux. Modulo-Lector-SD-para-Arduino

Je ferai les adaptations en 3.3V pour les deux modules avec des résistances ou des 4050.

Quoi qu'il en soit merci et belles réalisations à toutes et tous.
Paulo

Une adaptation avec un 4050 ne fonctionnera pas. Il faut pouvoir mettre la sortie MISO des périphériques en haute-impédance lorsqu'ils ne sont pas actif.

Hello,

fdufnews:
Une adaptation avec un 4050 ne fonctionnera pas. Il faut pouvoir mettre la sortie MISO des périphériques en haute-impédance lorsqu'ils ne sont pas actif.

Hello

En effet, je retiendrai que l'adaptation de niveau avec 4050 n'est possible qu'avec un seul esclave sur le bus SPI. Mais si je comprends bien, les modules SPI dépourvus d'adaptation de niveau mettent bien MISO en haute impédance quand ils ne sont pas sélectionnés, ce que semble confirmer les réalisations qui fonctionnent bien avec un décodeur MP3 et un lecteur SD sans adaptation de niveau comme ceux utilisés par Daniel Herrera (Juke Box MP3).

Partant de ce raisonnement, la nuit m'a porté conseil et plutôt que d'abattre le pauvre module à la patte 13 cassée, avant mon premier café j'ai coupé la piste qui raccordait la pin MISO à la sortie 11 du buffer, puis j'ai raccordé la pin MISO à partir du moignon de piste directement sur la sortie DAT0/MISO du lecteur de carte, avant la 3,3k (R4) qui est sur l'entrée 12 du buffer.

J'ai bousillé ce qui reste de ma vue de quasi vieillard, mais maintenant tout fonctionne parfaitement, plus d'erreur et plus besoin de mettre une résistance entre les deux MISO.

Je me suis quand même commandé deux modules SD simples, sans adaptation de niveau pour le plaisir de tester.

pauloCDG:
Je me suis quand même commandé deux modules SD simples, sans adaptation de niveau pour le plaisir de tester.

Faut pas bouder son plaisir ;D

j’ai trouvé celle ci dans mon stock, pas encore testée :

sdcar1.jpg

sdcuivre.jpg

verification a la loupe : miso pin 11 du lvc125 et pin 13 au gnd, comme catalex