2019/07/29

Germinómetro con sAPI del firmware v3

Necesitaba medir humedad y temperatura para un trabajo práctico escolar y recordé que puedo hacerme un sensor, qué loco, ¿no?




Busqué la edu-ciaa-nxp, el dht-11 y el poncho educativo por el display lcd, me bajé el Firmware V3 que Eric muy recientemente ha publicado y adelante:

git clone https://github.com/ciaa/firmware_v3.git

Temperatura y humedad



Ando medio raro, leí las instrucciones ANTES de fallar.

Tambien un poco vago, llamé

make board_select board_program


Eligiendo la placa y el path, examples/c/sapi/dht11_temp_humidity, para que me cree board.mk

Hice el export para que encuentre el compilador y lo de siempre...


export PATH=$PATH:....

make

make download

miniterm.py /dev/ttyUSB0 115200

Y anda.


Display


Parecido, la ruta es examples/c/sapi/lcd/gpio y no hace falta redefinir la placa y no sólo anda, sino que ya dice "Temp y Hum", parece que la estación meteorológica es el nuevo blinky.

Integración


Tomé el medidor, aunque pudo haber sido el del lcd y le transferí lo que necesitaba del lcd, que era la inicialización, el caracter de grados y lcdGoToXY(), lcdSendStringRaw(), etc. Metí las mediciones con un sprintf() en los buffers de entrada de lcdSendStringRaw() y listo, anda.

Finalmente lo saqué todo a mi repo y en el repo del firmware_v3 puse un symlink al mío, seleccioné el programa y lo habitual:

mkdir projects
cd projects
ln -s ../../../cpantel/Germinometro
cd ..
make select_program
make clean && make && make download

No, no tan fácil, a make select_program no le gustó el symlink:

Error: this script only work with paths inside repository folder.
If you want to use a path outside repository folder please change program.mk manualy.


Y como me había llevado sólo una hora llegar hasta acá, moví el proyecto a la carpeta al lado de los ejemplos y listo.



El sistema completo


Ya me supera un poco poner una tarjeta SD para registrar las mediciones y ponerle una pila, ponerlo en hora, así que le conecté una netbook y por puerto serial, que ya me lo había dado el primer ejemplo, las mando a un txt con un timestamp


miniterm.py /dev/ttyUSB2 115200 \
| while read LINE; do \
  TS=$(date "+%Y-%m-%d %H:%M:%S");\
  echo $TS $LINE; \
done \
| tee --append log.txt

Le pido a miniterm.py o tu programa favorito tal que puedas colgarte de su STDOUT que lea cada linea, le antepongo un timestamp y lo tiro a la pantalla y a un archivo en modo concatenación.

El código en github.

Nota de color


Me confundí al comienzo y me estaba compilando el ejemplo por default, que muestra "LED apagado" en el serial.

Para diagnosticar mis amigos fueron
  • buscar strings en el ejecutable para comprobar que se estuviera grabando
  • git grep con el texto de lo que estaba viendo en el serial
  • borrar .gitignore para ver que está tocando el proceso de compilación, lo recuperás con:

    git checkout .gitignore

2019/07/26

Como entender y lidiar con XDC files en Vivado 2018.2

En esta entrada relato el camino un tanto sinuoso de comprensión de que es un archivo XDC que he seguido.

Siguiendo los tutoriales de Vivado, que son muy claros, llegué a la parte de los constraints, los archivos XDC que dicen como se van a conectar las patitas del FPGA con los periféricos de la placa que tengas, en mi caso Nexys-4 DDR. Si, en la página dice "retired". Entre que la pedí y llegó, eso pasó.

Previamente, había comenzado con información específica de la placa que tengo, de seguir vos este camino con otra placa, tendrías que adaptarte.

En el paso 6 del tutorial dice de bajarte el zip de constraints, pero preferí pegarle al repo:

git clone https://github.com/Digilent/digilent-xdc

Este es el momento en que uno debería leer la documentación para comprender que es un XDC, pero como siempre elegí arrojarme contra los archivos a ver que se puede comprender y dejar el manual para más tarde, esto es lo que hice y me funcionó bastante bien, me las puede arreglar con la adaptación de proyectos ISE a Vivado, lo que implica algo de uso de los XDC pues hay que recrearlos a partir de los UCF y de las interfaces del top module. Esto lo mostraré en Para estudiar Programming FPGAs: Getting Started with Verilog, cuando termine.


Volviendo, hay varios proyectos de ejempo y de ahí obtuve los links a los demos y en cada uno a los repos:

Los cloné:

git clone https://github.com/Digilent/Nexys-4-DDR-GPIO.git
git clone https://github.com/Digilent/Nexys-4-DDR-Keyboard.git
git clone https://github.com/Digilent/Nexys-4-DDR-OOB
git clone https://github.com/Digilent/Nexys-4-DDR-XADC.git


Busqué los XDC:

find Nexys-4-DDR-* -iname "*xdc"

Nexys-4-DDR-GPIO/src/constraints/Nexys4DDR_Master.xdc
Nexys-4-DDR-Keyboard/src/constraints/Nexys4DDR_Master.xdc
Nexys-4-DDR-OOB/src/constraints/Nexys4DDR_C.xdc
Nexys-4-DDR-XADC/src/constraints/Nexys4DDR_Master.xdc


Y a jugar con kdiff3 o tu herramienta de comparación preferida.

A mi me gusta esta:

kdiff3 Nexys-4-DDR-GPIO/src/constraints/Nexys4DDR_Master.xdc \
       Nexys-4-DDR-XADC/src/constraints/Nexys4DDR_Master.xdc \
       Nexys-4-DDR-Keyboard/src/constraints/Nexys4DDR_Master.xdc

Comparé entonces entre los cuatro proyectos y contra digilent-xdc y pensé que por algún perverso motivo, en los get_ports los nombres cambian. Luego encontré que responde a un motivo muy sencillo: son los nombres que se le dan en los módulos a los pines, pueden venir de un diseño genérico, de otra placa, no hay manera que esos nombres sean los mismos en distintos proyectos.

Esto es el proyecto de GPIO vs el XDC virgen, en los botones cambian los nombres y en los pines de los 7 segmentos, además cambia el tipo.




Lo que dice luego es que más allá de des/comentar no es recomendado cambiar nada al menos del clock.

El proyecto más interesante es el OOB, pues toca casi todos los periféricos.



Dejando un poco de lado la exploración, que a mi me gusta y sirve pues es divertida y me hace hallar muchas preguntas que luego la documentación me responde, he aquí lo que he aprendido en la documentación:

En una CPU y cualquier integrado "común", los pines tienen funcionalidad fijas: uno es clock(), otro es IO y así.

 
By Bill Bertram - Own work, CC BY 2.5, https://commons.wikimedia.org/w/index.php?curid=473063


En un microcontrolador, que contiene un CPU y periféricos, cada pin tiene una o más posibles funcionalidades y un mecanismo para configurar cual de ellas es elegida. Los pines configurables, permiten entonces conectarse internamente a ciertos periféricos internos para exponer su funcionalidad al exterior del chip

En esta imagen sacada del documento elaborado por Eric Pernia que también aportó el párrafo anterior y la siguiente enumeración (gracias Eric), se pueden apreciar las funciones:
  • Nombre del pin de la serigrafía o donde está conectado (ej. LCD1 es un nombre de pin de la serigrafía, es horrible la serigrafía de la EDU-CIAA-NXP, confunde más de lo que ayuda).
  • Número de pin del microcontrolador (ej. 9).
  • Nombre del pin que le da el fabricante (ej. P4_4).
  • Función 0 (ej. GPIO2[4]).
  • Función 1 (ej. CTOUT_2).
  • Función 2 (ej. LCD_VD1).
  • Función 3 (ej. Reserved). Función 4 (ej. Reserved).
  • Función 5 (ej. LCD_VD20). Función 6 (ej. U3_DIR).
  • Función 7 (ej. SGPIO10).
  • ANALOG_SEL (ej. DAC).



El resto de los diagramas del proyecto CIAA están aquí.


Una FPGA puede mapear casi cualquier cosa que tenga adentro a casi cualquier pin y digo "casi" por las dudas para no decir "todo".


Pero, la FPGA está físicamente soldada a una placa entonces sus pines ya están fijados a ciertos cirtuitos electrónicos físicos inamovibles. Eso nos regresa a la situación de la CPU con respecto a algunos pines. Otros son como los de un microcontralador.

El XDC tiene entonces ese mapeo y lo provée el fabricante de la placa.

A fines prácticos:

set_property -dict { PACKAGE_PIN H17 IOSTANDARD LVCMOS33 } [get_ports { running_led }]; 

#IO_L18P_T2_A24_15 Sch=led[0]

PACKAGE_PIN: dice cuál pin físico es, no habría que tocar.

IOSTANDARD: tiene que ver con características electrónicas, setea a LVCMOS33, que es GPIO.

Para el pmod JXADC tiene IOSTANDARD LVDS, entiendo son entradas analógicas.

get_ports: dice como se va a llamar y es lo único que los básicos como yo podemos modificar.


El comentario es útil dejarlo para saber cual era el nombre original.

En Zynq, que es un chip con un microcontrolador y una FPGA, mmh, ahí la cosa se debe complicar, cuando llegue agregaré acá o en otra entrada.

Tambien quedará para el futuro el clock:

set_property -dict { PACKAGE_PIN E3    IOSTANDARD LVCMOS33 } [get_ports { CLK }];
                                                                          #IO_L12P_T1_MRCC_35 Sch=clk100mhz
create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports { CLK }];



A fines más prácticos, el modo de usarlo que he destilado es:

  • Tener el archivo, por ejemplo en mi caso Nexys-4-DDR-Master.xdc en algún lugar accesible, con permisos 644.
  • Crear el proyecto
  • Copiarlo y cambiarle los permisos a 664.
  • Ajustar
¿Por qué el asuntito de los permisos? Por que si al agregarlo al proyecto desde Vivado te equivocás y no le ponés "copiar", te puede quedar referenciado a tu archivo común y cuando lo modifiques rompes los otros proyectos que puedan tener el mismo defecto. Le pasó a un amigo y yo te cuento.

2019/07/11

Introduction to Packet Tracer

Habiendo visto que Packet Tracer Mobile era aceptable, me propuse ver por que Packet Tracer dura cinco veces más tiempo. Sin embargo, mi experiencia con Mobile, es mucho más divertida que esto.

Dejando de lado que la usabilidad de la aplicación Desktop es grosera y esperablemente superior a la mobile, los contenidos del curso son mucho más amenos y profundos. Más allá de lo que digan o den a entender las descripciones de los cursos, el de Mobile sólo sirve para quien ya hizo el Desktop y quiere hacer una adaptación rápida a Mobile.

Si no sabés nada de networking y programación, el curso está ok, pero te vas a quedar sin aprovechar varias cosas. Si sí sabés, al final es una fiesta cuando le metés código en javascript o python a componentes que podés crear y configurar. Me aleja de mi camino de aprendizaje ponerme a explorar a fondo, el tiempo es un bien escaso.


Algunos comentarios disociados:

Ojo con borrar en la vista física, si borrás lo el contenedor que contiene lo lógico, parece que no hay undo. O quizás hay un solo nivel.

Detallecito, en linux no funciona alt-click para cambiar el estado de objetos, como apretar un botón o abrir una puerta.

Muy bonita la vista física para motivar y gamificar, pero es eye candy. Está muy buena para hacer las animaciones de un curso de networking.

El señor relator se muy simpático, o al menos su voz y su AWESOME!s

Las preguntas y respuestas, bue, son como siempre en este tipo de exámenes. No me imagino respondiéndolas en una certificación, por ejemplo que pregunten cuál es el iconito de un archivo .pka. Otras, como cuál es la imagen del botón de un cierto comando, mostrándola aislada no es lo mismo que te muestren toda la botonera, hay cosas que uno recuerda mecánicamente.

Otra cosita que me ofende es que el examen dice que si salís de la GUI sin salvar perdés los cambios, que es tal como aprendiste hasta ese momento. Sin embargo, en el capítulo siguiente se introduce el Home Gateway para IoT, que no tiene botón de salvar en la GUI. Cuandó hice el CCNA hace mucho, pasaba lo mismo, una red clase C tenía 256 nodos disponibles hasta que la clase siguiente eran 254. En lugar de decirte de una 254 y dos reservados, luego se verá para qué, te tratan como si fueras una pieza de equipamiento, una memoria donde primero escribís algo y luego lo parcheás y eso me molesta.

De todos modos, recomiendo este curso


2019/07/08

Introduction to Packet Tracer Mobile


En una materia que estoy cursando, hemos visto Packet Tracer, una herramienta de simulación y entrenamiento de Cisco. He hallado dos capacitaciones online disponibles, Introduction to Packet Tracer y Packet Tracer Mobile


Para ver la calidad sin invertir mucho tiempo, elegí la mobile de dos horas en lugar de la otra de diez horas, que aunque aburrida la reseña, está acá.

Necesito un celular y el mío no me sirve, en parte por que no le quiero meter basura y en parte no le entra, ya que es minúsculo.

Escarbando en un cajón hallé uno medio roto que me habían regalado, un LGP712, que tenía Android 4.1.x y Packet Tracer necesita 4.2.x, así que hacer el upgrade.



Crónica de resolución de dependencias


Esta sección es optativa y nada tiene que ver con el curso, si no con actualizar un celular primitivo a la versión apropiada de sistema operativo, podés mirar los dibujitos y saltar a al resumen o al curso, que finalmente ha sido una excusa para investigar otras cosas, he utilizado mucho más tiempo en esto que en el curso en sí.

Hallé un firmware 4.4.x y tras averiguar un poquito, hay que usar una herramienta específica y cargar unos drivers . Como no sé si tienen bichitos:

  • me busqué una imagen de máquina virtual
  • le copié todos los archivos
  • extraje la herramienta
  • puse en esa carpeta el firmware
  • conecté el celular (devices->USB-> LGE LG-p712)


  • ejecuté la herramienta y
  • seguí las instrucciones que dicen poner 
    • "CDMA"
    • "DIAG" 
    • y darle a "CSE Flash"

pues estoy reemplazando por un firmware distinto.






Por las dudas, cuando abrió el diálogo final, le pedí "Read Phone Information" y me dijo que no hallaba el puerto, mmh, debí haber tomado el curso largo...



Supongamos que es algo de permisos, vamos como root.

El problema es que no se puede ejecutar como root así nomás, por que si hacés

sudo VBoxManage startvm "maquina"

no la halla en el perfil de root, entonces hay que exportarla

VBoxManage export "maquina" -o lg.ova

y luego importarla

sudo --login VBoxManage import /home/usuario/log.ova

Ojo con el --login, si no lo ponés usa el home del usuario con que invocaste. No estoy seguro que falle si no, pero prefiero no arriesgar.

Al final de todo hay que recordar limpiar el desastre, o sea, borrar lg.ova y /root/VirtualBox VM

Volviendo al camino, ahora si podemos hacer

sudo --login VBoxManage startvm "maquina"


Fail....

Conectando a USB 2.0 en lugar de USB 3.0, Fail...



Salteando pasos, al darle a START directamente, se abre una subaplicación con país Corea, pero se puede elegir idioma inglés. Esta falla pues no puede comunicarse con el dispositivo.



Hallé una página con firmwares, que ofrecía uno de Uruguay, pero lleva a una pesadilla de scammers, nunca al download, hora de dormir.




Luego, al día siguiente, me queda un poco nebuloso lo que hice, quizo conectarse a algún sitio, pero no lo halló, comprobé que no es por falta de conectividad de red.





En algún momento se puso en "emergency mode" y ahí lo perdí la primera vez, pero luego estuve atento a reconectar cada vez que se desconectaba, puse unas reglas pero no sé si llegaron a hacer efecto.





Y finalmente, tras cuarenta minutos de reintentos, coronados con un glorioso "la aplicación ha dejado de funcionar", tengo Android 4.4.2, ¡já!

Lo siguiente es instalar el programa, pero no tengo ganas de meter mis credenciales para conectar al Store, así que pretendo obtener el .apk que debe haberse bajado para una tablet según cuento más adelante.

No puedo abrir una terminal para ejecutar un find, por suerte averigüé que aunque mi Desktop Manager no sabe cómo hacerlo, se puede hallar el punto de montaje, está cerca de

/run/user/1000/gvfs/mtp:....

1000 es el número de tu usuario, se consigue de varias maneras, una es id.

/run/user/$(id --user)/gvfs/



No estaba...

¿En qué situación me hallo? En que no quiero poner mis credenciales de gmail en un firmware que no sé de dónde salió.

Necesito una extensión para bajarlo en un navegador, pero no sé si esa extensión tiene bichito. APKCombo y APKDownloader para Firefox servirían, pero me piden cosas como:

  • Access your data for all websites
  • Access browser tabs

Puedo usar un downloader que no sé si le va a meter bichito, pero ni me importa, pues no tengo nada en ese celular y luego le mando un factory reset y recuerdo siempre que puede estar embichado. Hay downloaders pero

  • http://apkleecher.com/, no me trae lo que quiero
  • https://apk-dl.com/, ronda de scammers
  • https://www.apkturbo.com, pero recién cuando 
    • Your download is starting. If it doesn't start, please click here.

El hash 7451b22367376e9d22d9d02c149a1492 no aparece en ningún lado como malo, virustotal dice que está ok


Resumen de actualización de firmware


  • USB 2.0 está ok
  • Usuario no root está ok
  • Quizás debe haber conectividad
  • Hay que estar atento a reconectar en el gestor de dispositivos
  • Quizás las reglas ayuden
  • Hay que probar varias, muchas veces
  • Mejor sería no hacer desde una virtual


En algún momento antes de que se destrabara la comunicación con el dispositivo, tomé otro enfoque, que fué, ¿pará qué querría esta app en un celular, donde no se puede ver nada? Recordé que tengo por ahí dos tablets, en realidad una sola, pues la más grande tiene el conector roto y por más que se lo reemplacé no lo hice bien, más tarea para otro día.

En la que sí funciona, la instalación falló diciendo que no podía bajar los archivos, pero lo dijo después de haberlos bajado. Miré los mensajes negativos en el store, pero eran todos diciendo que no arrancaba, fallaba despues de arrancar o que se veía mal, losers, dice que es para una pantalla grande...

Copié el apk, lo instalé y salvo que se vé miserablemente chiquito y lento, parece todo ok, mañana seguiré.




Por fín, el curso...

No olvidemos que hay dos componentes en juego, el curso online y la app.


La navegación del curso no es muy fluida, si avanzás o retrocedés usando las flechas internas, se rompe Flash a veces.


La parte de simulación, los PDU, los escenarios me resulta un poco difícil de asimilar con la interfaz tan limitada, tuve que complementarlo usando la aplicación de escritorio.

Me sirvió como primer acercamiento.

Con respecto a la aplicación, si se me permite:


Muy bueno el detalle de que no se le pueden poner o sacar componentes a los dispositivos sin apagarlos.


Ya había leido quejas de que se usa un teclado propio en lugar del provisto por el sistema operativo. Error capa 8, en tu teclado podrías tener letras y símbolos que no corresponden a lo que el dispositivo espera, está ok así.

Tambien la falta de zoom, evidentemente esas personas son nativas mobile y quizás no entienden la adaptación, pues la aplicación permite pinch sobre la zona de trabajo, no sobre la interfaz ni en la vista física, pero no se puede reclamar, dice que hay que usar una pantalla grande, sorry.


Finalmente, hay un examen razonable, la mitad de las preguntas son irrelevantes para mi como si la aplicación es equivalente a la de desktop o si hace falta determinadas cuentas para usar o usar completamente.

Para obtener el certificado, va a netacad y en el curso terminado dice "Get Certificate", le decís quién querés que firme y te dá un pdf.