sábado, 3 de noviembre de 2007

Resucitando mi pendrive

[Este era un post de mi anterior Blog (http://mabett.wordpress.com) , lo transcribo ahora...] Introducción:

Hace más de un año que se me murió pendrive (o llavero USB, o memory key, o dispositivo USB provisto de una memoria Flash). Aparentemente lo conecté a alguna PC en un ciber con puerto frontal y los cables mal conectados al motherboard; lo que lo llevó a mejor vida por algún tiempo. Ni bien me percaté de la desgracia continué utilizando, otro que me regalaron (gracias caraé :-D).

Fui parcialmente feliz "con el sustituto" hasta que un ¿buen? día lo extravié en un ciber de la Calle Paso de los Andes cuya desatención al preguntar por mi pertenencia me obliga a recomendarles que si pueden no asistir...

Así me vi en la disyuntiva de volver a utilizar disquetes de 1.44" o intentar arreglar mis inmóviles 512MB. La duda duró unos 0.112 segundos:

El aparato es un Memorex TravelDrive 512 (Rev 1.0B P/N:32507751):

Síntomas:

  • Un día lo conecté en algún lugar del planeta y no anduvo;
  • En mi computadora de ese entonces andaba, pero en la de la mayoría de los cibers no;
  • El comportamiento en las otras computadoras era una intermitencia de la luz que indica la lectura/escritura en la memoria, bajo windows "Error código 10", que no es más que "no se reconoce dispositivo" y bajo GNU/Linux error en el router USB.

Diagnóstico:

  • Está roto :-D.

Lo que tenían en común todas las otras computadoras que no la mía de ese entonces era el puerto USB 2.0, así que había "algo" en el USB 2.0 que en mi pendrive no.

Con mi computadora actual que sí tiene USB 2.0 algo tenía que hacer para emular las condiciones de la anterior. Lo necesario fue "desmontar" los drivers USB 2.0: en mi Debian:

root@nowhere someplace/ # rmmod ehci_hcd
y probablemente también retiré algún otro módulo. Al conectarlo /var/log/kern dice:
usb 1-5.2: new full speed USB device using ohci_hcd and address 12
usb 1-5.2: not running at top speed; connect to a high speed hub
scsi11 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 12
usb-storage: waiting for device to settle before scanningJun 14 14:39localhost kernel:   Vendor:           Model: Memorex TD 2B     Rev: PMAP
Type:   Direct-Access                      ANSI SCSI revision: 00
SCSI device sdb: 1015808 512-byte hdwr sectors (520 MB)
sdb: Write Protect is off
sdb: Mode Sense: 03 00 00 00
sdb: assuming drive cache: write through

A pesar del quejido de la velocidad de escritura el dispositivo trabajó correctamente, para probar si funciona lo monté de la manera usual y nos coloqué en el punto de montaje hice:

MAbeeTT@nowhere someplace/ $: while ((1)); do dd if=/dev/zero of=archivo_nulo.dmp; rm -f archivo_nulo.dmp ; done
y cada dd arrojó:
dd: escribiendo en «archivo_nulo.dmp»: No queda espacio en el dispositivo
551889+0 records in
551888+0 records out
282566656 bytes (283 MB) copied, 3,02966 seconds, 93,3 MB/s
con los 496 MB en vez de 283, si es que el dispositivo está vacío.

Desmonté el sistema de archivos desconecté el dispositivo, cargué el driver ehci y los que retiré junto a él y /var/log/kern arrojó:

usb-storage: device found at 103
usb-storage: waiting for device to settle before scanning
kernel: usb 1-6: USB disconnect, address 103
usb 1-5: new full speed USB device using ohci_hcd and address 16
hub 1-5:1.0: USB hub found
hub 1-5:1.0: 4 ports detected
hub 1-5:1.0: hub_port_status failed (err = -110)
hub 1-5:1.0: cannot reset port 1 (err = -110)
last message repeated 3 times
hub 1-5:1.0: Cannot enable port 1.  Maybe the USB cable is bad?
hub 1-5:1.0: cannot disable port 1 (err = -110)

El cable NO estaba mal. Lo que vemos es que la computadora vé algo pero ese algo se desconecta y luego lo vuelve a ver, se desconecta y pregunta por el cable.

Este comportamiento es similar bajo windows pero no se leer los logs de ese sitema.

Noté que había uno de los 8 conectores USB de mi gabinete que me daba más tiempo en ese lazo infinito así que conecté el pendrive ahí y usé usbview (GTK1), copié la descripción de dispositivo a un archivo de texto e hice lo mismo en USB 1.1; la diferencia es:

MAbeeTT@nowhere someplace/ $: diff -u memorex1.1.txt memorex2.0.txt
--- memorex1.1.txt      2007-06-02 18:09:22.000000000 -0300
+++ memorex2.0.txt      2007-06-02 15:54:00.000000000 -0300
@@ -1,7 +1,7 @@
Memorex TD 2B
Manufacturer:
Serial Number: 074C0C020739
-Speed: 12Mb/s (full)
+Speed: 480Mb/s (high)
USB Version:  2.00
Device Class: 00(>ifc )
Device Subclass: 00
@@ -29,12 +29,12 @@
Direction: in
Attribute: 2
Type: Bulk
-                       Max Packet Size: 64
+                       Max Packet Size: 512
Interval: 0ms
Endpoint Address: 02 Direction: out Attribute: 2 Type: Bulk - Max Packet Size: 64 + Max Packet Size: 512 Interval: 0ms Como era de esperar no hay nada relevante.

Fue entonces cuando me decidí a destriparlo:

Como se puede apreciar en la foto el controlador USB-Flash es un Phison, así que buscando en mi buscador favorito y en la wikipedia dí con la página del fabricante del integrado. Como era de esperar también la hoja de datos no estaba disponible on-line; así que lo solicité en el feedback de la empresa; por fortuna me lo enviaron.

Con el datasheet ya supe que patas no tocar; así que empecé por medir con mi multímetro todas las patas de alimentacion respecto a masa con el aparato funcionando correcta e intermitentemente.

Las patas que trabajaban a la par de la intermitencia eran las 1, 33 y 35. Según la hoja de datos debe trabajar entre 3 y 3,6Volt. El dispositivo que se conecta es "AH33 316GB". Preguntando en la lug-electronica me supieron desburrar de qué regulador se trata.

Con la hoja de datos del regulador no me quedó más que buscar uno y esperar no destruir todo el resto de los dispositivos de montaje superficial.

Las fiambrerías de electrónica de Mendoza no tienen reguladores de 3,3Volt así que la solución aparente era armar un regulador con un LM317L y apretar todo lo más que se pueda. Otra hoja de datos.

Armado una vez el circuito del regulador hay que calibrarlo para que entregue entre 3 y 3,6Volt; yo cometí la torpeza de colocarle un preset de 5k en vez de una R de 3K y un preset de 2K (para oscilar entre 2 y 5v y NO entre 0 y 5V que resta precisión, cualquier ínfimo movimiento al preset cambia notablemente el voltaje de salida). En realidad después de unas semanas el preset me empezó a molestar así que tomé la iniciativa de colocar el su lugar una resisencia cercana al valor de ajuste del preset.

Probando el circuito en el pendrive, con y sin el regulador. Cama arriba, cama abajo como Homero Simpson y todo bien.

Me quedaba qué hacer para integrar el circuito al pendrive; naturalmente dentro de la carcaza no cabría así que se me ocurrió perforarla para pasar los cables y apoyarla parte plana con parte plana. Se me ocurrió cubrir todo con cinta aisladora (PVC negro), y por sugerencia de mi viejo protegí el circuito con plástico de envase descartable de gaseosa (PET), y calentandolo para moldearlo. Cinta aisladora y a ser feliz.

Para hacer pruebas de lectura escritura, conectar montar y:

MAbeeTT@nowhere someplace/ $: while ((1)); do dd if=/dev/zero of=archivo_nulo.dmp; dd if=archivo_nulo.dmp of=/dev/null ; rm -f archivo_nulo.dmp ; done

y lo dejé un rato largo.

Agradecimientos

  • Phison: por la hoja de datos.
  • Memorex: por no borrar Phison del integrado :-D .
  • Hector Armando Maza, por el aporte con la hoja de datos, a la Lugmen por la lista de correo lug-electronica y a los chicos que participaron con el thread.
  • mi viejo, por la idea del plástico.

Algunas fotos de como quedó:

12 comentarios:

El Pelado dijo...

Sos el ejemplo de lo que puede hacer la paciencia cuando se une a la curiosidad y el saber...yo talvez con lo poco que se y con la curiosidad que me despiertan estas cosas intentaría reparar un pendrive...si mi paciencia pudiera evitar estrellarlo contra la pared!!!.

Anónimo dijo...
Este blog ha sido eliminado por un administrador de blog.
MAbeeTT dijo...

Estimado anónimo:
En el mundo occidental es considerado inapropiado, descortés, y hasta promiscuo decirle a desconocidos qué deben hacer, en especial si uno lo hace con insultos.

Por otro lado te sugiero que ocupés tu tiempo en tus cosas y no en criticar la vida de los demás: eso denota inseguridad.

Si encuentras algun kingston que sea capaz de escribir datos a esa velocidad me contás.

Otra cosa: agravios gratuitos en mi Blog no son publicados.

Anónimo dijo...

Hola, muy bueno lo tuyo eh. Puedo sugerirte que en lugar de un 317 utilices un diodo zener de 3,3v, es mucho mas pequeño, te da una tenion fija y entra dentro del pendrive. Otras falas comunes son los condensadores y/o resistencias que suelen tener conectados entre el controlador de interfaz y la ficha USB que se queman o varian de valor, y, por lo cual el pc deja de detectar el pendrive. Suerte.

Atte. Gustavo

MAbeeTT dijo...

Gracias Gustavo: al final lo que terminé usando era un regulador smd que le saqué a una lectograbadora de CD rota. En este momento no tengo apuntado el dispositivo en cuestión a mano.

Anónimo dijo...

Hola MAbeeTT, estuve mirando tu super paciencia ja, es admirable. Quisiera saber si tienes un plano del circuito del pendrive, tengo uno que estaba enchufado y se lo chocaron, se quebraron las pistas donde enchufa el usb, tengo imagenes tambien si las quieres ver. Lo que quiero hacer es sacar esos contactos de otra parte del pendrive. Gracias muy bueno el blog

MAbeeTT dijo...

Fernando:
El plano del circuito impreso (PCB) del pendrive no lo tengo, sí tengo la placa (ya no lo uso más, pasé a otro aparato). Tengo un PDF con la hoja de datos que del circuito integrado que menciono, me lo pasó el fabricante cuando completé un formulario en su página web.

Garlopa dijo...

Que suerte no ser el único en tener la desgracia de comprobar que el BOLUDO que instaló los USB lo hizo mal!
Creo que aún tengo el pen quemado pero te puedo asegurar que no me voy a poner a testear todos los pin porque no me dan las bolas y porque era de los de 256M. y menos aún ahora que creo haber quemado uno con un mala soldadura tras un pisoton.

Muchos éxitos,
Mauricio

Anónimo dijo...

CAUSA CON TODO LO PUITO QUE GASTASTE MAS BARATO TE HUBIERA SALIDO COMPRARTE OTRA Y MEJOR, ADEMAS PERDIDA DE TIEMPO, FUERA DE LA ESTETICA, Y APARTE RECUPERAR UNA DE 512 A QUIEN SE LE OCURRE...

MAbeeTT dijo...

Ehhh, el post es de 2007 y estuvo como más de 8 meses en espera hasta que lo publiqué.

Además qué te importa como ocupo el tiempo, mejor así que chismoseando como los demás son libres de hacer lo que quieren.

Anónimo dijo...

hola me llamo ezequiel,tengo un problema con un pendrive kingston datatraveler 101 2gb que no es original, y quiero recuperar las carpetas que están dentro, lo que pasa es que mi pc ya no lo lee mas y mi netbook tampoco y ante lo hacían las 2 y no creo que sea un problema de driver o controladores de la pc por que en la netbook tampoco lo lee mas ,cuando enchufo mi pendrive a la pc solo prende la luz roja del pendrive pero no se abre la carpeta del pendrive y cuando voy a la unidad(E)que se le asigna y hago click me dice inserte un disco y viendo por internet se me ocurrió como solución comprar un pendrive de la misma marca, modelo y capacidad y desoldarle el modulo de memoria al pendrive que no sirve y ponérselo al pendrive nuevo de este modo podría recuperar las carpetas que quiero no se por que nunca comentan esta opción me gustaría escuchar el comentario de algún especialista sobre el tema

MAbeeTT dijo...

Hola Ezequiel. En tu lugar primero observaría mejor el comportamiento del dispositivo. No sé como se hace en windows, en linux miraría los logs de dmesg y la información que entrega lsusb, después si el dispositivo se ve como unidad de disco (fdisk -l), volcaría el contenido en bruto a bruto a un archivo de backup, para poder analizar si hay tabla de particiones, etc.

Si no anduviera el controlador de la memoria entonces desarmaría para ubicar otro pendrive igual y hacer el enroque memorias. En general no se acostumbra a cambiar las memorias porque es un proceso delicado que es más sencillo con las herramientas adecuadas. Cuando desmontás la memoria por el calor podrías borrarla también.