Go Down

Topic: Lector tarjeta SD no inicializa [SOLUCIONADO] (Read 9166 times) previous topic - next topic

Cheyenne

Jun 01, 2012, 03:24 pm Last Edit: Jun 06, 2012, 06:40 pm by Cheyenne Reason: 1
Hola, es la primera vez que pruebo a conectar un lector de tarjetas SD y no hay forma de hacerlo funcionar. La cuestión es que parece tan sencillo que no veo qué puedo intentar hacer para ver dónde tengo el gazapo.

El lector es este: http://www.ebay.es/itm/Perfect-SD-Card-Module-Slot-Socket-Reader-For-Arduino-ARM-MCU-Read-And-Write-/330658250543?pt=LH_DefaultDomain_0&hash=item4cfcc47f2f#ht_3344wt_1313

Lo conecto a una Arduino UNO. El módulo lo alimento con 5 V (he probado con la salida de Arduino y también con una fuente externa y mismo resultado).
Conecto Pin 12 a MISO directamente y los pines 10 (SS), 11 (MOSI) y 13 (SCK) mediante divisor resistivo (dos resistencias de 10k, el lector verá 2,5 V).
Abro desde Arduino 1.0 el ejemplo básico de CardInfo y el resultado siempre es el mismo, fallo de inicialización. Estoy usando una microSD de 2GB con el adaptador a SD.

Cualquier idea es bienvenida ya que las pocas pruebas que se me ocurrían ya las he agotado.
http://cuadricopterodiyarduino.blogspot.com/

miniduino

Comprueba el pin de cs en el codigo a mi también me fallaba pues en la shield ya esta asignado

Ah y asegúrate de tener la tarjeta en fat16
http://arduinadas.blogspot.com/

Cheyenne

El pin CS en principio está bien ya que el lector no lleva shield, lo cableo yo y CS lo llevo al pin 10 de Arduino.
La tarjeta también he probado a formatearla en FAT16 (aunque ya estaba) y nada, lo mismo.
http://cuadricopterodiyarduino.blogspot.com/

jorgepl


Conecto Pin 12 a MISO directamente y los pines 10 (SS), 11 (MOSI) y 13 (SCK) mediante divisor resistivo (dos resistencias de 10k, el lector verá 2,5 V).


El módulo que utilizas ¿No está alimentado ya a 3.3? ¿Para qué pones el divisor resistivo si pone que soporta entradas a 3.3 y 5 voltios?

Cheyenne

El módulo tiene dos entradas de alimentación, una de 5 y otra de 3,3 V. Por lo que veo en el módulo la de 3,3 V es directa y la de 5 V pasa por un regulador para dar los 3,3 V. Yo lo estoy alimentando a 5 V porque así he probado con una fuente externa por si le suponía excesivo consumo a Arduino.

Sobre que admite entradas a 3,3 y 5 V creo que no es así. Creo que se refiere a la entrada de alimentación. Según he estado leyendo las tarjetas SD funcionan a 3,3 V y si le metes 5 te las cargas. Y este módulo que he comprado no tiene ningún adaptador de niveles (por internet he visto otros que sí lo tienen). En el esquemático de este módulo se ve que no tiene ningún adaptador de niveles.
http://cuadricopterodiyarduino.blogspot.com/

miniduino

Lo del cs te lo comentaba porque yo caí. Tengo la shield de seedstudio v3 allí lo "fijan por hardware" y muchos sketch lo ponen en otro pin y yo pique !!

Lo único que se me ocurre es pasarte por sparkfun a ver si tiene esa placa con un ejemplo o explicación con codigo. O acosar al vendedor con amenazas serias... (es coña)
http://arduinadas.blogspot.com/

Cheyenne

Nada, sigo en las mismas. Sólo he podido ver una cosa que no veo lógica. Si alimento con 5 V el módulo no se calienta pero he visto que si alimento con 3,3 V la placa del módulo se pone bastante caliente. Empiezo a pensar que hay algo mal en el módulo, pero siendo tan sencillo se me hace extraño.
http://cuadricopterodiyarduino.blogspot.com/

Heke

Cheyenne, me da a mi que ese modulo lo han pensado en ponerlo directo al arduino, sin divisores...

Por si acaso, alimentalo a 5v, que emplee el regulador no a 3v3, de eso ya se encarga el regulador.

En ladyada hacen el divisor de tension con una resistencia de 4k7 en serie con el pin correspondiente y en paralelo con ese pin, una de 10k a masa.

Tu placa tiene la de 10k a positivo, eso es lo raro.

En este otro esquema mira los valores que ponen:


En tu caso, igual probaria yo a poner solo una resistencia en serie de 4k7 en las salidas del arduino.
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

Cheyenne

Haré esa prueba Heke. Aunque la verdad es que cuanto más miro el esquema y el de otras configuraciones como la que me pones menos entiendo cómo puede funcionar este módulo.
http://cuadricopterodiyarduino.blogspot.com/

fm

Desde mi punto de vista, deberían haber usado un conversor de niveles para adaptar las tensiones de +5V a +3.3V. El caso es que las especificaciones de las tarjetas SD aceptan entradas a 3.3V. El esquema de la tarjeta es simple, en principio lo único que tiene es un pull-up en todas las entradas a +3.3V, esa parte la veo bien, y aunque la especificación no dice nada, muchos fabricantes lo recomiendan. Ponerle +5V en las entradas MOSI, MISO y CLK no creo que sea buena idea.

Yo, estoy usando un conversor de niveles, vamos un buffer mondo y lirondo, pero estoy teniendo algún problemilla con la corriente que se le suministra a la tarjeta. Veo los niveles bien, pero no consigo leer bien las tarjetas. Esto es para la evoulución de la vinciDuino.

Bajar la tensión a base de resistencias no os sabría decir, pero creo que para tarjetas rápidas puede ser un problema.
   

miniduino

Perdón no quiero raptar el hilo fm te refieres a un buffer hex un 4050 por ejemplo? Como las "nuevas" sd shields?
http://arduinadas.blogspot.com/

Cheyenne

Para tarjetas SD hay muchos esquemas que usan resistencias para adaptar los niveles.

Como curiosidad yo tengo unos adaptadores de niveles lógicos de Sparkfun y la adaptación de 5 a 3,3 V está hecha con divisor resistivo.

Pensando en todo esto he caído en la cuenta que el divisor resistivo que utilizo con resistencias de 10k (para minimizar consumos) es del mismo rango que la resistencia pull up del módulo. Como resultado cuando Arduino saca un estado LOW la entrada SD tendrá 1,1 V que seguro que no detectará como un LOW. Creo que tengo que probar con un rango de resistencias menores.
http://cuadricopterodiyarduino.blogspot.com/

Heke

#12
Jun 03, 2012, 08:46 am Last Edit: Jun 03, 2012, 08:58 am by Heke Reason: 1
Cheyenne y si no, mas facil:

Quitale  las  4 resistencias que van a positivo, las mandas a tomar viento y ponle externamente las que quieras.

Aunque sean smd las puedes incluso romper o con un soldador fino las quitas, te da igual estropearlas.

Y muerto el perro se acabo la rabia.

Ya puedes entonces emplear las combinaciones que quieras externas.

Mira el waveshield 1.o con resistencias, y ademas esta mas que probado:
http://www.ladyada.net/media/wavshield/waveshield10schem.png

Respecto a lo que te decia de:
Quote
me da a mi que ese modulo lo han pensado en ponerlo directo al arduino, sin divisores...

Claro, pero esta pensado para meterle el buffer antes, un 74hc125 o sea que sin buffer y no teniendo mas narices que alimentar a 3v3 la SD divisor de tension al canto y listo.
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

Cheyenne

Cierto Heke, creo que no será difícil desoldar esas resistencias y así me pongo mis divisores sin más problema. Hoy no voy a disponer de tiempo, en cuanto tenga un rato uno de estos días lo probaré.
http://cuadricopterodiyarduino.blogspot.com/

fm

#14
Jun 03, 2012, 11:12 am Last Edit: Jun 03, 2012, 11:14 am by fm Reason: 1
@miniduino - si, un 4050 o similar el que yo estoy utilizando tiene 3 estados (HI, LOW, HiZ), HiZ - alta impedancia.

@Cheyene - no digo que no funcionen, lo que digo es que hay tarjetas que posiblemente no funcionen. Para el circuito que estás montando, lo que tendrás que hacer es poner una resistencia en serie (haciendo los cálculos pertinentes) con el pull-up que tiene el conversor. Es decir, lo tienes que ver como un divisor de tensión poniendo las tensiones en las entradas de las resistencias en serie y calcular el valor de Rserie para tener los valores que verá la tarjeta como HI y LOW. Vhi suele ser 0.7*Vcc y Vlow menor que 0.3*Vin.
   

Go Up