Nov 09

12h amb Arduino

Reading time: 6 – 9 minutes

En un calaix tenia guardat un Arduino Duemilenove i una colla de sensors, finalment aquest passat dissabte no vaig poder evitar-ho i vaig haver-m’hi de posar. La temptació va ser massa forta. Així doncs, en aquest post el que vull és explicar-vos com he passat les meves primeres 12h sobre aquesta plataforma d’Open Hardware. Tan de temps treballant amb el concepte Open Source i per primera vegada començo a parlar d’Open Hardware això és una sensació que no té preu.

Arduino Duemilanove

Bé doncs, primer de tot comentar que el llenguatge de programació és molt simple. Tan és així que vaig invertir unes 2h en revisar tots els llibres que tinc d’Arduino en busca de més funcions o usos del mateix que compliquessin una mica la cosa pensant que no podia ser tot tan senzill. Diria que he passat massa temps amb llenguatges d’alt nivell i al tornar al món proper al hardware tot canvia tant que no me’n sabia fer el càrrec. Així doncs, amb ben poques hores ús asseguro que tindreu per la mà totes o quasi totes les instruccions del llenguatge. El que podria semblar més difíci, tot i que sota el meu punt de vista crec que no ho és gens, és fer-se a la idea de que després d’iniciar el sistema tota la lògica estarà tancada en un bucle infinit que esta esperant que els sensors captin algún tipus d’entrada per disparar la lògica. Potser el més interessant és el fet de poder introduir el concepte d’interrupcions per hardware que et permeten secuestrar el fil d’execució en qualsevol moment del codi per llençar una rutina.

Després de fer les típiques proves amb LEDs i pulsadors, vaig posar-me a investigar les entrades i sortides analògiques amb sensors de temperatura, humitat, proximitat, lluminositat i d’altres similars. Coneixer i dominar tot això és qüestió de ben poca estona però crec que val la pena passar-hi per sentir-se còmode amb les eines de programació i el propi hardware. Us recomano intentar retenir tots els pins que té la placa alhora d’entendre el codi és molt més senzill.

arduino

Arribats a aquest punt vaig descobrir que usar la consola serie per mostrar-hi informació de depuració és una de les formes més senzilles de controlar si els programes estan fent el que ens interessa. Així doncs, en aquest punt usava el port serie per volcar-hi tot tipus de comentaris explicatius per tal de seguir el fil del codi a mode de consola de treball. Per tant, us recomano tenir a mà un ‘minicom’ obert constanment per pode recol·lectar tot el feedbak que ens interessi.

On la cosa em va enganxar de veritat és quan vaig començar a posar-me amb els temes d’infra-rojos; concretament a l’hora de decodificar trames enviades per comandaments a distància i d’altres artilugis similars. És realment interessant fer implementacions manuals d’aquest tema usant els rellotges interns que té el dispositiu. T’ajuda a entendre al 100% com funcionen les codificacions dels comandaments a distància per infra-rojos. Després descobreixes que la cosa es pot simplificar moltíssim usant llibreries que t’ho gestionen tot i que t’ofereixen una serie d’interficies de més alt nivell que permeten desenvolupar aplicacions molt senzilles sense haver de preocupar-se dels detalls de les internalitats que comentava abans. Llavors és quan realment pots arribar a fer coses interessants tan a l’hora de rebre com d’enviar informació per infra-rojos.

El pas obvi que venia després d’això era començar a jugar amb protocols de comunicacinos inal·lambrics que per algo tinc vocació telemàtica, no? la veritat és que gràcies a una llibreria d’alt nivell anomenada ‘VirtualWire‘ que parla sobre com usar transmisors i receptors de 433MHz modulats amb ASK per enviar i rebre trames a través de l’aire vaig entendre al 100% com funcionava el sistema de control remot de persianes i calefacció que tinc a casa. De fet, em vaig quedar amb les ganes de seguir jugant amb aquest tema per manca de components electrònics que no tenia a mà. Seguint amb aquesta línia tot i que no vaig fer-ne proves vaig estar veient que és força simple treballar amb busos de dades SPI i I2C. Cosa que obre un món de possibilitats a l’hora de fer interconnexions amb certs aparells.

He de dir que si sou persones que us costa entendre l’electrònica analògica, com a mi, no ús heu de preocupar es poden fer miracles amb Arduino sense tenir ni idea de perquè s’acostuma a posar una resistència davant d’un LED. Això si, arriba un moment que la pròpia motivació per tot el que estas fent et porta a rellegir-te ni que sigui en diagonal els capítols dedicats a l’electrònica que tenen molts dels llibres d’Arduino. Almenys en el meu cas amb uns 30-40min en vaig tenir prou per tornar-me a posar al cap tots els conceptes que havia estudiat en el seu dia i poder seguir endevant amb els meus experiemnts amb més coneixement de causa.

Tot i que pel que vaig fer a continuació no era necessari haver fet el repàs sobre electrònica no vaig poder evitar consultar com es feia per treballar amb els mòduls Ethernet, ZigBee i Wifi que té Arduino. Com que no tenia tot aquest hardware aquesta part només la vaig fer a nivell teòric però la veritat és que ja em va ser molt útil. Em va permetre entendre com es podia treballar amb tot plegat. Això si, ara el ‘gusanillo’ el tinc en la tecnologia ZigBee (IEEE 802.15.4) que mai he tocat de primera mà, així doncs, potser per reis em regalo algún mòdul d’aquesta tecnologia per trastejar-hi una mica, a veure què tal és tot això del ‘mesh-networking’ amb aquest protocol que tants adeptes ha guanyat en el món de l’embedded.

He de dir que de les 12h prop de 4h les vaig passar fullejant i llegint amb deteniment llibres i més llibres que tinc del tema, això em va servir per veure diferents formes de fer les coses i l’abast dels projectes que fa la gent amb l’Arduino cosa que és realment interessant per familiaritzar-se amb la tecnologia. Potser vaig repassar prop de 50 projectes amb aquestes hores i me’n vaig mirar amb lupa uns 10 cosa que em va anar molt bé per coneixer a fons molts temes que per manca de hardware i components electrònics no podia reproduir a casa.

Per cert, si algú s’esperava que aquest article fos un manual de com iniciar-se amb Arduino em sap molt greu però diria que fer això no té cap sentit ja que per internet n’hi ha moltíssims de manuals que expliquen com fer-s’ho per començar. A més, també hi ha moltíssims llibres disponibles a les llibreries i biblioteques a partir dels quals podeu tenir tutorials més que bons i detallats de com començar amb aquest tema. Així doncs, m’ha semblat que era més útil explicar-vos l’experiència de les meves primeres 12h amb aquesta tecnologia.

Jul 24

Desafio Networking [el problema]

This entry is part 1 of 3 in the series desafio networking

Reading time: 6 – 10 minutes

Escenario

Se dispone de un dispositivo de hardware con un linux embedded al que no se puede acceder ya que el fabricante no lo facilita, se ha intentado acceder pero no hemos sido capaces de acceder ni con nuestros medios ni con los de una importante empresa de electrónica. Creemos que el kernel es un 2.4.X por lo que observamos. El dispositivo tiene una pantalla y su finlidad es mediante un protocolo propietario y un protocolo de transporte de ficheros (FTP) descargar una playlist para reproducir en la pantalla.

A través de red se conecta al servidor del fabricante de donde recoje una playlist y unos contenidos multimedia. Escencialmente usa los puertos:

  • TCP/8889 (protocolo de control del fabricante) va en ‘plain text’ ya le hemos hecho la ingenieria inversa.
  • FTP en modo pasivo

Con el servidor del fabricante descarga el 99% de la veces correctamente y sin problemas. En el fichero adjunto ‘korea-ok.cap’ si lo examinais podreis ver que todo se desarrolla perfectamente. La IP privada que podeis ver es del dispositivo en la LAN y a través de una LMDS se conecta a Korea a la IP: 210.114.220.180, si os fijais el fabricante usa como servidor FTP un ‘Serv-U’ para Windows.

Problema

Se ha implementado el protocolo propietario del fabricante con Python y funciona perfectamente, el problema es al hacer la descarga por FTP. El dispositivo se conecta a nuestro servidor FTP y de forma completamente aleatoria cierra la transmisión sin motivo aparente y se reinicia el dispositivo. Esto siempre pasa mientras se esta haciendo una conexión FTP-control (21/tcp) o FTP-data (puerto aleatorio del ftp pasivo/tcp).

En el fichero ‘cwd-fail.cap’ se puede ver uno de los típicos fallos que tiene el dispositivo al intentar descargar a un servidor FTP local (en este caso un proftpd en una Gentoo). Concrectamente al mandar el comando FTP ‘CWD’ el dispositivo decide cerrar la conexión y no seguir con la descarga. Después de varios intentos se reinicia. Para no perderos con los paquetes he dejado en la captura sólo el socket que tiene el problema.

Para no despistar recordar que esto no tiene porqué pasar en el canal de FTP-control puede pasar también en un FTP-data, puede pasar al 1% de descarga del fichero, al 30%, 50%, 98%… es completamente aleatorio.

Para tener más ejemplos de errores se adjunta el fichero ‘local-fail.cap’ donde se puede ver como se da un error igual al anterior pero ahora en el canal de datos de FTP. Concretamente podeis ver como se cierra el socket en el paquete 916 sin motivo apararente. Comentar que los errores de checksum de TCP no son relevantes ya que son debidos a que la tarjeta de red no estaba como sigue:

# ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: off
tx-checksumming: off
scatter-gather: off
tcp segmentation offload: off
udp fragmentation offload: off
generic segmentation offload: off

En otras pruebas se han hecho con los parametros comentados y el error es el mismo. A pesar de que ya no aparecen las alertas por ‘checksum error’. Si se cree vital tener una captura sin los errores de checksum no hay problema en hacerla. Pero después de meses de pruebas esta claro que esto no es relevante.

Para demostrar que el comportamiento es aleatorio a continuación se adjunta un fichero ‘local-ok.cap’ con la captura de una sesión en el serividor FTP local que ha funcionado perfectamente. Se puede observar en el paquete: 18975 que se descarga bien el contenido de un fichero, concretamente un fichero .mpg, con este fichero finaliza todo el traspaso de datos correctamente.

Hardware y soft probado

Se han hecho infinidad de pruebas y de combinaciones:

5 servidores distintos:

  • 1 debian con kernel 2.6.24.5-grsec-xxxx-grs-ipv4-64 en el proveedor ovh.es (100Mpbs simétricos sin restricciones), servidor FTP proftpd puerto 2090/tcp
  • 1 debian con kernel 2.6.18-5-686 proveedor jazztel sin fw, ni restricción de ningún tipo 100Mbps simétricos contra internet y servidores FTP en el puerto 21 pure-ftpd y en el puerto 2090 proftpd.
  • 1 ubuntu con kernel 2.6.24-16-server proveedor jazztel con fortinet como fw en modo transparente, proftpd en puerto 2090.
  • 1 gentoo con kernel 2.6.25-gentoo-r5 en red local con proftpd en puerto 2090.
  • 1 windows xp virtualizado con vmware workstation 6 sobre gentoo con un servidor FTP Serv-U, la tarjeta de red virtual en modo bridget con la del sistema operativo host.

el comportamiento es el mismo con todas la combinaciones

Intuición de solución

Jugando con los parámetros del kernel de TCP (/proc/sys/net/ipv4) se consiguen hacer cambios de comportamiento en el error. Por ejemplo, se han hecho pruebas con:

tcp_adv_win_sacle = 0,1,2
tcp_allowed_congestion_control = cubic, bic, reno, etc.
tcp_base_mss = 512, 1024, 1500
tcp_dsack = 0,1
tcp_ecn = 0,1
tcp_fack = 0,1
tcp_sack = 0,1
tcp_syncookies = 0,1
tcp_timestamps = 0,1
tcp_workaround_signed_windows = 0,1
tcp_window_scaling = 0,1

infinidad de valores y combinaciones probadas en:

tcp_mem
tcp_moderate_rcvbuf
tcp_mtu_probing
tcp_rmem
tcp_tso_win_divisor
tcp_wmem

También se han hecho pruebas limitando el ancho de banda, y con algunos otros parámetros de kernel que ahora no recuerdo. Se ha probado de opimitzar los servers para rendir al máximo, al mínimo, por defecto… etc.

Lo que se consigue con todo esto es conseguir que algunas veces se haga la descarga, pero no se consigue afianzar patrones de forma feaciente, es decir, a menudo se sigue cerrando la conexión TCP.

FAQ de obviedades

  1. Es obvio que el firmware del dispositivo esta mal hecho, pero esto no se puede tocar.
  2. El dispositivo se puede configurar via una compact flash, donde se guarda un fichero de configuración, un fichero binario compilado para ARM y el contenido multimedia que se va descargando.
  3. Se ha intentado hablar mil veces con el fabricante pero es como hablar con una pared, a parte los técnicos no hablan inglés, sólo coreano. Increible, no?
  4. El problema lo tiene el stack TCP del dispositivo o algún otro elemento similar. Este es el que cierra la conexión!!! no se puede mantener la conexión abierta des del servidor cuando el dispositivo la ha cerrado, lo único que se puede hacer es evitar que el cliente la cierre. El problema es como.
  5. Si! el server del fabricante descarga bien via FTP en el 99% de los casos. Este es el gran probleam, parece tonta la pregunta pero me la han hecho como 20 veces, así que merecia estar aquí.

Ficheros

Los ficheros de los que se habla en este correo de pueden descargar de:

  • http://oriolrius.cat/downloads/korea-ok.cap
  • http://oriolrius.cat/downloads/cwd-fail.cap
  • http://oriolrius.cat/downloads/local-fail.cap
  • http://oriolrius.cat/downloads/local-ok.cap

Desafio

El entorno de laboratorio lo tengo montado en la oficina, esta abierta 24×7 para quedar conmigo para hacer pruebas in-situ. Obviamente responderé todo lo que sea online y orientaré con lo que pueda y más.

Este problema lo arrastro desde hace unos 4 meses y llevo casi 4 dias sin vida, sólo obsesionado buscando la solución pero no hay manera de ver la luz.

No dispongo de muchos recursos, debido a que ya he perdido muchísmo dinero buscando la solución durante todo este tiempo, pero bajo resultados se recompensará tanto como sea posible a la mente privilegiada que consiga dar con la solución.

Ya tengo solución

Después de darle vueltas al tema de momento no contaré las varias soluciones que a dia de hoy ya he enontrado al problemón. Así pue aprovecharé el problema para lanzar el podcast 1×11 describiendo con todo detalle el problema y dando algunas pistas de como llegar a la solución. Quizá a nadie le pique tanto la curiosidad como para seguir la solución con este detalle pero de esta forma mantengo un poco la intriga y si alguien realmente necesita saber la solución sin seguir el culebrón sólo tiene que mandarme un correo privado y se lo contaré. Para hacer boca deciros que la intuición de solución que tenia no era mala.

Oct 01

Gumstix Netstix 200xm-cf mu-ordinadors amb linux

Reading time: 1 – 2 minutes

L’agost del 2005 us parlava dels mu-ordinadors amb Linux doncs bé, ara aquells mateixos Gumstix tenen més models disponibles fins hi tot dins de la seva mini-caixa i amb unes prestacions igual de sorprenents que quan en vaig parlar per primer cop al blog.

gumstix_netstix_200xm-cf.jpg

Perquè us feu una idea la caixeta de la foto metix 35x103mm, però té espai per un slot CF de tipus II i un RJ45 ethernet. A més té una CPU PXA255 XScale a 200MHz, 64Mb de RAM i 16Mb de flash. Si volem posar-hi wi-fi podem aprofitar l’slot CFIO que té. Obviament tot el sistema ve de fàbrica amb linux.

Si com sempre el que us preocupa és el preu doncs el podeu comprar directament a la web de Gumstix amb una font d’alimentació de 4V per 186.50$ o per 165$ si en compreu més de 1000.

Apr 07

Qtopia core

Reading time: 2 – 3 minutes

Després del canvi de nom que va patir el producte Qt/Embedded el mes de gener per Qtopia core volia fer un petit resum de quina és la finalitat i la situació d’aquest producte dins un sistema enquestat.

Perquè ens situem aquest producte és una portabilitat de les llibreries Qt versió 4 a entorns embedids. Així doncs disposem de quasi totes les avantatges que té el Qt4 però amb uns requeriments de RAM i disc miserables.

grafic1.gif

Com podem veure en l’anterior gràfic, ens podem recolzar sobre les classes que ens ofereixen les llibreries Qt quan treballem en sistemes enquestats per gairebé el 100% de les nostres aplicacions. Així doncs no hem de patir els inconvenients propis de desenvolupar amb sistemes tan limitats pel que fa a eines d’alt nivell. O sigui, que podem montar-nos la nostre aplicació gràfica, interficie d’usuari o el que ens interessi sense haver de patir per no disposar de widgets, components i altres eines de molt alt nivell a les que ens tenen acostumats els sistemes de programació per PCs convencionals.

A més Troll Tech esta treballant en tres nous productes dins de la línia de Qtopia, a més dels seus ja coneguts Qtopia phone i Qtopia PDA s’espera que vegin la llum ben aviat el:

  • Qtopia Platform — For “multi-application products.” Qtopia Core with application management and user interface capabilities. Targets consumer electronics and other advanced, multi-application products
  • Qtopia Profiles — Qtopia Platform with key enablers for embedded Linux development aimed at specific vertical markets
  • Qtopia Editions — Solutions aimed at targeted product segments

Perquè ens fem una idea de com es situen en l’espai aquestes eines, podeu veure en el següent gràfic que una es recolza sobre la següent per donar funcionalitats cada cop més específiques i de més alt nivell, és clar. Imagino que això tindrà les seves avantatges a nivell de requeriments de sistema i de preu de les llicències.

grafic2.gif

Apr 07

SBC petitoneta i no massa cara amb xarxa i wifi

Reading time: 1 – 2 minutes

sbc-wired-wifi.jpg

A través de linuxdevices trobem el Wi-9C un interessant SBC equipat amb un processador NetSilicon NS9360 (un ARM9) que dona uns 155MHz, com ja deia al títol disposa d’una targeta de xarxa 10/100Mbps i una targeta 802.11a/b/g.

A més disposa de fins a 256Mb d’SDRAM i 256Mb de flash, 4 port serie, 4 ports SPI, una interficie amb bus I2C, un port USB 2.0, controladora LCD amb resolucions de fins a 800×600 pixels (SVGA). A més de 55 línies I/O, fins a 8 rellotges/contadors de 16/32bits, i un rellotge de temps real.

Les mídes com sempre espectaculars uns 7x8cm (sense antena), el tindrem disponible al 3er trimestre d’aquest any i el preu aproximat per 1000 unitats serà d’uns 149$. Obviament suporta Linux.

Mar 31

E-Egine – 80 MHz Ethernet controller

Reading time: 1 – 2 minutes

ee_smalll.jpg

El meu últim descobriment confessable sobre hardware enquestat, aquí el teniu tot un prodigi de la tecnologia. Un processador de 40/80MHz, 64KB de RAM, 2x RS232, 256KB de flash i moltíssimes cosetes més. Obviament podem disposar d’opcions impressionants com targetes de xarxa, compact flash de fins a 2GB, i moltes altres cosetes pròpies d’aquests equips com 20 I/O per controlar DAQ’s, etc.

A més el consum fa riure 200 mA aa 5V (amb totes les opcions). Perquè us feu una idea amb una bateria d’aquelles de 10x5x7cm que valen uns 6€ a botigues d’electrònica en teniu per més d’una setmana sense haver de connectar-vos a llum, xulo,eh?!

A més a la web podem veure un escalat de preus molt llaminer. El cost és de $99/$84/$69/$49 per 1/50/100/+1000, atractiu,eh! si voleu una informació més datallada i ben estructurada doneu un cop d’ull al datasheet

Mar 26

PC/104 – la interficie misteriosa

Reading time: 2 – 2 minutes

Quan fa uns anys em vaig començar a posar amb el tema del embedded vaig començar a descobrir aquest interficie tan desconeguda quan vens del món del PC. De fet, l’ensurt només és al principi després descobreixes que només és un connector que ens permet tenir unes plaques d’extenció en espais molt reduits i de forma que la connexió sigui ben segura per entorns ostils. A nivell lògic és ben senzill, perquè les senyals que transporten no deixen de ser ISA o PCI. Segons algunes companyies el mercat d’aquesta interficie ha de creixer un 45% en els propers 4 anys.

L’estàndard en qüestió és de l’any 1991, i el va definir el PC/104 Consortium. Els estàndards definits per aquest consorci són PC/104, PC/104+, PC-104, EBX i EPIC. El PC/104 defineix un slot de 104-pin que equival internament a la lògica de funcionament ISA. El PC/104+ incorpora compatibilitat amb el PC/104 i afegeix compatibilitat lògica amb el bus PCI a través de 120 pins totals. El PC-104 només és compatible PCI i té 120 pins. Finalment tan el EBX com el EPIC, defineixen com connectar una placa SBC a un backplane o xassís.

pc104.gif

Les funcions de les targetes PC/104 són totes les que us pogueu imaginar i més. Des de les típiques que podem trobar en un PC: targeta de so, modem, targeta de xarxa, wifi, etc. Fins a d’altres targetes més pròpies del món industrial o de dispostius típicament enquestats. Per exemple, targetes GPIO, mini bateries, NVRAM, etc.

Mar 25

VIA Epia EN – nova generació de plaques base i processadors

Reading time: 2 – 2 minutes

A mitjans de Març VIA va anunciar la nova generació de plaques mini-ITX, si fins ara ja eren un producte amb unes prestacions impressionants i una mida encara més espectacular. No us perdeu el que prometen ser les noves característiques d’aquestes plaques base. Com sempre amb els seus processadors C7, però ara amb velocitats que arribaràn fins a 2GHz i només amb 20W de consum. A més el FSB de 800MHz. Com podeu veure no tenen res a envenjar a les plaques base de mida convencional, sinó mireu aquest petit resum de característiques:

  • ATX power
  • DDRII 400/533 memory socket
  • UDMA 66/100/133 connectors
  • SATA II, RAID 1 and 0
  • CN700 Northbridge
  • VT8237R+ Southbridge
  • PCI connector
  • LVDS/DVI modules available
  • 6-channel audio
  • Switchable (jumpers) S/PDIF / S-Video port
  • PS-2 connectors
  • USB 2.0
  • Gigabit Ethernet
via.jpg

Si encara us preocupa el rendiment després de tot això, a linuxdevices hi ha un article, que fa una comparativa entre aquestes noves plaques i els pentium M. Realment podem veure que cada dia és una alternativa més interessant a tenir en compte a l’hora d’enquestar equips en sistemes petits.

Mar 22

hw per montar un firewall, router, ap, etc.

Reading time: 2 – 3 minutes

Gràcies al meu nou proveedor de hardware enquestat, mds 2000, m’he posat al dia del catàleg de productes d’AAEON una marca de material embedded molt interessant. El millor del tema és saber que pots comprar-ho a Barcelona mateix i a preu de PVD (Preu de venta distribuidor).

Doncs bé concretament hi ha un model que m’ha agradat molt per montar firewalls en linux (ve amb el Montavista Linux de serie) a casa dels clients, a més gràcies als dos slots mini-PCI tipus III que porta la placa puc posar-hi una o dues targetes wifi. Però el que potser m’ha agrada més són els 6 ports ethernet de que disposa el SBC.

Amb una RAM de 32 o 64Mb segons el model, un processador RISC d’Intel (XScale IXP420/422/425) amb 266 o 533MHz i amb 16Mb de flash. Per si tot això us sembla poc encara n’hi ha més 2 ports serie, 2 ports USB (1 USB 2.0 i 1 USB 1.1) i com no quatre sortides DIO, per controlar altres perifèrics amb protocols I2C, SPI o SMBus.

gene-1425.jpg

Al tractar-se d’un dispositiu embedded les seves mides són minúscules 156mm x 101.6mm i s’alimenta amb corrent continua amb un voltatge que pot anar dels 9 als 24v. O sigui, que tenim on triar. Ara només cal trobar-li una caixa que li vagi com un gua. Amb els ~275$ de cost, més els aproximadament ~10$ de la caixa i uns altres ~15$ de la font d’alimentació podem tenir un firewall, router o el que volguem per un preu molt raonable.

Si voleu aprofundir més sobre el producte: