Enlaces
- https://learn.adafruit.com/introducing-the-adafruit-wiced-feather-wifi/overview Página web sobre la placa con instrucciones para su puesta en marcha, configuración de Arduino, etc. Esta tarjeta no está soportado por PlatformIO (una pena).
- https://github.com/adafruit/Adafruit_WICED_Arduino La librería de Arduino para esta placa. Es bueno, tenerla cerca para ver exactamente cómo se ha implementado cada cosa a bajo nivel.
La tarjeta tiene el micro por un lado (¨STM32F205RG ) y el WiFi por otro (BCM43362). Aunque son chips separados, la placa ocupa muy poquito. Es interesante tener ambas cosas separadas pues, en otros que lo llevan todo junto, como los ESP8266 y ESP32 de Espressif, mezclan unas cosas con otras y el WiFi acaba influyendo en varios periféricos, como el ADC, lo que complica ciertas aplicaciones donde quieres usarlo todo. Me da la sensación igualmente que la radio integrada en el chip introduce bastante ruido en la parte analógica.
WiFi
La librería no es directamente compatible con Arduino aunque incluye funciones muy similares y cambiar de una a otra es absolutamente inmediato. Los experimentos de velocidad en transmisión alcanzan los 1.6 Mbytes/s en TCP y 3.2 Mbytes/s en UDP, si bien en modo UDP se producen paradas aleatorias que van desde los 20 segundos hasta los dos o tres minutos, lo que la convierte en inútil para este protocolo. Todavía no he conseguido saber por qué falla esto. Si se baja la tasa de envío el problema parece que desaparece, pero entonces ya vale la pena usar TCP.
WiFi Enterprise no parece estar soportado de ninguna manera.
WiFi Enterprise no parece estar soportado de ninguna manera.
GPIO
Utilizando las funciones de Arduino, el pulso más corto que se podía producir era de 250 ns!! lo que resulta inútil para generar relojes a alta velocidad. Con PWM se pueden alcanzar pulsos de tan solo 16 ns, pero para mi caso son complicados de usar. Después de muchas pruebas, parece que mucho del retraso en poner los pines a cero o uno se debe al propio código. Escribiendo directamente sobre los registros de puesta a uno o cero se consigue un pulso mínimo de unos 40 ns:
GPIOC->regs->BSRRL=BIT(3); // esto lo hace a 40 ns, ya es algo, pero lo hace al reves (L pone a alto y H a bajo...)
GPIOC->regs->BSRRH=BIT(3);
También se puede escribir directamente sobre ODR el valor de lo que quiera, pero tarda un poco más (75 ns).
No son los 25 ns que se consigue con los ATSAM de Atmel, pero casi es suficiente.
GPIOC->regs->BSRRH=BIT(3);
También se puede escribir directamente sobre ODR el valor de lo que quiera, pero tarda un poco más (75 ns).
No son los 25 ns que se consigue con los ATSAM de Atmel, pero casi es suficiente.
No hay comentarios:
Publicar un comentario