Double SPI sur UNO rev 3 pour Mémoire, Wifi RN-XV, ...

Un log shield sur carte SD avec horloge RTC et zone de prototypage à pastilles carrées

Double SPI sur UNO rev 3 pour Mémoire, Wifi RN-XV, ...

Message non lude EuropeanOrigin » Ven 10 Aoû 2012 11:50

Bonjour,

Je viens de découvir Arduino et j'ai commencé à faire quelques petit trucs sympas avec mes shields et mon petit arduino.

Je me concentre en ce moment sur un projet assez complet qui nécessite une reception wifi correcte et une lecture de MP3 sans skip ou arrêt du à un manque de ressource. Le module final doit aussi pouvoir stocker des données sur deux cartes : une carte SD (intégrée au Shield Mémoire de Snootlab) et une carte micro-SD (intégré au shield MP3 player de sparkfun).

Les données reçues ou émises par le module wifi proviennent de la carte SD ou de la carte micro-SD.
Les mp3 joués par le shield MP3 proviennent également de la carte SD et de la carte micro-SD.

Toutes les données passent donc par un SPI, et c'est là qu'est le problème... La carte MP3 ne peut "buffer" que 32 byte à la fois, ce qui laisse donc juste le temps de consommer ces 32 bytes pour faire une opération sur le SPI... Il devient donc difficile de stocker une quantité raisonnable d'information en de si courts laps de temps. Si le module wifi reçoit, il doit transmettre ses données le plus rapidement possible (grande quantité de données reçues par wifi à chaque instant). Il y a donc un conflit d'intérêt sur le SPI qui empêche le bon fonctionnement de mon module.

D'où ma question : Est-il possible de générer deux SPI sur une carte arduino UNO rev 3 ? Un des deux SPI serait semi-standard (SS = 9, MOSI, MISO et SCLK = 11,12,13) et l'autre serait full-custom (SS=10, MOSI,MISO,SCLK = 5,4,3 par exemple). Dans ce cas là, je pourrait faire travailler mon module wifi depuis/vers ma carte SD pendant que ma micro-SD envoie des données vers le shield MP3, puis switcher quand bon me semble (wifi <-> micro-SD, MP3 <-> SD).

Le problème c'est que les quelques infos que j'ai pu tirer du net ne sont pas particulièrement claires/ne répondent pas à la question. Il semblerait qu'il y ait un SPI hardware (sur les pins 11,12,13) mais je n'en suis pas certain. Et par ailleurs, cela n'empêcherai pas un deuxième SPI. Dans tous les cas je n'ai pas réussi à trouver une librairie ou quoi que ce soit d'utile pour ma question.

Mais peut être que vous réussirez à m'éclairer ?

En vous remerciant d'avance,

EuropeanOrigin
EuropeanOrigin
 
Messages: 3
Inscription: Ven 10 Aoû 2012 11:25

Re: Double SPI sur UNO rev 3 pour Mémoire, Wifi RN-XV, ...

Message non lude EuropeanOrigin » Mar 14 Aoû 2012 09:48

Ok, j'avais bien avancé dans la modélisation de mon double SPI (c'est en fait possible, même si ce n'est pas exactement trivial), jusqu'à la réalisation du switch entre les deux SPI, que je réalise avec quelques inverseurs et NANDs.

Et là, j'ai réalisé que mon problème n'était pas réglable avec ce double SPI puisque la carte micro-SD et le MP3 était sur le même shield... :oops:

Du coup inutile de m'aider, il m'est impossible de le réaliser.

J'enverrais des photos du projet lorsqu'il sera terminé, même si il a terriblement diminué en difficulté...

Sinon vous pouvez toujours proposer des idées de projets qui nécessiteraient deux SPI. :ugeek:

EuropeanOrigin
EuropeanOrigin
 
Messages: 3
Inscription: Ven 10 Aoû 2012 11:25

Re: Double SPI sur UNO rev 3 pour Mémoire, Wifi RN-XV, ...

Message non lude SesechXP » Mar 14 Aoû 2012 10:19

Salut,

On peut connecter plusieurs périphériques sur le même bus SPI, le Slave Select (SS) servant à adresser tel ou tel périphérique. Par exemple le Shield Ethernet fonctionne ainsi : pin 10 pour sélectionner le W5100, pin 4 pour sélectionner la carte mémoire.

++
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: Double SPI sur UNO rev 3 pour Mémoire, Wifi RN-XV, ...

Message non lude EuropeanOrigin » Mar 14 Aoû 2012 15:29

Hello SesechXP,

Merci pour ta réponse, même si malheureusement, je le savais déjà... :?

Le SS sur SPI fonctionne sans aucun problème si un slave ne requiert pas la quasi totalité du SPI pour lui seul, or dans mon cas c'est un peu ça. Les deux applications que je fais tourner sur mon Arduino sont relativement gourmandes en terme d'usage du SPI, au point que les deux ne peuvent pas fonctionner à plein régime ensemble.

D'où mon idée de créer 2 SPI parallèles, avec possibilité d'intervertir les lignes de Slaves et les lignes de Masters.
Mais comme je l'ai fais remarquer dans mon post précédent, je suis ici trahi par le HW de sparkfun, qui dans son enthousiasme et dans sa volonté de faire un truc simple à utiliser a réuni sur le même shield (et donc le même SPI) la puce de lecture et la carte micro-SD... Du coup, il est impossible de séparer physiquement le master et le slave (et de les mettre sur des SPI distincts), ce qui a un peu ruiné mes idées d'optimisations un peu sales.

Enfin bon, comme je me suis dit qu'un jour peut être quelqu'un voudrait peut être lui aussi utiliser une double SPI avec possibilité de switcher les esclaves entre maîtres, j'ai dessiné un PCB (pas du tout optimisé) du double SPI.

Il est plutôt simple (7 ICs dont un inverseur CD4069BE (sextuple inverseur, j'en ai besoin que d'un) et six quadruple portes NAND à deux entrées CD4011BE) et comme je l'ai déjà dit pas optimisé du tout, à la fois en terme de dimensions mais aussi en terme d'ICs utilisés. En effet, selon mes calculs, il doit être possible de faire un PCB n'utilisant que 5 CD4011BE et pas d'inverseur. J'ai tout de même préféré cette solution moins optimale car plus lisible par l'humain lambda (chaque CD4011BE et connecté en sortie à un pin d'un des SPI).

En tout cas merci de ta réponse,

EuropeanOrigin

SPI_switcher_7IC.jpg
Ce PCB n'est pas optimisé du tout.
SPI_switcher_7IC.jpg (93.78 Kio) Vu 4102 fois
EuropeanOrigin
 
Messages: 3
Inscription: Ven 10 Aoû 2012 11:25


Retourner vers Mémoire

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron