lunes, 14 de mayo de 2012

Dispositivos periféricos

Los dispositivos periféricos se dividen en los dispositivos de E/S y los que almacenan los datos fuera de la memoria principal del sistema(backing store o medios de al almacenamiento masivo). Una tarea del SO es identificar un dato en términos de su dirección en la memoria principal (dirección física). 
Existen periféricos inteligentes que permiten que el SO les interrogue para conseguir informacion(dirección lógica). Así los dispositivos perifericos aparecen al SO como una serie de registros(mapeado en memoria o en puertos) y una posible fuente de IRQ no viéndose afectado por la tranferencia de datos entre periférico y memoria (DMA) excepto para ver el estado.
Como antes vimos los sistemas embebidos que estos se componen de al menos un CPU, memoria y dispositivos periféricos (algunos "internos" y otros que implementan interfaces de E/S), todos interconectados con buses)




El CPU realiza E/S mediante:
  • Puertos de E/S(direcciones asociadas a dispositivos)
  • lineas de interrupcion(IRQs) e ISRs("opcionales")
Conectados a los puertos, el sistema cuenta con dispositivos periféricos:
  • Puertos (GPIO) para interfacear dispositivos simples.
  • Dispositivos integrados al microcontrolador (por ej. timers, etc).
  • Dispositivos que implementan interfaces externas (estándar o para facilitar la interacción con otros dispositivos).

Interfacing vía GPIO -> Interfaces y puertos externos

Los puertos externos permiten adquirir y controlar señales. Dichas señales pueden ser:
Digitales:

  • Son controladas de manera directa
  • Puede incluirse circuitería adicional de protección, etc.
Analógicas:

  • Requieren una conversión a valores lógicos digitales
  • Normalmente mediante el uso de conversores A/D y/o D/A
Dispositivos perifericos integrados

Dispositivos Periféricos Internos: 
Estos son algunos dispositivos periféricos 
que típica mente se encuentran integrados en 
microcontroladores.


Controladores de memoria y DMA
Toda memoria que no sea ROM ni SRAM (las que pueden controlarse directamente de la CPU requiere de un controlador que se encargue de:
  • Coordinar los accesos del CPU y de la información almacenada(en DRAM). 
  • Coordinar el temporizador de las lecturas y escrituras, asi como el mapeo de direcciones(en memoria EEPROM y Flash. 
Estos controladores son expuestos al sistema a través de registro de datos y control, suelen tener asociados un conjunto de interrupciones destinadas a notificar de los eventos ocurridos. 



Escribiendo en una memoria EEPROM/flash:

  • El controlador expone varios registros para las operaciones.
  • La escritura requiere un temporizado adecuado. Se escriben varias palabras a la vez.
  • Existen mecanismos de protección de bloques de memoria (para escrituras internas, y para acceso desde el exterior vía programadores y debuggers.
  • Protección de propiedad intelectual).



Se tienen interrupciones especiales para controlar el proceso:



Esquema 1: El dispositivo espera el DMAACK para actuar sobre el bus.




Esquema 2: El controlador de DMA copia el dato del dispositivo a un buffer para luego transferirlo a memoria (menos hardware en el dispositivo).
Contadores y Timers
Una tarea habitual en Sistemas Embebidos es el conteo de eventos ocurridos (por ej, la cantidad de pulsos recibidos por una línea).


  • También, la medición de intervalos de tiempo es una tarea esencial.
  • Un derivado de esto consiste en la generación de eventos en un plazo determinado, eventos periódicos, etc.
  • Para ello contamos con los contadores y los timers. El mismo circuito se utiliza para construir timers y como divisor de clock. 
Aplicaciones

  • Medición del tiempo entre eventos.
  • Medición de la duración de un pulso.
  • Conteo de objetos o eventos
  • Delays generados por hardware (sin ocupación del CPU).
  • Generación de eventos a cierto tiempo o periódicos (vía comparadores)
  • Mayor precisión si se usan interrupciones para el procesamiento de los eventos.





WDT

Un watchdog timer (WDT) es un timer utilizado para recuperar al sistema ante un fallo. 
El WDT continuamente se incrementa periódicamente, el software del sistema, resetea el WDTsi por alguna falla, el sistema deja de responder, en cuyo caso el WDT alcanza el overflow.

  • Ante un overflow del WDT, el sistema se resetea.
  • Ante un fallo en sistemas de escritorio, es el usuario quien decide matar un proceso, reiniciar la computadora, etc.
  • En un sistema embebido, no siempre se cuenta con la interfaz necesaria para notar esta condición de error.


Capture/Compare/PWM
A partir de contadores y timers, es común que se implementen dispositivos derivados:
Capture register: captura el tiempo en el cual ocurrió un evento. Se copia allí el valor del timer (el timer no se detiene).

Compare device: para disparar un evento cuando el timer alcanza determinado valor (como al generar eventos periódicos). De compara continuamente el valor del timer con el del registro. Cuando coinciden, se produce un evento.

PWM generator: genera una señal de ancho de pulso modulado. Este tipo de señales tienen muchas aplicaciones para actuar sobre diversos dispositivos. Consiste en una técnica que permite modular una señal analógica en función del duty cycle de un tren de pulsos digitales periódico.

Aplicaciones:
  • Controlar un motor
  • Controlar el brillo de un led
  • Controlar el tono de un parlante



Generador en Hardware:

Generador en Software:

System reset, subsistemas de inicialización y consumo:

Inicialización del sistema
El reseteo del sistema puede originarse en diversas causas:
– Se conectó el sistema o se reseteó el mismo modificando el nivel lógico de la señal correspondiente (Power-on reset - POR).
– El watchdog timer finalizó sin ser reinicializado.
– Se detectó una caída en el voltaje de alimentación (Brown Out Reset – BOR).

Ejemplo: System reset (ATmega328P)

Ahorro de energía:
Esencial en ciertas aplicaciones (ej: alimentación por baterías)
Ej: tecnología Nanowatt (Microchip)
Se logra:
  • Reduciendo el voltaje de alimentación
  • Reduciendo la frecuencia de reloj: múltiples modos de ejecución con varios relojes a distintas frecuencias.
  • Desactivando módulos que no se estén utilizando o incluso el mismo CPU.
Sleep – suspendiendo el microcontrolador
El modo sleep permite apagar el CPU para ahorrar energía. Mediante una instrucción a tal fin se suspende el sistema hasta la ocurrencia de un nuevo evento.
  • Power-on reset
  • WDT wake up (en sleep el WDT puede despertar al sistema)
  • una interrupción externa (ciertas interrupciones internas no pueden producirse a causa del modo sleep, x ej. timers).

Detección de voltaje bajo
  • Útil para detectar la ausencia de carga suficiente en las baterías que alimentan el sistema o para detectar cortes en el suministro eléctrico.
  • Muchos IC reguladores de voltaje, permiten interrumpir al CPU ante esta situación (usualmente NMI). Otras veces, este tipo de detectores vienen integrados en los microcontroladores.
  • El CPU puede correr una rutina crítica antes de perder la energía por completo (capacitores con cargas
  • residuales pueden proveer la energía necesaria para esto durante un período breve de tiempo).

Referencias:
Simon, D. An Embedded Software Primer. Addison-Wesley 
Professional. 1999. ISBN: 978-0201615692. Capítulo 3.

1 comentario: