jueves, 26 de marzo de 2015

Haciendo funcionar el conversor USB-Serial Prolific PL2303HX en Windows 8.1 o 10

Como parece que me gustan los desafíos, me compré en dx.com un conversor a USB a RS232 TTL para usarlo como debug de la consola desde mi Raspberry Pi, pues estaba muy barato. 
Conversor USB a Serial, enchufado en el notebook. El led prendido es realmente de color rojo y no media fucsia como aparece en la foto que tomé con el celular. ¿Falta de filtro IR?


La tarjeta se ve simple de usar, pues la salida serial tiene simplemente las señales TXD (datos transmitidos hacia el dispositivo desde el PC) y RXD (datos recibidos desde el dispositivo hacia el PC), junto con las de energía como 5V y 3.3V y GND (tierra). Estas últimas aunque parecen bien convenientes, no me atrevería a usarlas así no más con el Raspberry Pi, pues tengo que averiguar si con ello se setea el voltaje de operación de la puerta serial hacia el dispositivo, o si las saca desde la puerta USB y son para energizar el dispositivo. ¡A revisar el Datasheet!

 Aparecen los problemas

Sin embargo no funcionó en el notebook con Windows 8.1 x64: al enchufarlo me aparecía el diálogo de instalación, pero luego de esto quedaba con error en el Administrador de Dispositivos:
 
 


Mirando el porqué, el mensaje de error hablaba de que el dispositivo no se podía iniciar (código 10).

Buscando en internet, me topé con muchos casos en que conversores con chip Prolific PL2303 no funcionaban, en Windows 7, 8 y 8.1. En algunos se buscaban soluciones como ir al sitio del fabricante (http://www.prolific.com.tw) y bajar drivers.

Eso intenté, bajando los últimos drivers pero tampoco andaba. Sin embargo leyendo las notas del Driver (a veces es bueno detenerse y leer ;-), indican que este funciona para chips modelo PL2303 HXA, XA, HXD, EA, RA, SA, TA y TB, pero con la importante salvedad que no funciona para Windows 8, 8.1 y 10 para las versiones PL-2303HXA y PL-2303X que están EOL ,End-of-Line, o sea que ya no se fabrican mas ni se soportan: o sea están obsoletos (programadamente).


Identificando el Chip

Bueno, me dije ¿como tendré tan mala suerte para justo tener los chips obsoletos?

Bueno, verifiqué que correspondiera al mismo dispositivo, pues en la página se indica que tiene identificadores USB VID_067B&PID_2303 y PID_2304.
Mirando en las propiedades del dispositivo, veo que corresponde al primero:



Mirando el chip mismo, tenía la inscripción PL-2303HX, lo que no parecía muy concluyente, pues no estaba en la lista ni incluida ni excluída, por lo que pasé susto de que no fuera siquiera un producto original, como advertían en el sitio de prolific, sobre ciertas tarjetas hechas en China y que decían ser este chip y no lo eran.
Foto del chip en la tarjeta de conversión, hecha con mi microscopio digital USB. Se aprecia parte del texto en chino que trae la tarjeta. ¿Mala señal?
Para salir de la duda, busqué los datasheet del chip en la página respectiva, para buscar que tipo de marcas tenían las versiones HXA revisión D y la antigua que sospechaba yo tener. Ojo: para entrar hay que usar el usuario GUEST y password GUEST, como lo sugiere la misma página.

Imagen del Chip revisión D, desde el datasheet.
Bajé los archivos "ds_pl2303HXD_v1.4.4.pdf" para la versión D sí soportada, y el archivo "ds_pl2303HX_v1.6.pdf" para la antigua versión A obsoleta, que se encuentra al final de la página.
Mirando en este último archivo en la sección 11 Ordering Information, aparecen descritas las marcas del chip, concordando completamente, como un modelo PL2303HX revisión 3A, versión sin plomo, fabricado el 2010 en la semana 19 de ese año (a mediados de Mayo).

Mirando el otro archivo en la sección correspondiente, el chip tiene tres líneas y no dos como el mío, junto con que la especificación del modelo en la segunda línea termina en D. ¡Así que el mío era justo el descontinuado!
 

Solución para Windows 8 y 10: usar driver antiguo

Cuando ya me estaba resignando a que funcionaría solo en linux, pues la página de drivers de Prolific señalaba que el kernel incluía el driver desde la versión 2.4.31, volví al sitio donde lo compré y dentro del foro para el producto se mencionaba para Windows 8.1 que se podía usar una versión antigua para Windows Vista y así andaba.
Actualización Abril 2016: Lo mismo funciona para Windows 10, aunque las pantallas mostradas aqui son las de Win8.


Busqué qué versión del driver se estaba usando, y en las propiedades del dispositivo aparece como 3.4.67.325.

Uhmm, esa parece que es la última. Así, buscando en internet, encontré la mejor guía para resolver el problema, dentro del sitio http://www.miklor.com/COM/UV_Drivers.php. Este sitio lo conocía, pues está dedicado a la programación (y hackeo en buen sentido) de Walkie Talkies, que en varios casos utilizan un conversor serial a USB.

Lo que indican es que se puede bajar una versión antigua para Windows Vista (version 3.2.0.0), y que no tiene el bloqueo para el dispositivo.

La bajé e instalé, pero con eso no basta, pues hay que seguir las instrucciones siguientes, adaptadas desde su sitio (sección "Installing the Proper Older Prolific PL-2303 Driver 3.2.0.0"):
  1. Bajar el instalador del driver desde la página y guardarlo en el disco duro en el directorio que nos guste más (o nos acordemos).
  2. Desenchufar el conversor.
  3. Instalar el driver completamente haciendo doble click en el archivo que bajamos.
  4. Ahora sí enchufar el conversor y esperar que aparezca y termine la detección del dispositivo. A diferencia de las instrucciones de Miklor que por las imágenes parece que se hacían en Windows 7 o Vista, en mi Windows 8.1 nunca me apareció el mensaje de que la instalación había fallado.
  5. Abrir el Administrador de Dispositivos y revisar el estado del conversor. Ahí sí tenía lo mismo, pues aparecía con el dichoso código de error 10.
  6. Al hacer doble click en el dispositivo, y abriéndose sus propiedades, hay que ir a la pestaña "Controlador" y apretar el botón "Actualizar controlador...".
  7. Ahí aparece una ventana para actualizar el driver, dentro de la cual hay que elegir la opción de "Buscar software de controlador en el equipo".
  8. Aunque el asistente ofrece buscar en algún directorio, se debe elegir la opción "Elegir en una lista de controladores de dispositivo en el equipo".

  9.  Si todo anda bien, aparece dentro de la lista de drivers disponibles el driver antiguo (versión 3.2.0.0), debiendo elegir ese y apretar el botón siguiente.
  10. Tras un poco de malabares de instalación, se llega al final de la instalación exitosa.
  11. Verificar en las propiedades del dispositivo que el driver utilizado es ahora el correcto (versión 3.2.0.0) y que no aparezca con error en el Administrador de dispositivos.
     
¡Ahora sí aparece correcto el dispositivo! :-)

Limitaciones de la Solución

Como nota final, hay que hacer notar que todo funcionará bien si es que siempre utilizamos el mismo puerto USB para enchufar el conversor. Si se nos olvida, y usamos otro puerto, el administrador de dispositivos lo intentará detectar por su cuenta, utilizando siempre el driver más reciente y de nuevo dará error. Ocurrido es, aunque volvamos a enchufarlo al puerto original, igual se usará el driver más reciente, perdiéndose el ajuste que habíamos hecho antes.

Sin embargo, esto no es tan terrible, puesto que el driver antiguo no se ha perdido, solo tenemos que "Actualizar controlador", partiendo desde el paso 5 del procedimiento, sin tener que reinstalar nada más.


24 comentarios:

  1. muchas gracias excelente explicacion no habia podido descargar datos por cable de mi equipo. ya realice los paso y si sirve GRASIASSSSSS

    ResponderEliminar
  2. hola, logre hacer mi pc con w10 reconociera el conversor, pensaba utilizarlo para programar en el IDE de arduino, incluso el programa reconoce el pueto COM, pero a la hora de programar no funciona, no y el error que sale es de "problemas con la placa". si me puedes ayudar te lo agradecería infinitamente

    ResponderEliminar
    Respuestas
    1. Yo simplemente he usado este conversor como interfaz serial a placas raspberry pi y olimexino, no como programador a arduino, por lo que no creo poderte ayudar mucho, salvo enumerarte algunas posibles causas:
      Pueden estar pasando varios tipo de problemas como que estén en niveles de voltajes distintos (el arduino use 5V y el conversor 3.3V o viceversa) lo que puede implicar el riesgo de quemar una puerta en alguno de ambos, que tu placa arduino necesite un pin dedicado a resetearla y que el conversor no la provea, o simplemente que los pines TX y RX estén invertidos.

      Eliminar
    2. Hola antonio estoy usando el modulo para una adquisición de datos con un pic... en simulación funciona pero físicamente solo manda símbolos raros...en tu caso funcionó correctamente con raspberry?

      Eliminar
  3. Muchas gracias. Instalé hace tiempo una unidad muy parecida a la tuya siguiendo el mix de información que hay por internet, pero al poco tiempo empezó a dar BSOD en Windows 8.1 x64. Tras desinstalar esos driver y poner el que comentas he conseguido RX-TX estable y sin cuelgues. Muy recomendable este post para todos aquellos que hayan tenido problemas. ¡Gracias!

    ResponderEliminar
  4. demasiado util esta informacion, muchas gracias

    ResponderEliminar
  5. hermano, muchas gracias un mes buscando solución, demasiado útil.

    ResponderEliminar
  6. excelente aporte, actualizado y funcionando. gracias.

    ResponderEliminar
  7. Hola amigos tengo una pregunta yo tengo un pl2303 el problema es q no lo reconoce mi laptop, ya instale el driver y en el administrador de dispositivos no aparece nada, cual será el problema??

    ResponderEliminar
  8. Me olvide mencionar q el sistema operativo es Windows 7 x64

    ResponderEliminar
  9. Muy útil, tengo un problema que me reinicia el pc cuando satura, pero por lo menos lo reconoce y me permite cargar plantillas.

    ResponderEliminar
  10. Me funciona en windows 10 x64 pero no en windows 10 x86. Para cada uno escogí la versión de driver correcta pero no sé porqué no funciona en 32bits.

    ResponderEliminar
  11. Me funciona en windows 10 x64 pero no en windows 10 x86. Para cada uno escogí la versión de driver correcta pero no sé porqué no funciona en 32bits.

    ResponderEliminar
  12. Me funciona en windows 10 x64 pero no en windows 10 x86. Para cada uno escogí la versión de driver correcta pero no sé porqué no funciona en 32bits.

    ResponderEliminar
  13. Y como edito el letrero que deseo que apareca en as luces led?

    ResponderEliminar
  14. Muchas gracias, funciona a la perfección!!

    ResponderEliminar
  15. Muchas gracias. El problema que mencionas al final se soluciona desinstalando la version mas reciente.

    ResponderEliminar