?>/script>'; } ?> HG556a: interfaz SPI Widgets Magazine

Autor Tema: HG556a: interfaz SPI  (Leído 10922 veces)

0 Usuarios y 1 Visitante están viendo este tema.

danitool

  • Visitante
HG556a: interfaz SPI
« en: 23-03-2014, 18:08 (Domingo) »
Para los que no lo sepan esto es la interfaz SPI

http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus

Bien, lo que hice fue encontrar los pines SPI en la placa de este router. Lo que me llevó a esto fue que intentando buscar el chip Si3050 en la placa al que hace referencia la wiki, no era capaz de localizarlo. Esto me tenía mosca ya que otros sitios buscando en google hacían referencia a ese chip en el hg556a. Hasta que me di cuenta que esa información la había añadido yo en la wiki pero simplemente viendo el bootlog. Otros sitios copiaron esta información, error incluido, si hubiese puesto que la placa tenía un condensador de plutonio también lo habrían copiado, ya que nadie verifica nada  >:D.

El caso es el Si3050 también aparece referenciado en el código fuente del hg556a, pero el chip no está. Viendo su datasheet nos muestra un estupendo pinout, con 10 pines, y también un esquema de ejemplo que se parece escandalosamente a una parte de la placa en la que hay componentes sin soldar. Así localicé los pines, no por arte de magia  >:D

Ahí va una foto con el pinout, con un GPIO de regalo:


http://wiki.openwrt.org/_media/media/toh/huawei/hg556a-spi.jpg

Verifiqué que funcionaba OK conectándo la flash SPI de otro router (un cisco), la cual fue reconocida correctamente, las lecturas también fueron buenas.

Hay que tener en cuenta que usa el Slave Select 1. También hay un Slave Select 2 disponible pero en este caso va conectado al chip VoiP legerity :
http://wiki.openwrt.org/_media/media/toh/huawei/hg556a-spi_le88266.jpg

Para hacer más cómoda la conexión hice un cableado a un pin header a modo de conector externo:

El hueco entre los dos RJ11 se ajusta perfectamente a este pinheader de 2.54 mm pitch. Donde están cableados los cuatro pines del SPI + alimentación (GND+VCC)

Sobre la parte de drivers, poco puedo aportar, más que un ejemplo para conectar una SPI externamente. Es necesario añadir código de platform data para que registre nuestro dirver concreto.

http://codepad.org/5rcnLkIy

En este caso hice un particionado de la SPI, de forma que puedo flashear cómodamente la partición que me interese.


Ya tenemos el SPI del hg556a al descubierto, ahora no hay excusas para no experimentar conectando chismes SPI como displays o lo que sea.

¿alguien se atreve?

 ;)

Desconectado jar229

  • Moderador
  • *
  • Mensajes: 4607
Re:
« Respuesta #1 en: 23-03-2014, 18:21 (Domingo) »
Lo vuelvo a repetir: que envidia me dais los mañosos con el soldador.

Magnífico trabajo danitool ;-)

Enviado desde mi CUBOT GT99

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re: HG556a: interfaz SPI
« Respuesta #2 en: 23-03-2014, 18:41 (Domingo) »
Y pensar que le acabo de preguntar algo parecido a gmtii sobre el VH4032N para intentar sacarle partido a los GPIOS...

¿No pensáis que sería una buena idea hacer un hilo aparte dedicado a los pines extra que se hayan encontrado a cada modelo de router?

danitool: me has dado la vida con los HG556 que tengo por aquí tirados haciendo de centros multimedia...  ;D
« Última modificación: 23-03-2014, 18:43 (Domingo) por Tki2000 »

mojopicon

  • Visitante
Re: HG556a: interfaz SPI
« Respuesta #3 en: 03-05-2014, 20:38 (Sábado) »
Un aporte estupendo, vaya curradas te pegas.

Voy a intentar testearlo con mi lcd. De momento ya he soldado los cables, que por cierto, menudo coñazo para soldar con tantos terminales juntos y tan pequeños.

Una pregunta, ¿se han identificado más GPIOS aparte del 25? He estado buscando pero no encuentro nada y voy a necesitar al menos una más para el reset del lcd.


Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re: HG556a: interfaz SPI
« Respuesta #4 en: 03-05-2014, 20:51 (Sábado) »
Un aporte estupendo, vaya curradas te pegas.

Voy a intentar testearlo con mi lcd. De momento ya he soldado los cables, que por cierto, menudo coñazo para soldar con tantos terminales juntos y tan pequeños.

Una pregunta, ¿se han identificado más GPIOS aparte del 25? He estado buscando pero no encuentro nada y voy a necesitar al menos una más para el reset del lcd.

Si no me equivoco, los GPIOS 24 y 32 que van al chip Legerity. Puedes verlos en http://wiki.openwrt.org/toh/huawei/hg556a.
No sé si se pueden usar directamente sin afectar al router. El chip Legerity creo que se encarga de la VoIP y en este router no se utiliza.
Si me equivoco que alguien me corrija.

mojopicon

  • Visitante
Re: HG556a: interfaz SPI
« Respuesta #5 en: 03-05-2014, 20:57 (Sábado) »
Gracias Tki2000, voy a probar.

PD. más soldaduras microscópicas...  :'(

mojopicon

  • Visitante
Re: HG556a: interfaz SPI
« Respuesta #6 en: 04-05-2014, 16:00 (Domingo) »
Pues ya he conseguido hacer funcionar mi display LCD  >:( >:( >:(

Aquí el vídeo:


En ese vídeo el puerto está configurado a 0.5MHz, he podido aumentar la velocidad hasta 20MHz. No se cuál es el límite, no he querido probar más allá de esa velocidad pero supongo que lo establece la propia arquitectura.

En breve subiré un vídeo mostrando el funcionamiento a 20Mhz

Gracias a danitool por el estupendo trabajo que hizo descubriendo el pinout del puerto y otras gpios.

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re: HG556a: interfaz SPI
« Respuesta #7 en: 04-05-2014, 17:27 (Domingo) »
Pues ya he conseguido hacer funcionar mi display LCD  >:( >:( >:(

Aquí el vídeo:


En ese vídeo el puerto está configurado a 0.5MHz, he podido aumentar la velocidad hasta 20MHz. No se cuál es el límite, no he querido probar más allá de esa velocidad pero supongo que lo establece la propia arquitectura.

En breve subiré un vídeo mostrando el funcionamiento a 20Mhz

Gracias a danitool por el estupendo trabajo que hizo descubriendo el pinout del puerto y otras gpios.

¡Qué "mostruo" estás hecho...!  >:( >:( >:(

mojopicon

  • Visitante
Re: HG556a: interfaz SPI
« Respuesta #8 en: 04-05-2014, 17:56 (Domingo) »
Y aqui está el vídeo prometido, con el puerto configurado a 50Mhz:



Aunque ya no he notado mejora significativa de 20MHz a 50Mhz, asi que por ahi debe rondar el límite. Según mis cálculos, se está refrescando a unos 14 fps aproximadamente, lo que hace posible mostrar animaciones e incluso algún vídeo.

Por cierto, el lcd que estoy usando es este:
http://www.ebay.es/itm/1-8-SPI-TFT-LCD-Display-Module-Serial-128-160-PCB-Adapter-Power-IC-SD-Socket-/200951258962?pt=LH_DefaultDomain_0&hash=item2ec9a0df52

No es una maravilla, pero por menos de 4 euros, está más que bien.

danitool

  • Visitante
Re: HG556a: interfaz SPI
« Respuesta #9 en: 04-05-2014, 18:22 (Domingo) »
mojopicon eres mi héroe

Esto se merece un aplauso de los grandes  >:( >:( >:(

Y sí, el límite del hardware está en 20 MHz. Si no te importa tal vez añada el video a la wiki.

Saludos.

mojopicon

  • Visitante
Re: HG556a: interfaz SPI
« Respuesta #10 en: 04-05-2014, 19:19 (Domingo) »
mojopicon eres mi héroe
Ya será menos, que llevo 6 meses haciendo el gili****s interfaceando el lcd con un pic conectado por usb al router, consiguiendo una tasa de refresco 10 veces menor a la que he logrado ahora. Pero a estas alturas del proyecto, ya se queda así.

El vídeo puedes publicarlo donde quieras, si lo ves oportuno.

Noltari

  • Visitante
Re: HG556a: interfaz SPI
« Respuesta #11 en: 10-05-2014, 12:59 (Sábado) »
Buenos días,

Después de animarme a hacer el mod del puerto SPI y de hacer algunas pruebas, he de decir que el driver SPI de brcm63xx tiene algún bug que otro, ya que me ha sido imposible utilizar el puerto SPI con el módulo spidev para leer una memoria con flashrom tal y como he hecho en una Raspberry Pi con OpenWrt. Sin embargo, no he tenido ningún problema en utilizar el método de danitool para leer la memoria con MTD.
Además, también he realizado alguna que otra prueba con mi arduino conectado en modo esclavo y he comprobado que a veces no trabaja como debería.

Por ello, he de decir que si no os funciona algo al conectarlo por SPI no os frustréis, porque hay algo que está mal.
Le preguntaré a jogo a ver qué me cuenta.



Saludos!
« Última modificación: 10-05-2014, 13:00 (Sábado) por Noltari »

Noltari

  • Visitante
Re: HG556a: interfaz SPI
« Respuesta #12 en: 28-05-2014, 14:15 (Miércoles) »
Y aqui está el vídeo prometido, con el puerto configurado a 50Mhz:



Aunque ya no he notado mejora significativa de 20MHz a 50Mhz, asi que por ahi debe rondar el límite. Según mis cálculos, se está refrescando a unos 14 fps aproximadamente, lo que hace posible mostrar animaciones e incluso algún vídeo.

Por cierto, el lcd que estoy usando es este:
http://www.ebay.es/itm/1-8-SPI-TFT-LCD-Display-Module-Serial-128-160-PCB-Adapter-Power-IC-SD-Socket-/200951258962?pt=LH_DefaultDomain_0&hash=item2ec9a0df52

No es una maravilla, pero por menos de 4 euros, está más que bien.
Buenas,

Me ha llegado el LCD que comentas, pero no consigo echarlo a andar...
Sospecho que está mal, porque he probado con el Arduino con unas cuantas librerías distintas (UTFT, TFTLibrary, Adafruit...) y no consigo que funcione.
¿Podrías explicar un poco más cómo has conseguido que funcionara?
Imagino que has utilizado lcd4linux con el driver del spidev, ¿me equivoco?

Saludos.

mojopicon

  • Visitante
Re: HG556a: interfaz SPI
« Respuesta #13 en: 28-05-2014, 14:42 (Miércoles) »
Usé el driver spidev pero no lcd4linux, entre otras cosas porque ya me había peleado bastante con este lcd, y me resultaba más sencillo portar mis rutinas de bajo nivel directamente a C.

de los 8 pines del lcd, conecté el 3 (data/command) a la gpio 24 y el 1 (Reset) a la gpio 25. Estos pines son propios del lcd, no forman parte del estándar spi.

Te dejo un pastebin con mi programa de testeo:
http://pastebin.com/k4Qx7CS6

El código está basado en el spidev_test.c, yo le añadí las rutinas necesarias para inicializar y dibujar en el lcd.
https://www.kernel.org/doc/Documentation/spi/spidev_test.c

mojopicon

  • Visitante
Re: HG556a: interfaz SPI
« Respuesta #14 en: 11-06-2014, 23:45 (Miércoles) »
¿Cómo va? ¿Has conseguido algo?

mojopicon

  • Visitante
Re: HG556a: interfaz SPI
« Respuesta #15 en: 23-06-2014, 19:31 (Lunes) »
Acaban de llegarme varios tft's que pedí al mismo vendedor y cuál es mi sorpresa, que no son exactamente iguales a los primeros que pedí y ahora no me funcionan  :'(
Los antiguos venían marcados como QDtech, y usaban el driver HX8353-C. Los nuevos no tengo muy claro qué driver usan, aunque sospecho que montan el S6D02A1 de Samsung. Se supone que la librería UTFT los soporta, así que iré haciendo pruebas a ver si andan.

mojopicon

  • Visitante
Re: HG556a: interfaz SPI
« Respuesta #16 en: 24-06-2014, 13:44 (Martes) »
Pues ya lo hice funcionar  :D

Resumiendo:

Módulos marcados como QDtech-TFTM1802, montan driver HX8353-C
Módulos marcados como 1.8 TFT MODULE, montan driver S6D02A1A01

(EDITO: no estoy seguro de que haya relación directa entre la inscripción del módulo y el driver que montan. En mi caso ha sido así, pero no descarto que este hecho sea totalmente aleatorio).

Ambos drivers son bastante compatibles entre sí. La gran diferencia parece ser la secuencia de inicialización del display, porque la lista de comandos es idéntica.

La librería UTFT soporta a ambos, pero tengo entendido que no en todas las versiones de la misma.
Dejo enlace a una que parece que funciona:
http://www.mediafire.com/download/o7bnmuvb2pj559j/UTFT.zip

Digo parece, porque la librería es para arduino y no la he testeado, pero porté la secuencia de inicialización a c, y funciona perfectamente.
« Última modificación: 25-06-2014, 19:53 (Miércoles) por mojopicon »

mojopicon

  • Visitante
Re: HG556a: interfaz SPI
« Respuesta #17 en: 25-06-2014, 19:51 (Miércoles) »
Perdón por monopolizar el hilo, pero tengo que dar un apunte más sobre los módulos TFT con driver S6D02A1A.

Conectándolo al puerto spi del HG556a no hubo mayores problemas. Sin embargo cuando intenté manejarlo con el pic, no había manera de hacerlo andar.

Después de mucho tira y afloja y a punto de rendirme, una búsqueda en google me dio la clave:

El driver S6D02A1A funciona a 3.3v, lo cual implica que aunque el módulo en sí viene configurado para 5v, las líneas de datos deben alimentarse a 3.3v como máximo. De aquí se deduce que el puerto SPI del router funciona a 3.3v.

La solución para hacerlo funcionar en sistemas alimentados a 5v como arduíno, es añadir una resistencia de 1k o similar a cada una de las 5 líneas de datos y control del módulo (RST, CS, D/C, DIN y CLK).
« Última modificación: 25-06-2014, 19:58 (Miércoles) por mojopicon »