jueves, 10 de agosto de 2017

Empezando con XMEGA (AVR1005)


1. Introducción:


Desde que Atmel (ahora microchip) amplio su portafolio de productos con la familia XMEGA surgieron muchas preguntas, si esta es una nueva arquitectura, cómo transferir los conocimientos de megaAVR a AVR XMEGA, etc. Aquí trataremos brevemente las similitudes y diferencias entre las dos familias, y proporcionaremos una visión general de las herramientas disponibles.

Los usuario de AVR ocasionalmente mencionaron que ellos querían dispositivos con un menor consumo de potencia, periféricos más potentes, más timers, DMA, multiples niveles de interrupción, más memoria y un mejor rendimiento del CPU. Bien, con XMEGA ahora tienes todo esto, Adicionalmente tienes el sistema de eventos (Event System), motor de encriptación (Crypto Engine), ADC y DAC de 12-bit, calibración de los osciladores en tiempo real, chequeo CRC, y otras características.

Adicionalmente, los periféricos dentro de una familia son similares y están organizados de la misma manera para todos los miembros de la familia, haciendo que portar código de un XMEGA a otro sea una tarea sencilla.




2. Introducción a XMEGA(diferencias y similitudes con los megaAVR)


Esencialmente el XMEGA es un AVR de 8 bits. XMEGA usa la arquitectura y CPU AVR, pero con características adicionales y periféricos mejorados. XMEGA usa el mismo conjunto de instrucciones, las mismas herramientas de desarrollo y compiladores que megaAVR. El CPU puede funcionar más rápido que antes y con un voltaje más bajo.


2.1 Preguntas comunes acerca de XMEGA


  • XMEGA y megaAVR no son compatible en pines. Esto no fue posible de alcanzar debido al deseo de hacer el dispositivo más modular.

  • XMEGA opera con voltajes desde 1.6V hasta 3.6V. Esto se debe en parte al proceso de fabricación, el cual es seleccionado desde el punto de vista del bajo consumo de energía. La operación a 5V no es posible. El menor voltaje de funcionamiento no significa un menor rendimiento del CPU ya que XMEGA puede correr hasta 32MHz desde los 2.7V.

2.2 Estructuras y migración


Los XMEGA están estructurados para fácilmente portar entre dispositivos. Por ejemplo, PORTA y PORTB serán dedicados a las interfaces analógicas ADC y DAC o a dos Comparadores Analogicos. PORTC, D y E serán para interfaces seriales. También, todos los módulos están definidos en estructuras (typedef struct). Esto quiere decir que para acceder a los registros del ADC se debe hacer mediante la estructura ADC. Además, dado que el ADC es definido es una estructura, la idea es que esta estructura será la misma para todos los dispositivos de la misma familia. Entonces sí tu empezaste con un ATxmega64A4, debería ser una tarea sencilla migrar a un ATxmega128A4 o un ATxmega256A1; ya que tu estas usando la misma estructura y así tu puedes usar el exactamente el mismo código. Con megaAVR no podemos hacer una estructura de un módulo para definir todos ellos ya que los diferentes dispositivos podrían tener diferentes diseños.

Las familias XMEGA son distinguibles por una letra: La primera familia es ATxmega[###]A[#](Familia A). Antes de la letra de la familia se encuentra un número el cual representa el tamaño de la memoria flash, y después de la letra de la familia encontraras otro número que será el ID de la familia, el cual identifica dispositivos individuales. Dispositivos con el mismo ID tiene exactamente las mismas características y el mismo número de pines pero pueden estar disponibles en diferentes tamaños de memoria.


2.3 Manual y Hoja de datos


La estructura de los XMEGA hace posible hacer un gran manual para describir todos los módulos y periféricos dentro de una familia. Los detalles que harán un dispositivo diferente otro, como características y periféricos disponibles serán descritos en una pequeña hoja de datos.


Hoja de datos
image

Manual
image


Por ejemplo, se podrían recopilar todas las funciones descritas para todos los dispositivos A1, A3 y A4 en la familia XMEGA-A. Así pues el manual XMEGA A es un documento profundo para todos los módulos que están disponibles en la familia A. Por otro lado la hoja de datos para la sub familia A3 que no son comunes con A1 y A4.


2.4 Sistema de eventos (Event System)


El sistema de eventos es un características totalmente nueva de los XMEGA. No encontraras Event System in megaAVR. El sistema de eventos es comunicación entre los periféricos del XMEGA. Un canal de eventos no es un bus, sino un canal dedicado en el que sólo se puede señalar un evento a la vez. Ya que los eventos están en un canal dedicado, estos serán muy predecibles y rápidos. Realmente, habrá un máximo de 2 ciclos de reloj. Con los eventos, el CPU no está involucrado y no hay interrupciones (ISRs). Finalmente, el sistema de eventos es extremadamente poderoso ya que este no ocupa el CPU y puede ahorrar energía e incrementar el rendimiento en el sistema debido a que se reduce el número de interrupciones.


XMEGA Event System trata sobre la comunicación entre perifericos
image


Veamos un ejemplo. Tu puede por ejemplo usar el sistema de eventos para enlazar dos timer de 16 bits y obtener uno de 32 bits. O puedes usar un evento para sincronizar dos módulos. Por ejemplo, puedes usar el evento de cambio para realizar un conversión con el ADC y una captura de la entrada con el timer para obtener el tiempo exacto de cada conversión. Aún más, otro ejemplo podría ser permitir que un evento dispare conversiones ADC para muestrear música desde un micrófono y cuando la conversión se haya completado el DMA copiará los datos a la RAM. Cuando el usuario presione un switch se generará un evento que copiará los bytes al DAC para reproducir lo previamente grabado. Todo esto se puede hacer estando el XMEGA en modo sleep.



2.5 Segunda Generación PicoPower


Los XMEGA llevan la tecnología PicoPower al siguiente nivel. Todos los XMEGA son probados para operar a 1.6V. Eso significa que todos los periféricos y módulos que pueden correr a 3.6V también pueden correr a 1.6V. Un menor voltaje implica un menor consumo de corriente. Hay nuevos diseños para el watchdog para el circuito Brown Out (BOD). El watchdog corre típicamente con 1uA. La corriente de consumo para el BOD es también de 1uA. De todos las características de bajo consumo, quizá la mejor sería reducir el tiempo en modo activo y remplazar este trabajando más a menudo en IDLE modo usando el DMA y el Sistema de eventos.


2.6 Sistema de reloj


La fuente de reloj y frecuencia pueden ser cambiadas mientras el XMEGA está funcionando. Se puede seleccionar un oscilador interno(RC) de 2MHz y uno de 32MHz. El RC de 2MHz es la fuente de reloj por defecto cuando el XMEGA inicia. Este inicia rápidamente en contraste a cristales externos y resonadores cerámicos los cuales necesitan bastante tiempo para empezar a oscilar. El dispositivo puede comenzar ejecutando el código de inicialización mientras el oscilador externo se estabiliza. Una vez que el oscilador externo está listo para ser usado el cambio de fuente de reloj debe ser realizado por el programa. La frecuencia de reloj puede ser cambiada en cualquier momento mediante el uso del PLL y prescalers.

Si usamos el PLL interno, la señal de reloj puede ser multiplicada (x1, x2, x3,…, x31). Tú puedes incrementar la señal de reloj principal (max 32MHz) o incrementa la velocidad de los periféricos, por ejemplo se puede alcanzar 128MHz como señal de entrada de un Timer/Counter para obtener un señal PWM con alta resolución.

Adicionalmente, el “Monitor de fallas de la fuente de reloj externa” puede detectar si la señal de reloj falla(ej: debido a daño físico del cristal) y automáticamente cambiar al RC interno de 2MHz.


2.7 Controlador de Interrupciones Multinivel.


Ya que los XMEGA tiene más fuentes de interrupción que un megaAVR, se ha adicionó un controlador de interrupciones multinivel. Esto facilita el manejo de muchas fuentes de interrupciones de manera oportuna de acuerdo con las prioridades establecidas. Si por ejemplo una fuente de interrupción con una alta frecuencia es atendida con tanta frecuencia que las otras interrupciones en el mismo nivel no son atendidas, entonces puede ser buena idea bajar la prioridad de la primera fuente de interrupción, ósea la de alta frecuencia.

2.8 Principales Funciones Analogicas.


Con XMEGA se introducen algunas características importantes para un MCU de 8 bits. Tanto el ADC como el DAC y tienen una resolución de 12 bits. El ADC puede alcanzar hasta 2 millones de muestras por segundo. También hay una característica llamada “event or interrupt on conversion complete”, la cual sólo generará una interrupción de conversión completa cuando el resultado se encuentre por debajo o por encima de un cierto límite.

El DAC puede dar dos salidas incluso cuando sólo se usa un módulo. Esto es gracias a que se cuenta con un circuito separado de muestreo y retención que permitirá, por ejemplo, una salida estéreo con sólo un DAC.

El Comparador Analógico (AC) tiene una nueva característica llamada “windows mode”(modo ventana) cuando se usan dos módulos AC a la vez. Entonces, tu puedes ingresar dos limites (nivel bajo y alto) y la señal de entrada a ser comparada. El resultado estaría debajo, dentro o sobre la ventana. El resultado la comparación también se puede reflejar en un pin de salida.


2.9 Interfaz de Bus Externo (EBI).


El EBI disponible en XMEGA soporta memorias hasta de 16MB. Son soportadas las memorias SRAM y SDRAM. Las memorias SDRAM son de bajo costo y gran capacidad, pero no es posible combinarlas con otras unidades mapeadas que requieran una interfaz de bus tipo SRAM. Debido al soporte para grandes memorias, el tiempo de ejecución de cada instrucción que accede a memorias ha cambiado ligeramente. Además, cuando se compila para memorias de gran capacidad el tipo de dato usado para direccionar cambia de 16bits a 24bits.


2.10 Motor de Encriptación (Crypto Engine).


Para la comunicación con protocolos, ya sea alámbrico o inalámbrico, la encriptación de la información es necesaria para una comunicación segura.

XMEGA implementa tanto AES como DES, y puede realizar tanto la encriptación como la desencriptación. AES es un hardware que libera al CPU de toda la carga. Este módulo puede proveer 1.25Mbps de comunicación encriptada con una llave de 128bits.



3 Que herramientas usar?.



Para la escritura de código se puede usar el ya muy conocido Atmel Studio. Se recomienda leer la nota de aplicación AVR1000 (Getting Started Writing C-code for XMEGA) que es una introducción al estilo de codificación que se ha elegido y también describe como acceder a los periféricos.
Los programadores/depuradores recomendados son el ATMEL-Ice ó el JTAGICE3 (ya no está en producción).






1 comentario: