Pages: [1]   Go Down
Author Topic: Lire/Ecrire sur carte SD à partir de plusieurs cartes Arduino  (Read 901 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous,

Je voudrais savoir s'il est possible d'utiliser une carte Arduino Uno avec un module SD Libelium pour écrire sur une Carte SD et d'utiliser une seconde carte Arduino pour lire ce qu'on a écrit sur cette même carte SD?

J'ai commencé à tester en branchant le module SD sur la première carte arduino Uno entre les pin 8 et 13 + GND, et sur ma seconde carte arduino je ne branche pas ni la clock (13) et ni l'alimentation du module SD (smiley-cool mais je relie bien les masses ensemble. Pour effectuer mon test j'utilise la librairie SD et arduino 1.0.3 sous Mac. Je téléverse sur mes deux cartes l'exemple CardInfo.

Résultat : Il ne détecte pas ma carte SD sur la 2nd carte Arduino. Est-ce une erreur de branchement ou est-ce impossible de brancher deux cartes arduino à un même module SD?

Merci pour vos réponses smiley-wink
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 23
Posts: 2054
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ce n'est pas impossible a priori (pas testé) mais
- Il faut que chaque arduino puisse fournir SCK, DI, DO et CS. Chaque Arduino va discuter avec la carte SD avec sa propre clock, ses propres date et son propre CS.
 ==> Implique une gestion d'isolation : soit avec des buffers externes, soit en "retournant" les broches en entrée pour faire un équivalent de haute-impédance
- Et surtout il faut une communication entre les 2 Arduino pour savoir qui accède à la carte SD : gestion de jeton, demande/réponse
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

D'accord merci pour cette réponse.

Par contre je viens de voir le poste suivant : http://arduino.cc/forum/index.php?topic=50943.0
C'est peut-être une solution pour moi : Effectuer une connexion entre mes deux cartes par échange de données Tx et Rx
Ensuite je branche mon module SD sur la carte "Transmission" et je peux surement récupérer des données sur la carte "réception"?

Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

C'est un cas typique de gestion d'une ressource partagée.

Tu as deux solutions :
- utiliser une troisième carte arduino ayant l'accès exclusif à la carte sd et servant de tampon pour les demandes de lecture/écriture (principe d'un serveur sql par exemple)
- utiliser 2 buffers logique "tri-state" pour couper physiquement la connexion d'une carte pendant que l'autre parle + système de mutex (hardware) pour éviter les conflits
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quitte à passer par plusieurs cartes pourquoi ne pas faire un truc dans le style:

Shield SD <-> Carte 1 (I2C) <-> Carte 1 à Carte x

A ce moment la tu partage le même bus entre cartes et tu en a une exclusivement sur la SD. C'est comme ça que je ferais moi.
Sinon t'a les liaisons type série mais la pour gérer les priorités et les colisions c'est moins facile qu'en I2C.
Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quitte à passer par plusieurs cartes pourquoi ne pas faire un truc dans le style:
Shield SD <-> Carte 1 (I2C) <-> Carte 1 à Carte x
A ce moment la tu partage le même bus entre cartes et tu en a une exclusivement sur la SD. C'est comme ça que je ferais moi.
Ça reviens à faire comme dans ma première solution, avec de l'i2c pour communiquer entre arduino smiley-wink

Sinon t'a les liaisons type série mais la pour gérer les priorités et les colisions c'est moins facile qu'en I2C.
Pour éviter les collisions il existe un moyen simple, tu gardes deux broches libre, une en INPUT et une en OUTPUT.
-> [in carte 1 out] -> [in carte 2 out] -> [in carte 3 out] ---
---------------------------------------------------------------------

Si INPUT = LOW tu attends, sinon tu peut (pas obligé) passer ton output à LOW et travailler, quand tu as finit tu la repasse à HIGH pour que le module suivant puisse travailler si besoin.
Ça reviens à faire une sorte de "token ring" hardware.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour votre aide du coup je me suis rabattu sur un simple échange de données TX/RX.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui, mais je ne sait pas si tu peux combinés plusieurs "TX/RX", soit une liaison GPIO Série classique, sur plusieurs cartes. En radio, par interface, oui car la gestion de collision est incluse.

Mais pour ce cas particulier, l'I2C reste tout à fait indiqué.

Sinon, effectivement si tu chaîne avec une pin et un fil suiveur... Ça me rappel les cartes de pilotage de train miniature avec le fil noir "feeder". Il suivais le train, comme tu le fait là. Si ça te convien, c'est parfait. Mais c'est dommage de pas utilisé la technologie approprié. En plus tu y gagnerais en fiabilité et en simplicité de code. Mais c'est mon point de vue.

Bon et bien, bonne continuation.
Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Un port série ce n'est pas un bus à collecteur ouvert (LOW = 0v, HIGH = haute impédance).
Si tu relies tel quel plusieurs modules série sur un même port et que les deux parlent en même temps, si ils envoient LOW et HIGH = court-circuit = cramage des deux cartes.

cf http://www.billporter.info/2011/06/26/how-to-add-multiple-uart-connections/
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Pages: [1]   Go Up
Jump to: