Seguridad Wireless - Wifi
Equipos y materiales => Puntos de acceso, routers, switchs y bridges => Openwrt & LEDE => Mensaje iniciado por: danitool 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)
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:
(https://docs.google.com/uc?export=download&id=0B-EMoBe-_OdBWkpzZ0lPcXpiQlE)
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?
;)
-
Lo vuelvo a repetir: que envidia me dais los mañosos con el soldador.
Magnífico trabajo danitool ;-)
Enviado desde mi CUBOT GT99
-
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
-
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.
-
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 (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.
-
Gracias Tki2000, voy a probar.
PD. más soldaduras microscópicas... :'(
-
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.
-
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...! >:( >:( >:(
-
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.
-
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 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.
-
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.
(https://dl.dropboxusercontent.com/u/4708147/openwrt/bcm63xx/HG556a/images/HG556a_SPI.JPG) (https://dl.dropboxusercontent.com/u/4708147/openwrt/bcm63xx/HG556a/images/HG556a_SPI.JPG)
Saludos!
-
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.
-
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
-
¿Cómo va? ¿Has conseguido algo?
-
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.
-
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.
-
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).