4. COMPONENTES DE UN SISTEMA EMBEBIDO
4.1. PROCESADORES Y SISTEMAS EN CHIP PARA APLICACIONES EMBEBIDAS
4.1.1. Basados en ARM
Altera Excalibur: Oct. 15, 2001. La familia Excalibur de procesadores embebidos en Dispositivos
Lógicos Programables (PLDs), incluyen núcleos ARM922T y Nios de Altera, lógica programable, memoria dentro del chip, y varios periféricos. Ellos soportan 38,400 elementos lógicos.
Aplio/TRIO: Jun. 12, 2000. CPU ARM7TDMI de 20 MHz sin MMU junto con un par de DSPs 40 MHz,
dos puertos seriales, 23 E/S digitales, SPI, dos CODECs, Ethernet 10/100, USB, e interfaz para memoria flash. Los DSPs y los CODECs proveen funciones en software para modem, audio, y voz.
Atmel AT91RM9200 ARM920T: Sep. 15, 2004. Este SoC de 180 MHz está basado en un núcleo
ARM920T, con 16KB de I-Cache y 16KB de D-Cache.
Atmel Fast VirtualNet AT76C504/505/506: Ago. 21, 2002. Son Controladores de Acceso al Medio
(MAC) en banda base en un chip. Soportan PCMCIA o Compact Flash, USB, y PCI o mini-PCI. Incluyen una interfaz a micro dispositivos RF (RFMD) e impresoras, PDAs, y calculadoras.
Centrality Atlas: Abr. 18, 2003. Es un ARM9 basado en un SoC ultra-integrado que se enfoca en los smartphones inalámbricos y con GPS, PDAs, y sistemas para telemática y de navegación para
automóviles. Integra un DSP para comunicaciones y control, controlador para LCD, Bluetooth, y controladores GPS en banda base (circuitos externos de RF requeridos), interfaz de cámara digital, y una larga lista de control de periféricos e interfaces para la expansión del sistema.
Cirrus Maverick EP7312: Oct. 12, 2000. Es un ARM720T de 18-74 MHz con 48 KB de SRAM interna,
interfaz de memoria SDRAM externa, decodificador de audio built-in con capacidad de
descompresión, 27 E/S digitales, dos UARTs 16550, IrDA, puerto serial síncrono, controlador de LCD, y ROM built-in. Muy bajo consumo de potencia, típicamente de 94 mW a 74 MHz.
Cirrus CS89712: Oct. 31, 2000. Es un dispositivo para comunicaciones Internet con un núcleo
ARM720TDMI de 74 MHz, conectividad ethernet de 10 Mbps (MAC y físico), controlador para LCD, junto con un amplio rango de periféricos internos.
Cirrus Maverick EP9307: Oct. 13, 2004. Es un SoC altamente integrado para aplicaciones en red
sensitivas al costo. El EP9307 de USD$ 13 está basado en un núcleo ARM9 de 200 MHz, con varios componentes integrados para: gráficos, audio, red, y un host con otros controladores de interfaces.
Cirrus Maverick EP9312: Jun. 12, 2000. Contiene un ARM920T de 200 MHz junto con un
coprocesador especializado para el procesamiento de audio digital, además de interfaces para dos discos duros IDE, ethernet 10/100, puerto serial, tres USB host, display LCD, teclado, I2S bus de
audio, panel táctil, y E/S digitales. ROM built-in para el bootloader.
Freescale MC9328MX1 i.MX1 y i.MXL: Nov. 17, 2003. Basado en un núcleo ARM920T con 16 KB de
I-Cache y 16 KB de D-Cache, y muy bajos requerimientos de potencia. Enfocado a dispositivos móviles. Integra controlador SDRAM, interfaz para LCD, puerto de video, dos UARTs, dos puertos SPI, puerto USB, bus I2C, E/S de propósito general, e interfaces para memory card, entre otros
periféricos. El iMXL incluye un subconjunto de las funciones built-in del i.MX1.
Freescale i.MX21: Jul. 8, 2004. Basado en un núcleo ARM926EJ-S de 266-400 MHz, con
aceleración Java "Jazelle", aceleración MPEG-4 y H.263 para codificar/decodificar, soporte para gráficos 3D a través de un bus externo con interfaz maestra, controlador para LCD a color de 16/18- bits hasta resolución VGA, 4 UARTs, IrDA, controlador AC97 host, y USB On-The-Go. Suporta dos
slots MMC e interfaz SD/SDIO card, PCMCIA. Posee características de seguridad avanzadas
incluyendo alta confiabilidad en el arranque, controlador de seguridad, y administración de memoria. Controlador para flash NAND.
Freescale i.MX31: Jul. 14, 2005. Basado en el núcleo ARM1136JF-S, los procesadores i.MX31 y
i.MX31L de Freescale, inician en 532 MHz, con un coprocesador vectorial de punto flotante y caché L2, son diseñados para cualquier dispositivos inalámbrico que ejecuta aplicaciones multimedia computacionalmente intensivas tales como difusión de video digital y video conferencia. Son también ideales para dispositivos móviles dirigidos a usuarios que mantienen varias aplicaciones ejecutándose a la vez. Se aplican especialmente a SmartPhones, grabadoras de video digital, cámaras digitales, consolas de juego móviles, reproductores multimedia móviles y muchas otras aplicaciones móviles inalámbricas.
Intel XScale: Ago. 23, 2000. Los chips XScale de Intel incluyen núcleos implementados por Intel,
basados en una licencia de arquitectura ARM. Conjunto de instrucciones ARM9. También incluyen otros componentes dentro del chip para aplicaciones específicas. Entre los procesadores de esta familia que se dirigen a sistemas móviles se encuentran las familias PXA25x, PXA26x y la PXA27x.
Intel XScale PXA25x: Mar. 25, 2003. El más destacado es el PXA255 de 400 MHz que reemplazó al
PXA250 en Marzo de 2003. Ofrece desempeño mejorado y extiende la vida de la batería. Es muy popular en muchas PDAs que ejecutan Linux y otros dispositivos portátiles.
Intel XScale PXA27x: Jun. 2, 2004. Estos chips se caracterizan por tener las tecnologías "MMX
Inalámbrico" y "Quick Capture" dirigidas a aplicaciones ricas en gráficos tales como reproductores multimedia personales, dispositivos de navegación, y terminales portátiles para puntos de venta. Disponible en velocidades de 312 MHz, 416 MHz, y 520 MHz, con soporte para administración avanzada de potencia.
LinkUp Systems L7205: Jun. 12, 2000. Es una CPU ARM720T de 74 MHz sin MMU junto con un
coprocesador DSP, dos controladores para LCD (uno mono y uno mono/color), dos UARTs de alta velocidad ("Bluetooth ready"), dos puertos seriales síncronos para códec de audio o SPI, USB host/dispositivo, RTC, temporizador watchdog, y 52 E/S digitales.
NeoMagic MiMagic 3: Jun. 27, 2002. Es una CPU ARM720T de 110 MHz. Posee MMU, 1K de ROM
de arranque interna, interfaces para SD card, MMC, CompactFlash, SmartCard, USB host/function, 3
UARTs de alta velocidad, IrDA, AC-97, UCB1200, LCD color/mono, control para administración de potencia, varios temporizadores/contadores, RTC, entradas IRQ, GPIOs.
Nvidia MediaQ Katana: May. 15, 2003. Familia de chips basados en ARM922T enfocados en
smartphones habilitados con multimedia. El modelo básico es el MQ9000 que integra memoria embebida, controlador de gráficos a color para LCDs de 320x480 STN y TFT, controlador NAND, interfaz de cámara con estándar CCIR656, tres puertos seriales, e interfaces para USB, SDIO de 4 bits, y un teclado. También incluye hardware de aceleración dedicado para gráficos 2D de 64 bits, post procesamiento MPEG-4, y Java. El MQ9100 y el MQ9150 añaden compresión JPEG por hardware.
Samsung S3C2400/2410: Jul. 29, 2002. Es un microprocesador RISC ARM920T de 16/32 bits
enfocado a dispositivos portátiles. Integra 16KB de I-Cache y 16KB de D-Cache, MMU, controlador de LCD STN y TFT, NAND flash para Bootloader y más, y está disponible con un chip para
CF/USB/audio y una implementación Linux de Esfia.
Samsung S3C2440: Jul. 21, 2003. Es un microprocesador RISC ARM920T de 533 MHz 16/32 bits
enfocado a PDAs, smartphones, y dispositivos portátiles. Interfaces internas que incluyen una
interfaz de cámara, controlador de LCD STN y TFT, una tarjeta controladora SD/MMC/SDIO, controladores USB host/dispositivo, una interfaz para panel tactil, y una interfaz para flash NAND y bootloader.
Samsung S3C44B0X: Jul. 29, 2002. Es un microprocesador RISC ARM7TDMI de 66 MHz 16/32 bits
enfocado a dispositivos portátiles. Este integra 8 KB de caché, SRAM interna opcional, controlador para LCD, UART de 2 canales, DMA de 4 canales, y más, y está disponible con un chip acompañante para CF/USB/audio y una implementación Linux de Esfia.
Sharp LH7A400 "Bluestreak": Ago. 23, 2003. Contiene un núcleo ARM9TDMI de 32 bits, con MMU.
Incluye un controlador para LCD a color, interfaces SRAM/SDRAM/flash, MMC, PCMCIA/CF, y Smart Cards. También provee USB, 3 UARTs, puerto serial síncrono, interfaz para códec AC'97, y
E/S paralelas.
Sharp LH7A404: Feb. 20, 2004. Es un ARM922T de 200 MHz 32 bits altamente integrado enfocado
en aplicaciones móviles, industriales y de entretenimiento. Incluye USB host, controlador para panel táctil, controlador programable para LCD, controlador ATD, interfaces para memoria, controlador DMA, puertos seriales y paralelos, soporte para infrarrojos, contadores/temporizadores, RTC, temporizador watchdog, y un PLL interno.
STMicroelectronics "Nomadik": Feb. 3, 2003. Es un SoC de núcleo doble con ARM926 de 350-500
MHz y “aceleradores inteligentes” programables para funciones de codificación para audio y video. Usa la interfaz estándar OMAPI.
TI DM342: May 7, 2004. Es un procesador multimedia programable con un núcleo DSP C54x de baja
potencia, un procesador RISC ARM926, más coprocesadores para video e imágenes.
Texas Instruments OMAP5912: Mar. 29, 2004. SoC multi-núcleo ARM + DSP dirigido a terminales
portátiles de datos. Integra un procesador ARM9, un núcleo DSP TMS320C55x, soporta USB “On the Go”, interfaz doble para cámara, capacidad para display, y un hardware para encriptación.
Triscend A7 CSoC: Sep. 18, 2000. CPU ARM7TDMI de 60 MHz sin MMU, más dos UARTs,
temporizador watchdog, E/S paralelas, un área de hasta 40,000 gate que provee 3,200 celdas para
funciones programables las cuales pueden ser usadas para implementar una amplia variedad de funciones tales como display, interfaces, y lógica.
4.1.2. Basados en MIPS
Alchemy Au1100: Apr. 7, 2002. CPU MIPS32 de hasta 500 MHz junto con controladores para LCD,
ethernet 10/100, 3 UARTs, USB host/dispositivo, IrDA, AC97, audio I2S, 2 SSI, 2 puertos secure digital, PCMCIA, y 48 E/S de propósito general.
NEC VR4181A: Ene. 21, 2002. CPU MIPS de 131 MHz 64 bits, más interfaces para LCD STN y TFT,
USB, panel táctil, E/S audio, y bus de expansión ISA.
NEC VR4121: Jun. 12, 2000. CPU MIPS de 168 MHz 64 bits, más interfaces para CompactFlash
(IDE), puerto serial, puerto paralelo, RTC, teclado, panel táctil, y E/S de audio, y bus de expansión ISA.
NEC VR4181A: Ene. 21, 2002. SoC MIPS de 64 bits que integra 18 periféricos. Basado en un núcleo
VR4120A con 157 DMIPS a 131 MHz con consumo de potencia típico de 500 mW. Enfocado a dispositivos portátiles, aplicaciones industriales, comunicaciones en automóviles, y aplicaciones en telemática.
QuickLogic QuickMIPS ESP: Dec. 15, 2003. La familia QuickMIPS ESP (Embedded Standard Product) integra un procesador de alto desempeño basado en un núcleo MIPS32 4Kc, con
funcionalidad para aplicaciones específicas y un fabric programable por campo para flexibilidad y
diferenciación.
4.1.3. Basados en PowerPC
Freescale MPC823e: Jun. 12, 2000. CPU PowerPC de 75 MHz junto con un sofisticado procesador
de señales para comunicaciones, controlador de display CRT/LCD/TV, RTC, PCMCIA, 4 puertos
seriales, USB, I2C, y SPI.
Microblaze Xilinx Virtex-II Pro, Virtex-II Pro X, and Spartan-3: Mar. 30, 2004. Estos PLDs
(Programmable Logic Devices) soportan uno o más núcleos PowerPC, y son soportados por
herramientas de desarrollo que pueden automáticamente generar BSPs Linux.
4.1.4. Otras Arquitecturas
Analog Devices Blackfin BF53x: Feb. 13, 2004. Metrowerks ha portado µClinux al DSP Blackfin
BF535, y al BF533. El Blackfin está basado en la Arquitectura Micro Signal co-desarrollada por Analog Devices e Intel, el cual incorpora funcionalidad de DSP y de microcontrolador en un sólo núcleo.
Altera Nios II: May 19, 2004. Es una nueva familia de núcleos procesadores RISC de 32 bits que
contiene FPGAs. Los nuevos núcleos Nios II soportan µClinux, y se enfocan en diseños de procesadores personalizados de software intensivo donde los ASICs serían muy costosos y se
demoran mucho tiempo para la producción. Los núcleos están disponibles con un núcleo de desarrollo que incluye un IDE basado en Eclipse para el desarrollo de software, al igual que una tarjeta de desarrollo.
Freescale Coldfire: May 17, 2004. Son los microcontroladores y procesadores de 32 bits más viejos
de Freescale basados en el núcleo M68k soportados por µClinux. Los chips Coldfire más recientes, el MCF547x y el MCF548x, están basados en un núcleo v4e que incluye una MMU.
Freescale DragonBall VZ/Super VZ: Apr. 25, 2002. El Dragonball VZ integra un núcleo M68k de 33
MHz, controlador para LCD, ethernet, y posee hasta 22 E/S. El Súper VZ incluye un núcleo M68k de 66 MHz.
Hyperstone E1-32XS: Oct. 15, 2003. Es un núcleo en SoC que integra un conjunto de instrucciones
RISC y DSP con funciones de MCU (Microcontroller Unit ) internas. Ejecuta "hyLinux" que es un
puerto de µClinux hecho en conjunto con Global Digital Technologies.
Infineon Technologies TriCore TC1130 MCU: Feb. 18, 2004. Es una MCU de 32 bits que integra
instrucciones CISC, RISC, y DSP. Incluye MMU, FPU (Floating Point Unit) para soporte completo
Linux. Entrega 200 MIPS (Millions of Instructions Per Second) a 150 MHz. Tiene 144 KB de memoria
interna y un LMB (Local Memory Bus) de 64 bits, y soporta temperaturas extremas.
Renesas SH7705: May. 14, 2003. Es un microprocesador de muy bajo consumo de potencia que
consume 1mA/MHz. Basado en el núcleo RISC SuperH SH-3, con un conjunto muy completo de periféricos, incluyendo USB, puerto serial, MMU, DMAC, interfaz de memoria, e IrDA.
Renesas SH7727: Jun. 4, 2001. Es un SoC con USB enfocado en computadores portátiles, cámaras,
y dispositivos de red. Basado en una CPU SH3-DSP de 160 Mhz 32-bits. Integra un USB host, controlador LCD a color, y muchos otros periféricos.
Renesas SH-Mobile-V: Nov. 25, 2003. Es la próxima generación de SoC de Renesas para teléfonos
móviles.
Tensilica Xtensa V: Jun. 7, 2004. Es un núcleo procesador RISC de 32 bits, configurable, extensible
y sintetizable basado en el conjunto de instrucciones Xtensa y en la arquitectura de Tensilica, y soportada por un IDE basado en Eclipse. El Xtensa V se enfoca en las redes, automatización de
oficina y aplicaciones embebidas inalámbricas.
4.2. DISPOSITIVOS DE ALMACENAMIENTO
Todos los sistemas embebidos requieren al menos un medio de almacenamiento persistente para iniciar incluso las primeras etapas del proceso de arranque. La mayoría de los sistemas, incluyendo los sistemas embebidos Linux, continúan usando el mismo dispositivo de almacenamiento inicial para el resto de su operación, ya sea para ejecutar código o para acceder los datos.
Hay varias formas de almacenamiento que Linux soporta, pero no todas son aptas para sistemas embebidos. Los discos duros y los dispositivos SCSI, por ejemplo, no son aptos para sistemas embebidos debido a su gran tamaño y a la energía que requieren para su funcionamiento. Los dispositivos de almacenamiento más adecuados son los MTDs (Memory Technology Devices).
En la terminología Linux, los MTDs incluyen todos los dispositivos de memoria tales como: ROM convencional, RAM, flash, y DOC (Disk On Chip) de M-Systems. Cada dispositivo tiene sus propias
capacidades, particularidades, y limitaciones. Debido a esto, los desarrolladores de sistemas embebidos tradicionalmente usan herramientas y métodos específicos para ese tipo de dispositivo, con el fin de programarlo y usarlo.
Para evitar, tanto como sea posible, tener diferentes herramientas para diferentes tecnologías y proveer capacidades comunes entre ellas, el kernel de Linux incluye el subsistema MTD. Esto provee una capa unificada y uniforme que permite una combinación de drivers de chip MTD de bajo
nivel con interfaces de alto nivel llamadas “módulos de usuario”, como se puede ver en la figura 20. Estos módulos de usuario no se deben confundir con los módulos del kernel o con alguna abstracción de software a nivel de usuario.
Los drivers de chips MTD se registran con el subsistema MTD para proveer un conjunto de callbacks
y propiedades en la estructura mtd_info de la función add_mtd_device(). Los callbacks que un
driver MTD tiene que proveer son llamados por el subsistema MTD para llevar a cabo operaciones
tales como borrar, leer, escribir, y sincronizar.
Tomando en cuenta que no hay un acuerdo universal encima de la localización de direcciones físicas para dispositivos MTD, el subsistema MTD requiere drivers de mapeo personalizados que le
sistemas y boards de desarrollo tienen configuraciones conocidas de dispositivos MTD, el kernel
contiene varios drivers de mapeo específico para diferentes sistemas de este tipo. Este también
contiene un driver genérico para acceder chips flash CFI en sistemas que no tienen un driver de
mapeo específico. Si no hay drivers de mapeo específico para los dispositivos de memoria del
sistema, es necesario crear uno nuevo usando los existentes como ejemplos. Estos drivers de
ejemplo están disponibles en el directorio drivers/mtd/maps/ del código fuente del kernel.
figura 20. Subsistema MTD
Al igual que con otros drivers de dispositivo del kernel, un driver de chip MTD puede manejar
muchas instancias del mismo dispositivo. Si se tienen por ejemplo dos dispositivos idénticos en el sistema, ellos podrían ser manejados como dispositivos MTD separados por una sola instancia del
driver, dependiendo de su configuración. Para facilitar adicionalmente la personalización del espacio
de almacenamiento en los dispositivos MTD, el subsistema MTD también permite que los dispositivos de memoria sean divididos en múltiples particiones. De forma muy parecida a las particiones de disco duro, cada partición MTD es accesible como un dispositivo MTD por separado y puede guardar datos en formatos completamente diferentes de las otras particiones que están en el mismo dispositivo.
Una vez los drivers de chips MTD están apropiadamente configurados para un dispositivo de
administrado por un módulo de usuario MTD. El módulo de usuario impone un formato de almacenamiento en los dispositivos MTD que administra, y provee interfaces y abstracciones reconocidas por los componentes de alto nivel del kernel. Es importante notar que los módulos de usuario MTD no son completamente interoperables con todos los drivers MTD. De hecho, ciertos
módulos de usuario MTD pueden no ser utilizables con ciertos drivers MTD debido a limitaciones
técnicas o incluso legales.
La siguiente es una lista de drivers de chips MTD que se encuentran disponibles:
DiskOnChip
Son los drivers para la tecnología DOC de M-Systems. Actualmente, Linux soporta el DOC 1000,
DOC 2000, DOC Millenium. Common Flash Interface CFI
CFI es una especificación desarrollada por Intel, AMD y otros fabricantes de flash. Todos los
componentes flash compatibles con CFI tienen su propia configuración y parámetros guardados
directamente en el chip. Consecuentemente, las interfaces de software para su detección, configuración, y uso son estandarizados. El kernel incluye código para detectar y soportar chips CFI. Como la especificación CFI permite que los comandos estén disponibles para diferentes chips, el kernel también incluye soporte para dos tipos de conjuntos de comandos implementados por dos familias de chip diferentes, Intel/Sharp y AMD/Fujitsu.
JEDEC
La asociación de tecnología de estado sólido JEDEC es un organismo de estandarización. Entre sus estándares están un conjunto de normas para chips flash. Es también responsable del manejo de
números de identificación para tales dispositivos. Aunque el estándar flash JEDEC está obsoleto por
la especificación CFI, hay algunos chips que todavía se caracterizan por este estándar. El subsistema MTD soporta la comprobación y configuración de tales dispositivos.
Flash NAND no-DOC
embargo, otros tipos de chips flash NAND en el mercado. El subsistema MTD soporta varios de esos
dispositivos usando un driver separado de los drivers DOC. En el archivo
include/linux/mtd/nand-ids.h del código fuente del kernel hay una lista completa de los dispositivos soportados por este driver.
Flash no-CFI antiguas
Algunos chips flash no son compatibles con CFI ni con JEDEC. El subsistema MTD provee drivers
adicionales que manipulan tales dispositivos de acuerdo a las especificaciones de sus fabricantes. Los dispositivos son soportados de este modo. Se debe tener en cuenta, sin embargo, que estos
drivers no son actualizados tan frecuentemente como los drivers de los dispositivos más
comúnmente usados como las memorias DOC o CFI. RAM, ROM, y chips ausentes
El subsistema MTD provee drivers para acceder chips convencionales RAM y ROM, mapeados en
un espacio de direcciones físicas del sistema, como los dispositivos MTD. Debido a que algunos de estos chips pueden estar conectados al sistema usando un socket o algún conector similar que
permita instalar el chip, el subsistema MTD también suministra un driver que pueda ser usado para
preservar el orden de registro de los nodos de dispositivo MTD en el caso de que uno de los dispositivos sea removido y esté además ausente del sistema.
RAM no-caché
Si en un sistema hay alguna memoria RAM que la CPU no pueda cachear, esta se puede usar como un dispositivo MTD durante la operación normal del sistema. Desde luego, la información que se