Download Diseño de sistemas embebidos
Document related concepts
no text concepts found
Transcript
Diseño de S.E. usando placa Lanín EmTech S.A. Que es un sistemas embebido? Un sistema embebido se puede definir como un sistema electrónico diseñado específicamente para realizar determinadas funciones. El hardware y el software están diseñados y optimizados para resolver un problema en concreto. Donde encontramos un sistema embebido? Electrodomésticos Juguetes Instrumentación Sector Aeroespacial Aplicaciones Comunicaciones Automatización Robótica Vehículos ¿Cuál es la arquitectura de un sistema embebido? Interfaz con el usuario Alimentación CPU Comunicaciones Entrada/Salida Placa Lanín ¿Que es ARM? ARM es un empresa que se dedica al diseño de cores y algunos otros aditamentos (periféricos, controladores de memoria, etc), pero no a la fabricación de chip. Empresas consumidoras de arquitecturas ARM Familias de arquitecturas ARM Cortex-M Cortex-M Cortex-M 4 LEDs y 2 Pulsadores Ideales para corroborar el correcto funcionamiento de las diferentes aplicaciones, para ingresar estímulos externos a la aplicación o como interfaz de usuario Conexión en los puertos del microcontrolador Conexión USB host Para conectar diferentes periféricos a la placa, tales como teclado, mouse, pendrive, etc. Conexión USB host con el microcontrolador Conexión RS 485 Posee dos canales RS485 half-duplex Conexión RS 485 con el microcontrolador Zócalo para memoria µSD Alta capacidad de almacenamiento tanto para guardar datos de adquisiciones como para almacenamiento de paginas web, archivos de audio, etc. Conexión µSD Conexión USB device Para conexión de datos y alimentación desde una PC. Adicionalmente permite utilizar el bootloader del microcontrolador. Conexión USB device Ethernet Ethernet 10/100Mbps para implementación de stack TPC/IP Conexión Ethernet Headers Pines de uso general, compatibles con placas DTR desarrolladas por Emtech S.A. Implementa algunas líneas del periférico FSMC para control de memoria Nand-Flash, Muxed-Nor-Ram o LCD Conexión Headers DTRs DTRs Alimentación Externa o USB, selección mediante jumper Serial/USB y JTAG/USB Mediante un chip de FTDI se implementa la conversión de UART1 a USB para uso general y de JTAG a USB para programador/depurador on-board. JTAG Adicionalmente se dispone del conector para utilizar un programador/depurador externo. Entorno de desarrollo Que es un entorno de desarrollo? Es aquel que permite integrar distintas herramientas de desarrollo dentro de un solo programa. Editor, compilador, depurador. Lanín-CM4 SDK. (Eclipse) Porque Eclipse? Código abierto Interfaz amigable Existen diferentes plugins que incrementan sus capacidades Configuración de Eclipse Código fuente Toolchain • CodeSourcery GNU • YAGARTO GNU ARM Plataforma Configuración de Eclipse CodeSourcery GNU toolchain para ARM: Permite construir aplicaciones ARM embebidas. YAGARTO GNU ARM toolchain: Es una EABI (embedded-application binary interface). Esto especifica las convenciones estándares para formatos de archivos, tipos de datos, uso de registros, etc. Lanin-CM4 SDK Diseño de aplicaciones en sistemas embebidos Recordando… Electrodomésticos Juguetes Instrumentación Sector Aeroespacial Aplicaciones Comunicaciones Automatización Robótica Vehículos Aplicaciones 1. 2. 3. Cualquier sistema puede clasificarse en : Sistema sin requerimientos de respuestas en tiempo real. Sistemas con requerimientos flexibles de respuesta en tiempo real. Sistemas con requerimientos estrictos de respuesta en tiempo real. Dos paradigmas de programación El software tiene acceso directo sobre los recursos del hardware. Para llevar a cabo este método en la placa Lanín, se utiliza la librería CMSIS. El software utiliza un sistema operativo RTOS. En nuestro ejemplo práctico en la placa Lanín utilizaremos el ChibiOS. También se pueden correr diferentes sistema operativos, por ejemplo: Nuttx, FreeRTOS. etc. Método de programación: ¿Qué nos ofrece el fabricante para interactuar con el uC? La CMSIS es una librería común a todos los fabricantes de procesadores ARM Cortex-M y pretende establecer la abstracción del hardware. 1. Core Peripheral Access Layer 2. Device Peripheral Access Layer 3. Access Functions for Peripherals (optional) CMSIS Estas librerías deben agregarse al proyecto creado en Eclipse, las cuales se encuentran comprimidas en un único archivo titulado “STM32F4 DSP and standard peripherals library”. Link de descarga: http://www.st.com/stonline/stappl/resourceSelector/app?page=resourc eSelector&doctype=FIRMWARE&SubClassID=1521 Algunos archivos de la librería system_stm32f4xx.c/.h Lugar donde se encuentra la configuración del reloj para los dispositivos STM32F4xx. Exporta la función SystemInit() que configura el reloj, los factores multiplicadores y divisores del PLL, AHB / APBx prescalers y Flash. Esta función es invocada en la inicialización justo después del reset y antes de comenzar el programa principal. La llamada se realiza dentro del archivo startup_stm32f4xx.s. stm32f4xx.h Lugar donde se encuentran las definiciones de todos los registros de periféricos, bits de los registros, y mapeo de memoria para dispositivos STM32F4xx. startup_stm32f4xx.s Proporciona el código de inicialización del Cortex-M4 y los vectores de interrupción para todos los manejadores de interrupción del dispositivo STM32F4xx. Creación de un proyecto en C Creación del proyecto Importando librerías Configuraciones STM32F4XX USE_STDPERIPH_DRIVER *.ld Proyecto terminado Importar un proyecto Configuración del Debugger arm-none-eabi-gdb Pasos para debuggear una aplicación Ejemplos método: Configuración general La inicialización de cualquier periférico en los cortex M4 consta de cuatro pasos básicos: Programación del reloj: En MCUs de muy bajo consumo, generalmente los periféricos tienen su señal de reloj inhabilitada. Programación de configuraciones: Los pines del MCU son compartidos entre periféricos, salvo muy contadas excepciones. Configuración general Configuración del periférico: Determinar las características particulares para el funcionamiento en una aplicación específica. Configuración de la interrupción: Si se tratan eventos del periférico a través de INTs, éstas deben ser configuradas. Configuración de Pines de Entrada y Salida de propósito general GPIO El uso de las GPIO son la forma más fácil de interactuar con periféricos como botones, leds, interruptores, y otros componentes. De acuerdo al tipo de operación que se desee realiza con las GPIO, se pueden configurar de acuerdo a los siguientes parámetros: 1. Modo: Entrada, Salida,Análogo, Función alternativa. 2. Tipo del pin de salida: Push-pull, Open drain. 3. Velocidad del pin de salida: Baja (2MHz), Media (10MHz), Alta (50MHz). 4. Resistencias internas: Pull-up, Pull down. Configuración de Pines de Entrada y Salida de propósito general GPIO Código para configuración de las salidas digitales Ejercicio: Analizar y ejecutar el ejemplo del demo de prendido y apagado de led’s. Entradas digitales Modificar el ejemplo para cambiar el estado de un led cada vez que se pulse S2. Ayuda: Manual de la “STM32F4 DSP and standard peripherals library” (stm32f4xx_dsp_stdperiph_lib_um. chm) Configuración de la USART Código para configuración de la USART Entradas analógicas 3 conversores AD 19 canales multiplexados (16 externos) Hasta12 bits de resolución Muchos modo de funcionamiento: ◦ Simple, continuo, disparo interno, externo, temporizado, ... Transferencia por programa, interrupción, DMA Modos entrelazados, simultáneos Canales “regulares” e “inyectados” Configuración ADC Método de programación: SISTEMA OPERATIVO RTOS Sistema Operativo en Tiempo Real RTOS 1. 2. Un RTOS, es un Sistema Operativo especializado en operaciones de respuesta en tiempo real y debe cumplir con las siguientes características: Respuesta de tiempo Previsible. Determinista. Ejemplo de Sistema en tiempo Real Sensore s Entorno Externo Software de Tiempo Real Reloj Tarea Actuadores Tarea SO Tarea Ej: Sistema de control de un automóvil. RTOS Un RTOS permite diseñar la aplicación por bloques funcionales, donde cada bloque en teoría sería un hilo (thread). Cada hilo se responsabilizaría de una parte de la aplicación, respondiendo a diferentes restricciones de tiempo, por lo cual deberán tener diferentes prioridades. Un SO ofrece las ventajas de asegurar la correcta ejecución de tareas de tiempo real con tiempos de ejecución críticas, las cuales no se ven afectadas por la ejecución de tareas con menos prioridad. RTOS Un sistema operativo, ofrece, la posibilidad de asignar prioridades a las tareas, así como los mecanismos para que se comuniquen entre ellas, y las herramientas que aseguren que las tareas que tienen tiempo crítico, sean ejecutadas dentro de las restricciones de tiempo real establecidas. Características de un RTOS Tiempo de Respuesta: Un RTOS eficaz sólo añade una pequeña sobrecarga en el tiempo de respuesta mínimo teórico del sistema por ejemplo: ◦ El tiempo desde una petición de interrupción y el de interrupción. ◦ El tiempo de un evento de hardware, por lo general una interrupción y el reinicio de la tarea que debe manejarlo. ◦ El tiempo de cambio de contexto, necesario para cambiar de forma sincronizada desde el contexto de un hilo en el contexto de otro hilo. Bajo Jitter. Tamaño: Un RTOS más compacto es preferible siendo todos los demás parámetros iguales, por el costo de memoria. Confiabilidad: Algunos sistemas pueden ser más fiables que otros, la asignación dinámica es un buen ejemplo, tanto falta de fiabilidad y el tiempo de imprevisibilidad. Primitivas de Sincronización: Variedad de primitivas disponibles para utilizar. ChibiOS - Características El ChibiOS es una opción fiable, ya que de acuerdo a sus especificaciones responde positivamente a las características de un buen sistema operativo y ofrece herramientas que facilita la programación de aplicaciones incluso sin restricciones de tiempo real. Como funciona un sistema operativo en tiempo real? El kernel es el cuerpo del SO, contiene todas las funciones y características del RTOS. Kernel El Programador (schedule) es el corazón del SO y decide que tarea debe correr. Scheduler T1 T2 Tn Eventos Semáforos Mensajes Colas Los mensajes y las colas son usadas para enviar datos entre tareas. Las tareas son las trabajadoras del SO y contienen el código de la aplicación. Los eventos y semáforos son señales de sincronización entre las diferentes tareas. Asignando prioridades Utilice el menor número de niveles de prioridad como sea posible. Esto para reducir la cantidad de cambios de contexto en el sistema. Asegúrese de que la restricciones críticas de tiempo se cumplan en la aplicación. ChibiOS - Componentes ChibiOS esta componentes: internamente divido Kernel Port Layer Hardware Abstraction Layer Platform Layer Board Initialization en varios Kernel Bloque principal del sistema operativo. Se subdivide en varios componentes System: Se encarga de la inicialización. Timers: Timers virtuales y temporización Scheduler: Todo el mecanismo de sincronización se implementa a través de este subsistema. Threads Port Layer Este componente es el responsable de la puesta en marcha del sistema, interrupciones, primitivas de bloqueo/desbloqueo, cambio de contexto y las estructuras relacionadas con interrupción de código Hardware Abstraction Layer (HAL) El HAL es un conjunto de drivers de dispositivos, que se basa en los componentes de la placa para la implementación de bajo nivel en el hardware específico. El propósito de este componente es abstraer al usuario del hardware. Arquitectura HAL Platform Layer Esta capa contiene un conjunto de implementaciones de drivers de dispositivos. Board Initialization Layer Este archivo es usado por el startup del sistema para inicializar la placa. Dependencias En la imagen puede verse la interdependencia de los compontes antes descriptos Externs Son librerías que se pueden agregar al directorio del sistema operativo para manejo de más periféricos, como la librería para el manejo de la FAT, el stack TCP/IP, etc. Ejemplos práctico utilizando un RTOS como herramienta de programación SISTEMA OPERATIVO RTOS Creación de threads Hay dos clases de hilos en ChibiOS / RT: Static Threads: Reserva estáticamente la memoria en tiempo de compilación. Dynamic Threads: Se realiza la asignación de memoria en tiempo de ejecución de un conjunto de memoria o de un banco de memoria (reduce la fiabilidad del sistema). Creación de un thread estático Para crear un thread estático se debe usar “ WORKING_AREA” static WORKING_AREA(myThreadWorkingArea, 128); En este caso, se reservan 128 bytes de la pila para uso del thread Un thread estático se puede iniciar mediante la invocación de chThdCreateStatic () Thread *tp = chThdCreateStatic (myThreadWorkingArea, sizeof(myThreadWorkingArea), NORMALPRIO, /* Initial priority. */ myThread, /* Thread function. */ NULL); /* Thread parameter. */ Ejemplo, Leds intermitentes utilizando RTOS Ejercicio: Modificar el ejemplo para hacer titilar todos los leds a distintas frecuencias Comunicación entre Tareas La comunicación puede tener la forma de un evento, un semáforo (flag), o un mensaje que se envía a otra tarea. 1. La forma más básica de comunicación es mediante un evento. Un servicio de interrupción puede enviar un evento a una tarea, algunos SOs también pueden enviar un evento a varias tareas. Semáforos: Se utilizan para proteger recursos compartidos, por ejemplo, si hay más de una tarea que necesita escribir/leer en la misma memoria (variable) el uso de un semáforo asegura que solamente una tarea va a escribir o leer a la vez. Mensajes: Permite enviar datos a uno o más tareas. Se implementan como mailbox o queue. 2. 3. Ejemplo de sincronización de tareas con semáforos binarios Recurso 2, inicia como tomado. Toma el recurso 1, ejecuta la tarea. Libera el recurso 2 Toma el recurso 2 Libera el recurso 1 Ejemplo de aplicación de mensajes Ejemplo de aplicación de mensajes Línea de comandos por USB Instrucciones por medio de una línea de texto simple. Generando un COM virtual mediante CDC (Comunication Device Class) Línea de comandos por USB Ejemplo de utilización de librerías externas con ChibiOS (Fatfs y Lwip) Por las características de mensajería y sincronización del RTOS es posible utilizar una librería externa como Lwip o Fatfs. Ejemplo de utilización de librerías externas con ChibiOS (Lwip) Ejemplo de utilización de librerías externas con ChibiOS (Lwip) Ejemplo de utilización de librerías externas con ChibiOS (Lwip) Interactuar con la página Web Formularios, delimitados con la etiqueta <FORM> ... </FORM> METHOD: ◦ POST, envía los datos al agente de procesamiento almacenándolos en el cuerpo del formulario ◦ GET, envía los datos agregándolos a la dirección URL y separándolos de la dirección con un signo de interrogación. ACTION: indica la dirección a la que se enviará la información. Interactuar con la página Web Ejercicio: Capturar la siguiente solicitud en el server Web y cambiar el estado de un led Ejemplo de utilización de librerías externas con ChibiOS (Fatfs) Ejemplo de utilización de librerías externas con ChibiOS (Fatfs) Ejemplo de utilización de librerías externas con ChibiOS (Fatfs) Wave Player Play, Pause, Stop Server HTML Lectura SD, escritura DAC Referencias http://www.arm.com/ http://cmsis.arm.com/ http://www.chibios.org/ Basic Concepts for Real Time Operating Systems by Mats Pettersson, IAR Systems Desarrollo con microcontroladores ARM. Sergio Caprile. Preguntas?