El tiempo pasa y las cosas por lo general progresan.
NXP ha comprado Code Red, el auto de la IDE gratuita para los controladores ARM Cortex Mx de NXP. El resultado es que la IDE gratuita en su última versión, la primera que ahora ofrece NXP directamente a ampliado el límite del código descargable al controlador de 128kNytes a 256kBytes. Para quien estos 256kByte representan una limitación, sigue habiendo la posibilidad de lo que ahora se llama la versión profesional que no tiene límite del lado de la IDE, es un berraco. 256kBytes de código es un jurgo!
Habiendo releido el hilo, creo que es justificado dar unas informaciones adicionales sobre los controladores ARM.
Correctamente se ha escrito, que ARM, una empresa inglesa, es la que diseña todas las variantes de tipos de controlador ARM y vende licencias de estas a productores de controladores, como son NXP; etcétra, una lista bastante completa ya ha sido publicada en este hilo.
Cada empresa que se compra una licencia de un tipo de controlador ARM de la empresa ARM fuera de recibir la información de como se especifica el controlador licenciado, tiene que cumplir con ciertos requisitos asociados con esta licencia. Escribo esto, pues tiene implicaciones interesantes para nosotros los que usamos estos controladores.
Delos controladores ARM existen 2 variantes básicas. La una son los controladores del tipo ARM Cortex Mx, la x estando para indiar que allí existen varias variantes y la otra preferiría llamar procesadodres, o con su abreviación, CPU.
La diferencia entre controladores y procesadores es que procesadores requieren de componentes adicionales para crear un sistema y por lo general no tienen las periferias que estamos acostumbrados a ver en controladores y por lo general requieren de un sistema operacional, como Linux por ejemplo para ser operados.
Controladores son unidades que integran la unidad de procesamiento y las periferias en una pieza de silicio e integrado en un empaque y o no usan un sistema operacional, o usan algo que se llama RTOS, que es un sistema operacional que opera con tiempos de reacción a eventos de forma definida.
Los controladores del tipo ARM Cortex Mx son lo que por lo general escogemos como alternativa a los PIC o Atmels a los que estamos acostumbrados de un pasado.
Los controladores ARM Cortex Mx al día de hoy se ofrecen en las siguientes variantes:
ARM Cortex M0
ARM Cortex M0+
ARM Cortex M3
ARM Cortex M4
y de estas últimas con FPU o sin ella.
Es interesante saber que en la lista de arriba las variantes como aumenta el valor del dígito, 0, 3 y 4, son una extensión del anterior. Significa que las sentencias disponibles siempre incluyen todas aquellas del tipo inferior y extienden estas como vaya aumentando el dígito.
Las variantes del tipo ARM Cortex M4, un controlador que contiene en un pedazo de silicio 2 controladores, un M0 y un M3, lo que permite toda una gama de posibilidades. Ademas existen variantes con una unidad FPU, floating point unit, que acelera la ejecuación de aritmética para números consistiendo de un número con partes entereas y fracción y operaciones como multiplicaciones, divisiones y similares, que en controladores sin estas unidades FPU requieren de bastante tiempo para ser ejecutadas.
Las variantes ARM Cortex M0+ son variantes que pueden ser operadas con un consumo de energía menor al de aquellas M0!
Lo escrito hasta aquí tiene unas implicaciones muy interesantes! Esto significa que cada proveedor de controladores de los tipos ARM Cortex Mx se basa en la licencia idéntica y por lo tanto la presión a los proveedores de controladores de estos tipos para crear sus productos es muy alta de darles capacidades únicas que justifiquen la selección de su oferta en comparación con los productos de otros proveedores.
ARM aún aumenta esta presión obligando a las empresas que licencian sus variantes de ofrecer bibliotecas para las periferias que puedan ser usadas con la misma interfaz de software. Esto se llama HAL, hardware abstraction layer, o abstracción de la implementación fisica. Significa que todas las bibliotecas son usadas con especificaciones idénticas. Un efecto de esto es, que la empresa proveedora de un controlador del tipo ARM Cortex Mx, tiene un interés estratégico que la calidad de su implementación de las librerías sea óptima. Pues la eficiencia en sentido de economía energética, de velocidad y funcionalidad depende de la calidad de las bibliotecas que el proveedor esta obligado o proveer para todas las periferia que implemente en su componente. Igualmente la calidad del compilador es de importancia estratégica.
Para los clientes que usan controladores ARM Cortex Mx significa que el cambiar de proveedor solo requiere de un esfuerzo mínimo, pues sus códigos todos acceden las periferias usando la misma interfaz o API, application programming interface, o interfaz de programación para las aplicaciones. Así que decidiendose por un proveedor de controladores ARM no tiene que ser una decisión tan definitiva como lo era ir por los Atmel o los PIC por ejemplo.
Pero también un efecto de esto es la presión sobre los proveedores de hacer el uso de sus productos ofertados facil y económico para sus clientes y para clientes nuevos. El efecto es que todos ofrecen placas de evaluación súper baratas y la presión en los precios de las componentes de ser lo mas económico posible es muy grande.
Quiero resaltar otro asunto que es de interés, así lo creo, para aquellos que han estado usando controladores PIC o Atmel en el pasado y piensen en entrar en el mundo de los controladores ARM.
Se trata de lo que en el mundo de los PIC y los Atmel era la herramienta para grabar código en la memoria flash del controlador. Esto es algo diferente en los ARM Cortex Mx y lo que se usa es la interfaz "JTAG". esta interfaz fuera de ser el medio para descargar programas al controlador es un medio muy, pero muy poderoso, para el resolver problemas en el código escrito y ejecutado, en inglés, el "debug"!
En el mundo de los Atmel y los PIC, el uso de un simulador en software ejecutado en el PC era el método usual, para poder analizar en todo detalle la ejecución de un programa, permitiendo mirar y si fuera necesario cambia el valor de cualquier variable o constante o de cualquier registro en el controlador y ver el efecto. Como es simulador y no el controlador físico, su ejecución es mucho mas lento, eventos físicos externos no pueden ser simulados de forma real y siempre existe la posibilidad de una diferencia entre el comportamiento del simulador y del controlador físico.
Pues con la interfaz JTAG es posible hacer todo lo que se puede hacer en un simulador, pero en el controlador físico y a la velocidad real en el entorno real y con las reacciones reales a eventos externos.
Las IDEs para estos controladores ARM Cortex Mx conocen todas las variantes de controladores de cierto proveedor y así tambien cuales periferias existen en estos, siendo configurados los IDEs de acuerdo al controlador físico para el cual se programa y al cual se accede atravez de la interfaz JTAG. Así el acceso incluye todos los regsitros asiciados con las periferias existentes en una variante de los productos del proveedor del controlador.
Yo me he decidido por el proveedor NXP por sus placas LPCXpressoxxxx y por la IDE gratuita, que no solo sabe de los productos ofertados por NXP, sino que también conoce todas las placas del tipo LPCXpressoxxxx. Así, si por ejemplo se escoge la placa LPCXpresso1769, una placa con un controlador ARM Cortex M3, el LPC1769, entonces la IDE se autoconfigura a esta placa LPCXpresso1769 por ejemplo.
Cada placa LPCXpressoxxxx consiste de una placa de 2 partes. La una es la placa con el controlador, en mi caso el LPC1769 y la otra con el dispositivo JTAG. Esta parte de la placa LPCXpressoxxxx puede ser separada de aquella parte con el controlador LPC1769, dejando una placa de dimensiones mínimas y que solo cuesta 22,- Euros mas IVA y el flete, donde el proveedor mas barato que he podido identificar es la empresa Watterott. este precio es tan barato que hacer una placa con el controlador no es posible hacerla mas barata uno mismo por el costo de las componentes y además la placa y las componentes SMD resultan muy exigentes hacerlas uno mismo. Ademas las placas LPCXpressoxxxx siempre contienen aquella variante del tipo de controlador usado mas grande y potente.
La parte de la placa LPCXpresso con la interfaz JTAG tambien puede ser usada con la placa que contiene el controlador o con la placa de diseño propio como medio de acceder esta por JTAG.
La unidad JTAG es algo que resulta específico a la IDE escogida y dependiente del proveedor escogido. Keil es una IDE que se puede usar con los productos de practicamente todos los proveedores, pero la unidad JTAG cuesta!
Finalmente quiero comentar que la variante mas actual de la IDE para las LPCXpresso, ahora descargable desde un sitio de NXP, NXP compró la empresa Code Red, autora de esta IDE, por querer asegurarse de que esta IDE sea óptima para sus productos por las razones estratégicas descritas arriba, ha ampliado el límite ha 256kBytes para la variante gratuita!