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.


martes, 17 de marzo de 2015

Configuración de Sintonizador ISDB-T en Linux Mint

Voy a inaugurar esta serie de notas, documentando los avances para usar un sintonizador de TV Digital en Linux Mint. Me costó bastante encontrar información sobre este aparato, pero toda en inglés. Por eso me animo a dejar algún testimonio en español.

El sintonizador es un EzTV ISDB-T, en formato dongle usb, que funcionaba originalmente solo en Windows. Lo compré en DX.COM.

Copio algunas características técnicas desde la tienda:
  • Cumple con estandar ISDB-T, para 1 Segmento (ver wikipedia para emisiones para celulares) y 3 Segmentos (emisiones para canales en definición estandar SDTV).
  • Rango de Frecuencia:  470~806MHz.
  • Sensitividad: -95dBm.
  • Decodificadores: video H.264 (MPEG-4 AVC) y audio MPEG-4 HE-AAC.
  • Soporta control remoto infrarojo.
  • Soporta lista de canales y radios (aunque sospecho que describe el programa en Windows).
 El aparato funciona bien en Windows 7, pero junto con renovar mi notebook, y que pasé a un boteo dual con Win 8.1 + Linux Mint 17.1, me puse a investigar que se necesitaba para hacerlo andar en Linux. A todo esto en 8.1 no pude instalar los drivers, pues me decía que era para una versión anterior de Windows...

Al buscarlo por ese nombre en internet no llegué muy lejos, así que me decidí y lo abrí. Me encontré con lo siguiente:

A la izquierda se ve el conector USB. A la derecha, el conector para la antena, y junto a este algo más abajo, el sensor infrarojo para el control remoto. Al centro se ve el chip en que está basado: SIANO SMS1140. Acá un detalle del mismo:
Sin embargo esto no me llevó muy lejos pues la búsqueda me llevó a un diseño de referencia para TV Digital. En el sitio del fabricante del chip, aparece mencionado, pero en la sección de soporte no está listado, por lo que me parece que está obsoleto. Sin embargo buscando dentro del sitio (gracias a san google), logré encontrar una hoja de especificaciones para China con otros datos técnicos adicionales:
  • Soporta ISDB-T 1/3-Seg, pero también DVB-T, T-DMB, DAB, DAB+, DAB V.2
  • Bandas de frecuencias 170-240MHz y 470-862MHz.



Sin embargo por el otro lado de la placa madre aparece la inscripción EZTV926, que sí me llevó mas lejos pues encontré en el sitio de LinuxTV que había algunos similares: Dongle Smart Plus.

Mi problema es que al enchufarlo no cargaba, dándome errores como los descritos en ese artículo.

Lo que rescaté es que se debe utilizar un archivo como firmware, pero no sale el vínculo sino que hay que rescatar la imagen desde instalación de windows. En mi caso el nombre del archivo que el kernel estaba esperando es "isdbt_nova_12mhz_b0.inp".

Ahí volví al sitio donde lo compré, y ví que en el foro sobre el producto una pregunta hablaba de algo similar, y entregaban un archivo para bajar.
Probé con ese archivo, siguiendo las instrucciones, renombrándolo y copiándolo a /lib/firmware/ pero no me funcionó. Sin embargo, ahí mencionaban que había que inicializar el driver para que partiera en modo ISDB-T, creando un archivo y agregando la instrucción correspondiente:

$ sudo nano /etc/modprobe.d/siano_dtv.conf
Agregar la línea:
   options smsmdtv default_mode=6
y grabarlo.
Luego lo que hice fue recuperar desde el notebook con Windows 7 el archivo original de mi instalación (isdbt_nova_12mhz_b0.inp), que encontré en C:\Windows\System32\drivers y traspasé al Linux vía un pendrive:
$ sudo cp isdbt_nova_12mhz_b0.inp /lib/firmware/isdbt_nova_12mhz_b0.inp
Luego reinicié el notebook sin enchufar el dongle, y luego de que cargó completamente Linux Mint, sí lo enchufé. Ahora sí lo reconoció:
$ dmesg
...
[ 280.809288] usb 2-3: new high-speed USB device number 8 using xhci_hcd
[ 280.826010] usb 2-3: New USB device found, idVendor=187f, idProduct=0201
[ 280.826019] usb 2-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 280.826024] usb 2-3: Product: MDTV Receiver
[ 280.826027] usb 2-3: Manufacturer: MDTV Receiver
[ 280.987654] smscore_set_device_mode: firmware download success: isdbt_nova_12mhz_b0.inp
[ 281.300890] DVB: registering new adapter (Siano Nova B Digital Receiver)
[ 281.301105] usb 2-3: DVB: registering adapter 0 frontend 0 (Siano Mobile Digital MDTV Receiver)
...
[ 281.301580] usbcore: registered new interface driver smsusb
Sin embargo, en los otros sitios tienen el problema que no funciona el infrarojo, y yo también quedé igual. Así que continuaré esta investigación...
Como todavía no termino con la sintonización de canales, también escribiré otro post cuando lo tenga más listo.