Emulación de sistemas Linux integrados con QEMU

Emulación de sistemas Linux integrados con QEMU

 

1. Introducción

El desarrollo de software integrado se basa en dispositivos de hardware integrados, como placas de desarrollo, dispositivos de módulos externos, etc., pero si el trabajo de depuración no tiene nada que ver con los periféricos, solo se puede simular la depuración del kernel utilizando QEMU sin comprar hardware.

Está disponible para hosts Linux y Windows y para destinos PowerPC, ARM, MIPS y SPARC emulados. QEMU adopta el enfoque de proporcionar una capa de traducción mínima entre el host y el procesador de destino. El procesador host es el que ejecuta el emulador y el procesador de destino es el que se está emulando.

La siguiente es una introducción detallada al proceso de configuración del entorno de desarrollo QEMU.

 

2. Medio Ambiente

2.1 Entorno utilizado

*Ubuntu-18.04.1

O:

* PC: Windows10

* Máquina virtual: VirtualBox-5.18

* Sistema operativo virtual: Ubuntu-18.04.1

* Tablero de desarrollo simulado: vexpres

2.2 Herramientas utilizadas al configurar el entorno

* qemu-4.2.0

* linux-4.14.172 (núcleo de Linux)

* u-boot-2017.05

* caja ocupada-1.31.1

* brazo-linux-gnueabi-gcc

Coloque todos los archivos relacionados en /home/joe/qemu

3. Instalar herramientas de compilación cruzada

# sudo apt install gcc-arm-linux-gnueabi

 

Verifique si la instalación es exitosa

$ brazo-linux-gnueabi-gcc -v

Utilizando inspecs incorporados.

COLLECT_GCC = arm-linux-gnueabi-gcc

COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabi/7/lto-wrapper

Destino: arm-linux-gnueabi

Configurado con: ../src/configure -v –with-pkgversion='Ubuntu/Linaro 7.5.0-3ubuntu1~18.04′–with-bugurl=file:///usr

Modelo de hilo: posix

gcc versión 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04)

 

4. Configurar y compilar el kernel de Linux

4.1 Descargar el núcleo de Linux

Descargue la versión del kernel requerida de www.kernel.org.

Aquí descargo la versión de kernel compatible a largo plazo relativamente más reciente linux-4.4.157

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.157.tar.xz  al directorio /qemu

4.2 Descomprime el kernel de Linux

# tar xvJf linux-4.4.157.tar.xz

4.3 Compilar el kernel de Linux

// Ingrese el directorio del archivo fuente del kernel

#cdlinux-4.4.157

hacer CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig

hacer CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm menuconfig

Si ejecutar menuconfig muestra que falta el paquete ncurses, simplemente ejecute el siguiente comando para instalarlo)

$ sudo apt-get install libncurses5-dev

Ingrese al menú de configuración y realice los siguientes ajustes

Compilar con cadena de herramientas cruzada

Después de una compilación exitosa, genere un archivo de imagen del kernel en el directorio

arch/arm/boot, zImage y dtb se pueden copiar en una carpeta separada para un uso conveniente

 

5. Instalar herramientas QEMU

5.1 Instalar QEMU

* wget https://download.qemu.org/qemu-4.2.0.tar.xz

* tar xvJf qemu-4.2.0.tar.xz

* cd qemu-4.2.0

5.2 Instalar paquetes dependientes antes de configurar QEMU

# apt instalar zlib1g-dev
# apto para instalar libglib2.0-0 libglib2.0-dev
# apto para instalar libsdl1.2-dev
# apto para instalar libpixman-1-dev libfdt-dev

Para evitar que los archivos se desordenen después de la compilación, cree el directorio del generador como la ruta de destino intermedia para la compilación.

Configurar, compilar e instalar QEMU.

5.3 Configure QEMU para admitir todas las placas bajo la arquitectura del brazo

# ../configure –target-list=arm-softmmu –audio-drv-list=

Si falta pixman cuando aparece el siguiente mensaje,

use sudo apt-get install libpixman-1-dev para instalarlo.

5.4 Ver versión QEMU

5.5 Ver placas de desarrollo compatibles con QEMU

5.6 Ejecutar QEMU

# qemu-system-arm -M vexpress-a9 -m 512M -kernel ./zImage -dtb ./vexpress-v2p-ca9.dtb -nographic -append “console=ttyAMA0”

O:

$ pwd

/inicio/joe/qemu

# qemu-system-arm -M vexpress-a9 -m 512M -kernel linux-.4.157/arch/arm/boot/zImage -dtb linux-4.4.157/arch/arm/boot/dts/vexpress-v2p-ca9. dtb -nographic -append “consola=ttyAMA0”

Para realizar mejores pruebas e iniciar qemu, puede crear el script de inicio start.sh y otorgar permiso al script para ejecutar chmod +x start.sh

 

#! / Bin / bash

 

qemu-sistema-brazo \

-M vexpreso-a9 \

-m 512M\

-kernel /home/joe/jemu/linux-4.4.157/arch/arm/boot/zImage\

-dtb /home/joe/jemu/linux-4.4.157/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \

-nográfico \

-agregar "consola = ttyAMA0"

 

6. Cree un sistema de archivos raíz

Use busybox para crear un sistema de archivos raíz simple.

6.1 Descargar la herramienta busybox

Descarga busybox desde https://busybox.net/downloads/

# wget https://busybox.net/downloads/busybox-1.31.1.tar.bz2

# tar xjvf ocupadobox-1.31.1.tar.bz2

# cd caja ocupada-1.31.1

# hacer defconfig

# hacer CROSS_COMPILE=arm-linux-gnueabi-

# hacer instalar CROSS_COMPILE=arm-linux-gnueabi-

Se solicita la siguiente información, lo que indica que la instalación se realizó correctamente.

Una vez completada la instalación, el archivo de destino generado se establece de manera predeterminada en el directorio ./_install.

 

6.2 Generar sistema de archivos raíz

6.2.1 compilar e instalar busybox

# mkdir rootfs

# sudo cp -r _install/* rootfs/

6.2.2 Agregar biblioteca glibc, agregar cargador y biblioteca dinámica en el sistema de archivos raíz

# sudo cp -r _install/* rootfs/

# sudo cp -p /usr/arm-linux-gnueabi/lib/* rootfs/lib/

6.2.3 Cree 4 dispositivos de terminal tty (c significa dispositivo de caracteres, 4 es el número de dispositivo principal y 1~4 son los números de dispositivo menor, respectivamente)

 

6.3 Hacer una imagen del sistema de archivos de la tarjeta SD

6.3.1 Generar una imagen de tarjeta SD vacía

# dd if = / dev / zero of = rootfs.ext3 bs = 1M count = 32

6.3.2 Formatear la tarjeta SD como sistema de archivos exts

# mkfs.ext3 raízfs.ext3

6.3.3 Grabar rootfs en la tarjeta SD

# sudo mount -t ext3 rootfs.ext3 /mnt -o bucle

# sudo cp -rf rootfs/* /mnt/

# sudo cantidad /mnt

 

7. Verificar

7.1 Iniciar Qemu

Ejecute el siguiente comando para probar, verifique si el kernel compilado se puede ejecutar correctamente

# sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel ~/qemu/zImage –dtb ~/qemu/vexpress-v2p-ca9.dtb -nographic -append “console=ttyAMA0”

O usando Script:

 

En la prueba anterior, el kernel informará pánico, lo que sugiere que carecemos del sistema de archivos raíz.

El problema anterior se debe a la herramienta busybox generada en el entorno x86.

Usamos make install cuando instalamos busybox, por lo que debe usar

hacer ARCH=armar CROSS_COMPILE=armar-linux-gnueabi-instalar

 

La herramienta de compilación genera la herramienta busybox utilizada por la plataforma arm

# archivo rootfs/bin/busybox

rootfs/bin/busybox: ELF ejecutable LSB de 32 bits, ARM, EABI5 versión 1 (SYSV), enlazado dinámicamente, intérprete /lib/ld-, para GNU/Linux 3.2.0, BuildID[sha1]=cbcd33b8d6c946cb19408a5e8e714de554c87f52, eliminado

 

7.2 Verificar de nuevo

Ahora, Qemu inició el kernel de Linux y montó el sistema de archivos con éxito, y puede interactuar con el sistema con funciones simples a través de la terminal serial. El problema de no poder ejecutar /etc/init.d/rcS en el proceso de impresión, solo necesita agregar el archivo /etc/init.d/rcS. El contenido del archivo puede ser una pronta declaración.

 

7.3 Salir de QEMU

Dos formas de salir de qemu

* En otra entrada de terminal: matar a todos qemu-system-arm

* En la entrada de Qemu: Ctrl+ A; X

QEMU: Terminado

 

8. Inicie el kernel de Linux a través de u-boot

El sistema integrado generalmente incluye: u-boot, kernel, rootfs y appfs. La relación de posición de estas piezas en la placa de desarrollo ARM que se muestra en la siguiente figura

 

Cargador de arranque Parámetros de arranque Núcleo raíces aplicaciones

 

Rootfs puede ejecutarse en placa o PC

 

8.1 Preparar arranque en U

8.1.1 Descargar uboot

http://ftp.denx.de/pub/u-boot/, usamos: u-boot-2021.01.tar.bz2

# tar -jxvf u-boot-2018.09.tar.bz2

8.1.2 Compilar u-boot

# vim Makefile

CROSS_COMPILE = arm-linux-gnueabi-

#vimconfig.mk

ARCO = brazo

# hacer vexpress_ca9x4_defconfig, error

Necesidad: sudo apt install bisonte

sudo apt instalar flex

entonces: # make -j4 error

Necesita: exportar CROSS_COMPILE = arm-linux-gnueabi-

exportar ARCH = armar

de nuevo: # hacer vexpress_ca9x4_defconfig

# hacer -j4

 

 8.1.3 Prueba, iniciar u-boot

$ sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot-2021.01/u-boot –nográfico

 

8.2 Compilación de la configuración del kernel

Use u-boot para iniciar la imagen del kernel:

Necesita compilar el kernel en formato uImage,

Necesidad de especificar la dirección de carga de uImage en la memoria

Especifique al compilar el kernel: make LOADADDR =? uImage -j4

 

# cd /home/joe/qemu/linux-4.4.157

# hacer LOADADDR=0x60003000 uImage -j4

 

Una vez finalizada la compilación de u-boot, se generará un archivo mkimage en la carpeta de herramientas, copie este archivo en la carpeta bin en el directorio del compilador cruzado.

$cdqemu/linux-4.4.157

Error:

$ sudo apt install u-boot-herramientas

Obtener uImagen

9. Configuración de la función de red QEMU

Cuando la máquina virtual Qemu se inicia en u-boot, uImage debe cargarse en la memoria y uImage puede descargarse a la dirección especificada en la memoria a través del servidor TFTP.

9.1 Comprobar si el kernel del host es compatible con el módulo tun/tap

// Instale las dos herramientas de las que depende la red puenteada

# sudo apt install uml-utilities bridge-utils

Crear archivo de dispositivo tun: /dev/net/tun (generalmente se crea automáticamente)

Modifique /etc/network/interfaces (configure la red, reinicie para que surta efecto)

# sudo vim /etc/network/interfaces

auto loiface lo inet loopbackauto enp0s3 // nombre de la tarjeta de red virtualauto br0iface br0 inet dhcpbridge_ports enp0s3

 

NUNCA reiniciar

# reiniciar

Luego verifique el entorno de red de Qemu

El puerto de red virtual br0 es el puerto de red para la comunicación entre la máquina virtual Qemu y el host Linux.

 

10. Instalar servidor TFTP

Cree un servidor TFTP para descargar uImage a la memoria al iniciar uImage para la placa de desarrollo de simulación Qemu

 

10.1 Instalar la herramienta tftp

 

$ apt-get install tftp-hpa tftpd-hpa xinetd

 

10.2 Modificar el archivo de configuración y configurar el directorio del servidor TFTP

# sudo vim /etc/default/tftpd-hpa

......

TFTP_DIRECTORY=”/inicio/joe/tftpboot”

......

10.3 Crear un directorio tftp en el host Linux

# mkdir / inicio / joe / tftpboot

# chmod 777 / home / joe / tftpboot

 

10.4 Reinicie el servicio tftp

# sudo /etc/init.d/tftpd-hpa reiniciar

 

10.5 Establecer los parámetros de inicio del kernel en u-boot

copie uImage y cexpress-v2p-ca9.dtb a tftpboot

Inicie Qemu para verificar

 

$ sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot-2021.01 / u-boot –nographic -net nic, vlan = 0 -net tap, vlan = 0, ifname = tap0 -sd rootfs. ext3

 

Ahora, el directorio rootfs es un sistema de archivos raíz simple, que se puede convertir en un archivo espejo, y el archivo espejo se puede grabar en la placa de desarrollo, o el kernel de Linux puede iniciarse mediante u-boot en Qemu y montarse en el archivo espejo. También se puede configurar para que arranque a través del sistema de archivos de red NFS.

 

11. Monte el sistema de archivos NFS

11.1 Instalar y configurar el servicio NFS

Instalación de 11.1.1

$ sudo apt install nfs-kernel-servidor

 

11.1.2 Configuración

$ sudo mkdir /home/joe/qemu/rootfs

$ sudo chown nadie: ningún grupo /home/joe/qemu/rootfs

$ sudo chmod 777 /home/joe/qemu/rootfs

$ sudo nano /etc/exportaciones

Agregar: /home/joe/qemu/rootfs *(rw,sync,no_root_squash)

 

Reinicie el servidor nfs:

$ sudo /etc/init.d/nfs-kernel-server reiniciar

O: $systemctl reiniciar nfs-kernel-server

 

Compruebe si se crea el directorio compartido NFS

$sudo showmount –e

Cuando se utiliza el sistema de archivos de red NFS, el host de Linux debe cerrar el firewall del sistema; de lo contrario, se producirán anomalías cuando el sistema se esté ejecutando.

 

Conclusión

Con suerte, con la ayuda de este blog, conocerá más sobre QEMU. Todas las técnicas demostradas anteriormente se utilizaron en varias presentaciones a nuestro programa. No hay una forma única y fija de emular con QEMU. Explore diferentes técnicas y vea qué funciona para usted. Familiarícese con el conocimiento y se sorprenderá de cómo puede ayudarle de formas inesperadas.

Introducción de Lichee Pi

Introducción de Lichee Pi

LicheePi es una computadora delicada de placa única que se ejecuta en la plataforma Allwinner V3S de bajo costo, que es popular en los últimos años. Se puede utilizar para que los principiantes aprendan Linux o para el desarrollo de productos. ofrece una gran cantidad de periféricos (LCD, ETH, UART, SPI, I2C, PWM, SDIO…) y un rendimiento potente.

 

       

        Lichee Zero Lichee Nano

 

 

 

       

                                 Lichee Pi Zero Lichee Pi Nano 

 

 

Caracteristicas

LICHEE PI CERO

LICHE PI NANO

SoC Allwinner V3S Todo ganador F1C100S
CPU ARM Cortex-A7 ARM9
Frecuencia de funcionamiento 1.2GHz 408MHz
RAM 64MB DDR2 32MB DDR2
Almacenamiento Flash SPI/Micro-SD Flash SPI/Micro-SD

Pantalla

 

* Universal 40P RGB LCD FPC:

* Resoluciones soportadas: 272×480, 480×800,1024×600

* Chip RTP integrado, admite una pantalla táctil

* Universal 40P RGB LCD FPC:

* Resoluciones soportadas: 272×480, 480×800,1024×600

* Chip RTP integrado, admite una pantalla táctil

Interfaz

 

*SDIO x2
* SPIx1
*I2Cx2
* UARTx3
* 100M Éter x1 (incluye EPHY)
* USB OTGx1
* MIPI CSI x1
*PWM x2
* LRADC x1
* Altavoz x2 + Micrófono x1
*SDIO x1
* SPIx2
* TWIXx3
* UARTx3
* USB OTGx1
* Salida de TV* PWM x2
* LRADC x1
* Altavoz x2 + Micrófono x1

Informacion electrica

 

Micro USB 5V, 2.54 mm pines 3.3V ~ 5V fuente de alimentación; Fuente de alimentación de agujero de sello de 1.27 mm.

1 GHz linux IDLE ejecutar 90 ~ 100 mA; Ejecución de grabación de CPU ~ 180 mA

Temperatura de almacenamiento -40~125

Temperatura de funcionamiento -20 ~ 70

Micro USB 5V, 2.54 mm pines 3.3V ~ 5V fuente de alimentación; Fuente de alimentación de agujero de sello de 1.27 mm.

408 MHz linux IDLE ejecutar 90 ~ 54 mA; con corriente de funcionamiento de pantalla ~250mA

Temperatura de almacenamiento -40~125

Temperatura de funcionamiento -20 ~ 70

 

La temperatura al ejecutar la prueba de esfuerzo de Linux es solo un poco más alta que la temperatura corporal.

 

Lichee Pi admite muchos sistemas operativos como: Linux, RT-Tread, Xboot o ningún sistema operativo.

Como la mayoría de MCU, Lichee Pi puede conectarse a varias interfaces de baja velocidad, como GPIO, UART, PWM, ADC, I2C, SPI y más. Además, puede ejecutar otros periféricos de alta velocidad como RGB LCD, EPHY, MIPI CSI, OTG USB y más. El Lichee Pi tiene un códec integrado que permite la conexión directa a un auricular o micrófono.

 

Conector de pantalla:

La pantalla LCD 40P universal viene con retroiluminación LED y líneas de cuatro hilos, resistencia eléctrica táctil, que es muy adecuada para la visualización y la interacción. A13 también admite la función táctil de resistencia de cuatro hilos, puede llevar a cabo la detección táctil de dos puntos.

 

Esta interfaz es compatible con la interfaz de PANTALLA DE ORIENTACIÓN por la seguridad alimentaria

 

RGB a VGA:

 

RGB a HDMI:

 

RGB a GPIO:

 

RGB a DVP CSI:

 

Enlace Lichee Pi:

http://dl.sipeed.com/
Wiki: maixpy.sipeed.com
Blog: blog.sipeed.com
Grupo de Telegram: https://t.me/sipeed

Introducción a Orient Display Embedded Project

Introducción a Orient Display Embedded Project

Orient Display es una de las pantallas líderes en el mundo Fabricantes de pantallas LCD que fue fundada en 1996 por ejecutivos de más de 25 años de experiencia en I + D y producción. Además de la visualización, Orient Display también se centró en tecnologías integradas que incluyen la arquitectura ARM y ha acumulado una rica experiencia en productos integrados.

Ahora, los servicios técnicos de Orient Display incluyen hardware, software y consultoría.

 

Nuestro equipo de hardware Realice prototipos en el menor tiempo posible de acuerdo con sus ideas y requisitos de diseño. Nos especializamos en el diseño de placas rentables o complejas de alto rendimiento para cumplir con sus requisitos de alta confiabilidad en un ciclo de desarrollo corto.

- Diseño esquemático

– Diseño de placa de circuito impreso

– Personalización de productos de la industria

 

Nuestro Equipo de software se especializa en Linux diseños ARM®Procesador PowerPC y x86, por nombrar algunos. Como proveedor de soluciones completas para Linux, Android y WinCE en sistemas integrados, podemos resolver los problemas relacionados con el sistema de extremo a extremo de sus productos.

– Migración, optimización y personalización del sistema

– Impulsar el desarrollo

– Adaptación del núcleo

- Portar LINUX KERNEL a ARM, PPC o placa x86

– Desarrollo de APP (aplicación, Linux QT, Linux C/++)

 

Nuestro FAE equipo también le proporcionamos una gama completa de tecnologías para sus productos o productos semiacabados.

– Ofrecemos consultas sobre los recursos de software y hardware de nuestros productos;

– Solucionamos los problemas encontrados durante el uso de los manuales de software y hardware de nuestros productos;

– Soporte técnico posventa OEM y ODM;

– Mantenimiento y actualización de datos;

– Los productos de Orient Display están respaldados por nuestra Garantía del precio más bajo.

 

Secuencia de desarrollo

 

1. Análisis de requisitos del sistema

* Tareas de diseño, metas, especificaciones

- Esta proporcionada por nuestros clientes

* Requisito funcional y no funcional

– Incluya el rendimiento del sistema, el costo, el consumo de energía, el volumen, el peso y otros factores

 

2. Diseño de Arquitectura

Una buena arquitectura es la clave del éxito del diseño. En este paso, a menudo es necesario hacer lo siguiente:

  • Seleccione el chip principal:

- ARM Cortex A, R o M, o PowerPc o ColdFire

  • Determinar el RTOS:

—Linux, uClinux, Vxworks, freeRTOS, WinCE

  • Seleccionar pantalla:

- Panel TFT, TFT legible a la luz del sol, Paneles de vidrio LCD, LCD gráfico,  pantalla OLED, Los paneles táctiles, Pantalla LCD integrada or Pantalla hecha a medida by Orientar pantalla

  • Lenguaje de programación:

— c/c++, pitón, Java

  • Herramientas de desarrollo:

u-boot, busybox, QT, Ubuntu, stm32CubeIde, estudio visual, estudio android, keil uVision, estudio RT-Tread

 

3. Co-diseño de hardware y software

Para acortar el ciclo de desarrollo del producto:

hardware:  Por lo general, comenzamos el proyecto desde el tablero de evaluación, como la pantalla de orientación. AIY-A002M, AIY-A003M y AIY-A005M. Más tarde se personalizará el tablero para adaptarse al proyecto, descartar las partes que no necesite.

Secuencia de desarrollo de software:

  • Por lo general, elegimos u-boot como Bootloader, 1) init cpu al estado conocido 2) init memory 3) init interrupt 4) init clock 5) load kernel to running address
  • Configurar el kernel:

1) configurar el sistema kernel: *administración de memoria, *sistemas de archivos, *controlador de dispositivo, *pila de red, *Sistemas de E/S

2) escribir controlador de dispositivo de E/S *controlador de dispositivo char, *controlador de dispositivo de bloque, *controlador de dispositivo de red

  • Seleccionar aplicaciones:

*Seleccione una biblioteca de usuario *Construya una aplicación de usuario *Configure el proceso de inicialización *Construya un FS raíz

 

4. SIntegración del sistema

Integre el software, el hardware y los dispositivos de ejecución del sistema, depure, encuentre y mejore los errores en el proceso de diseño de la unidad.

 

5. Prueba del sistema

Pruebe el sistema diseñado para ver si cumple con los requisitos funcionales dados en la especificación. La característica más importante del modelo de desarrollo de sistemas integrados es el desarrollo integral de software y hardware.

 

En conclusión

Orient Display cuenta con un increíble equipo de expertos talentosos con la experiencia y las capacidades para crear un módulo de visualización integrado desde el concepto hasta la producción.

Si tiene alguna pregunta, comuníquese con nuestros ingenieros en: tech@orientdisplay.com.

Cómo seleccionar procesadores ARM

Cómo seleccionar procesadores ARM

Introducción

La más amplia gama de microprocesador núcleos para casi todos los mercados de aplicaciones. Explorar ARM. Los requisitos de rendimiento, energía y costo para casi todos los mercados de aplicaciones, los procesadores son cruciales. El rendimiento del sistema depende en gran medida de su hardware; este artículo lo guiará a través de un estudio del procesador ARM y será de gran ayuda en su toma de decisiones.

 

Una breve introducción a ARM

Figura 1. Hoja de ruta de los procesadores ARM

 

Antes de 2003, existen procesadores ARM clásicos que incluyen ARM7 (Arquitectura ARMv4), ARM9 (Arquitectura ARMv5), ARM11 (Arquitectura ARMv6). ARM7 no tiene MMU (unidad de gestión de memoria), no puede ejecutar un sistema multiproceso multiusuario como Linux y WinCE. Solo se pueden ejecutar sistemas como ucOS y ucLinux que no necesitan MMU. ARM9 y ARM11 son CPU integradas con MMU, que pueden ejecutar Linux.

Después de 2003, en lo que respecta a la arquitectura ARMv7, recibió el nombre de Cortex y se dividió en tres series: Cortex-A, Cortex-R y Cortex-M.

  • Cortex-A — núcleos de procesador de aplicaciones para sistemas intensivos en rendimiento
  • Corteza-R – núcleos de alto rendimiento para aplicaciones en tiempo real
  • Corteza-M – núcleos de microcontrolador para una amplia gama de aplicaciones integradas

En pocas palabras, Cortex-A La serie es adecuada para aplicaciones que tienen altos requisitos informáticos, ejecutan sistemas operativos ricos y brindan una experiencia gráfica y de medios interactivos. Corteza-R son adecuados para los que requieren confiabilidad, alta disponibilidad, tolerancia a fallas, mantenibilidad y respuesta en tiempo real. Corteza-M Las series están dirigidas a MCU y aplicaciones finales sensibles al costo y la potencia.

 

Cortex-A VS Cortex-R VS Cortex-M

Cortex-A

La categoría de procesadores Cortex-A está dedicada a dispositivos Linux y Android. Cualquier dispositivo, desde relojes inteligentes y tabletas hasta equipos de red, puede ser compatible con los procesadores Cortex-A.

  • Los procesadores Cortex-A (A5, A7, A8, A9, A12, A15 y A17) se basan en la arquitectura ARMv7-A
  • El conjunto de características comunes para los procesadores A incluye un motor de procesamiento de medios (NEON), una herramienta con fines de seguridad (Trustzone) y varios conjuntos de instrucciones compatibles (ARM, Thumb, DSP, etc.)
  • Las características principales de los procesadores Cortex-A son el máximo rendimiento y la brillante eficiencia energética, todo ello combinado estrechamente para proporcionar a los usuarios el mejor servicio posible.

Las principales características del procesador Cortex-A:

Cortex-A5: El Cortex A5 es el miembro más pequeño y de menor potencia de la serie Cortex A, pero aún puede demostrar un rendimiento multinúcleo, es compatible con los procesadores A9 y A15.

Cortex-A7: El consumo de energía de A7 es casi el mismo que el de A5, pero el rendimiento proporcionado por A7 es un 20 % más alto que el de A5, así como una compatibilidad arquitectónica total con Cortex-A15 y Cortex-A17. El Cortex-A7 es una opción ideal para implementaciones de tabletas y teléfonos inteligentes sensibles al costo.

Contrex-A15: El Cortex-A15 es el miembro de mayor rendimiento de esta serie, brindando el doble de rendimiento que el A9. A15 encuentra su aplicación en dispositivos de gama alta, servidores de bajo consumo e infraestructura inalámbrica. Este es el primer soporte de procesador para gestión de datos y soluciones de entorno virtual.

Contrex-A17: El Cortex-A17 demuestra un rendimiento un 60 % superior al del A9. El objetivo principal es satisfacer las necesidades de los dispositivos de primera clase.

Contrex-A50: Contrex-A50, la última serie, se basa en la arquitectura ARMv8 y trae consigo soporte para Arch64-bit un sistema de eficiencia energética. Una razón obvia para el cambio a 64 bits es la compatibilidad con más de 4 GB de memoria física, que ya se logra en Cortex-A15 y Cortex-A7.

 

Corteza-R

Los procesadores Cortex-R están destinados a aplicaciones en tiempo real de alto rendimiento, como controladores de disco duro, reproductores multimedia de equipos de red y otros dispositivos similares. Además, también son un gran soporte para la industria automotriz, como bolsas de aire, sistemas de frenado y gestión del motor.

Corteza-R4:  Cortex-R4 es muy adecuado para aplicaciones automotrices. Se puede sincronizar hasta 600 MHz, tiene una canalización de 8 etapas con emisión dual, búsqueda previa y un sistema de interrupción de baja latencia, lo que lo hace ideal para sistemas críticos de seguridad.

Corteza-R5: Cortex-R5 amplía las funciones que ofrece R4 y agrega mayor eficiencia, confiabilidad y mejora la gestión de errores. La implementación de doble núcleo permite construir sistemas muy potentes y flexibles con respuestas en tiempo real.

Corteza-R7: El Cortex-R7 amplía significativamente el rendimiento. Cuentan con una canalización de 11 etapas y permiten tanto la ejecución desordenada como la predicción de bifurcaciones de alto nivel. Las herramientas se pueden implementar para el multiprocesamiento simétrico y asimétrico. El controlador de interrupción genérico es otra característica importante que debe mencionarse.

 

Corteza-M

Cortex-M diseñado específicamente para apuntar al mercado de MCU. La serie Cortex-M está construida sobre la arquitectura ARMv7-M (usada para Cortex-M3 y Cortex-M4), y la Cortex-M0 + más pequeña está construida sobre la arquitectura ARMv6-M. Es seguro decir que el Cortex-M se ha convertido para el mundo de 32 bits en lo que el 8051 es para el de 8 bits: un núcleo estándar de la industria suministrado por muchos proveedores. La serie Cortex-M se puede implementar como soft core en una FPGA, por ejemplo, pero es mucho más común encontrarlos implementados como MCU con memorias, relojes y periféricos integrados. Algunos están optimizados para la eficiencia energética, otros para un alto rendimiento y algunos se adaptan a un segmento de mercado específico, como la medición inteligente.

Para aplicaciones que son particularmente sensibles a los costos o que están migrando de 8 bits a 32 bits, el miembro más pequeño de la serie Cortex-M podría ser la mejor opción.

Corteza-M0: El Cortex-M0+ usa el conjunto de instrucciones Thumb-2 y tiene una canalización de 2 etapas. Las características significativas son el bus para GPIO de ciclo único y el búfer de microtraza.

Corteza-M3 y M4:  El Cortex-M3 y el Cortex-M4 son núcleos muy similares. Cada uno ofrece una tubería de 3 etapas, múltiples buses de 32 bits, velocidades de reloj de hasta 200 MHz y opciones de depuración muy eficientes. La diferencia significativa es la capacidad del núcleo Cortex-M4 para DSP. Cortex-M3 y Cortex-M4 comparten la misma arquitectura y conjunto de instrucciones (Thumb-2). Si su aplicación requiere matemáticas de punto flotante, lo hará considerablemente más rápido en un Cortex-M4 que en un Cortex-M3. Dicho esto, para una aplicación que no utiliza las capacidades DSP o FPU del Cortex-M4, verá el mismo nivel de rendimiento y consumo de energía en un Cortex-M3. En otras palabras, si necesita la funcionalidad DSP, elija un Cortex-M4. De lo contrario, el Cortex-M3 hará el trabajo.

 

Conclusión

Figura 2. Descripción general de la corteza

 

Los procesadores ARM ofrecen una variedad de capacidades para diferentes propósitos. Con un poco de reflexión e investigación, podrá encontrar el procesador adecuado que se adapte a las necesidades de su aplicación. ya sea para una tableta de alta gama o un nodo de sensor inalámbrico de costo ultra bajo.

Es un desafío tomar la decisión correcta del núcleo de Cortex y convertir la idea en realidad. Pero un equipo de profesionales experimentados puede ocuparse de todos los problemas e implementar conceptos de cualquier complejidad.

Orient Display se ha centrado en las tecnologías relacionadas con el procesador ARM durante muchos años y ha acumulado una rica experiencia en el desarrollo e implementación de productos de arquitectura ARM. Mientras lanza continuamente plataformas de desarrollo y placas base que satisfacen las necesidades generales del mercado, también aborda las necesidades de proyectos individuales de los clientes. Proporcionar servicios personalizados.

Nuestro equipo de hardware puede producir prototipos en el menor tiempo posible de acuerdo con sus ideas y necesidades de diseño. Nuestro equipo de software puede ayudarlo a personalizar todas las funciones de la capa del controlador de corte.

Contáctanos y le ayudaremos a hacer sus planes desde la idea inicial hasta el producto final.

¿Cómo usar pantallas LCD gráficas con Raspberry Pi?

¿Cómo conectar LCD gráfico a Raspberry PI?

El artículo muestra como conectar un 128×64 pantalla LCD gráfica a una Frambuesa Pi.

La pantalla LCD utilizada es de 128 × 64 con controlador LCD de ST7565. Se puede alimentar directamente desde el riel Raspberry Pi 3.3V. Requiere 5 pines GPIO para datos.

El esquema es, CS (selección de chip), RST (restablecimiento) y A0 (selección de registro) se pueden conectar a cualquiera de los 3 pines GPIO. En este ejemplo, 8,24, 25 y 7565 son valores predeterminados. Se pueden especificar diferentes valores como parámetros al crear instancias de la clase Python ST11. SCLK (Reloj en serie) en el GLCD va a GPIO 10, que es el reloj en serie de Pi. SID (datos de entrada en serie) en el GLCD va a GPIO 10 en el Pi que es MOSI. Se deben usar GPIO 11 y 3.3 para SID y SCLK. Vdd está conectado a un pin de XNUMX V en el PI y las tierras también están conectadas.

La pantalla LCD tiene una luz de fondo RGB. Los pines LED pueden ir a GPIO's 16,20 y 21. Para controlar el color desde el Pi, especificando pines RGB cuando instancias la clase ST7565. Las resistencias deben colocarse en serie para limitar la corriente y evitar la avería del LED. El brillo del LED se puede cambiar usando diferentes valores de resistencias. Será mejor ajustar la corriente para que esté alrededor de 20 mA, por supuesto, diferentes valores darán como resultado una mezcla diferente de colores. Es muy difícil mezclar un color blanco puro. Calcule cuidadosamente el valor de la resistencia, a 40 mA, el brillo del LED disminuirá drásticamente con el tiempo, con una corriente cercana a los 60 mA, el LED podría averiarse y dañarse permanentemente.

¿Cómo programar un LCD gráfico?

La pantalla es de 128 píxeles horizontales por 64 píxeles verticales. La pantalla LCD se puede dividir en 8 páginas horizontales. Están numerados del 3 al 0 y del 7 al 4 de arriba hacia abajo. Cada página incluye 128 columnas y 8 filas de píxeles. Para direccionar los píxeles, especifique el número de página y columna, y envíe un byte para llenar 8 píxeles verticales a la vez.

La pantalla tiene SPI (Interfaz Periférica Serial) para conectarse a Pi. SPI requiere 3 líneas MOSI, MISO y Reloj. El Pi es el maestro y el GLCD es el esclavo. En este ejemplo, solo escribe en GLCD y no está listo, por lo que se necesita la conexión a MOSI y líneas de reloj. MOSI es la salida del Pi al GLCD y el reloj sincroniza el tiempo.

  1. Habilitar SPI en Raspberry Pi la primera
  2. En el menú de configuración de raspi, seleccione Opciones avanzadas, luego SPI. Luego seleccione Sí para "Me gustaría que la interfaz SPI esté habilitada". Pulse Aceptar, Reiniciar. Seleccione Sí para que "el módulo del kernel SPI se cargue de forma predeterminada". Reinicie el Pi después de habilitar SPI. Luego prueba SPI usando IsmodDebería devolver SPI_bcm2708 o spi_bcm2835 según la versión de Pi. La biblioteca python SPI requiere python2.7 dev, que se puede instalar con apt-get install:
  3. La Biblioteca Python SPI se llama py-spidev. Se puede instalar usando git:GLCD La biblioteca de Python para Pi se puede descargar desde el sitio de GitHub.
  4. La biblioteca principal ST7565 (st7565.py) maneja el dibujo, el texto y los mapas de bits, y un módulo de fuente (xglcd_font.py) para cargar fuentes X-GLCD. Estos son los comandos de dibujo básicos para crear puntos, líneas, rectángulos, círculos, elipses y polígonos regulares: Para obtener más detalles, consulte la referencia a continuación o póngase en contacto con nuestros ingenieros.

Introducción a proyectos basados ​​en la placa STM32G071RB utilizando STM32CubeIDE

Introducción a proyectos basados ​​en la placa STM32G071RB utilizando STM32CubeIDE

Consulte nuestro artículo Consejo Regulador!

Comenzar con un microcontrolador basado en ARM de 32 bits siempre es un poco desalentador. Hay demasiados microcontroladores, plataformas, placas de desarrollo, herramientas y software disponibles. Esta nota describe paso a paso cómo iniciar un proyecto DEL.

Para comenzar: acerca de la placa de desarrollo STM32G071RB

Características:

  • Núcleo: CPU Arm® Cortex®-M32+ de 0 bits, frecuencia de hasta 64 MHz
  • Hasta 128 Kbytes de memoria Flash, 36 Kbytes de SRAM
  • Controlador DMA de 7 canales con mapeo flexible
  • ADC de 12 bits, 0.4 µs (hasta 16 canales externos)
  • Dos DAC de 12 bits, muestreo y retención de baja potencia
  • Dos I2C, cuatro USART, un UART de baja potencia, dos SPI

 

Primeros pasos: Instale STM32CubeIDE

Puede descargar STM32CubeIDE de su st.com. Es gratis. Instale STM32CubeIDE siguiente Guía de instalación de STM32CubeIDE.

 

Tu primer proyecto: LED parpadea

Antes de que podamos comenzar a escribir código, necesitamos crear un proyecto. Esto es similar a la mayoría de los otros IDE: los proyectos se utilizan para agrupar todas sus configuraciones, códigos y definiciones en una sola colección, todo administrado desde la misma aplicación.

 

 

PASO 1: Inicie un nuevo proyecto, desde el icono superior izquierdo (o en el menú Archivo > Nuevo > Proyecto STM32) para comenzar.

 

Paso 2: Nombre del proyecto: G0_LED, luego haga clic en el botón Finalizar.

Del diagrama esquemático que el LED4 está controlado por STM32G071 y el puerto es PA5.

Paso 3: Desde System Core > SYS, seleccione Serial Wire, configure PA5 como GPIO_OUTPUT.

Configure la etiqueta de uso para PA5 como LED_GREEN como se muestra a continuación:

 

Paso 4: luego genera el código.

 

CubeIDE, sobre el cual se desarrolla esta funcionalidad, genera archivos C para trabajar con un directorio Src y coloca una HAL (Capa de abstracción de hardware) en un directorio Incluye. Parece que CubeIDE funciona exactamente de la misma manera. Expanda las carpetas a la derecha debajo de la vista del proyecto y vea qué ha generado para que funcione para usted.

 

 

Paso 5: ¡Agreguemos una pizca de nuestro propio código C ahora! Después del área Infinite Loop, agregaremos código para alternar el LED en la sección 3 como se muestra a continuación:

 

 

Compilando el proyecto y descargándolo a la placa

STM32CubeIDE en realidad hace que sea bastante fácil compilar nuestro trabajo y colocarlo en el chip STM32. El primer paso es producir el .elf compilado (una versión binaria de nuestro código). Para generar el .elf, necesitamos hacer una compilación. Esto es tan fácil como presionar el botón de compilación en la barra de herramientas.

Ahora, la información de compilación se presenta en la consola en la parte inferior de la pantalla.

Ahora lo que queremos hacer es enviar este binario compilado al microcontrolador STM32.

Conectemos el kit de desarrollo:

El LED de alimentación rojo (a la izquierda del interruptor azul) está encendido, al igual que el LED de comunicación más grande (por el cable USB). Dentro de STM32CubeIDE, seleccione el botón ejecutar.

Esto abrirá el cuadro de diálogo Ejecutar (ya que es la primera vez que lo ejecutamos). La configuración que elijamos ahora se guardará como una configuración de ejecución que podremos reutilizar o editar más adelante.

Simplemente presione Aplicar y luego Aceptar y la descarga continuará. La consola ahora se llenará con un texto interesante:

El LED se enciende y se apaga cada 500 ms. tienes todo configurado.

STM32 frente a Arduino

STM32 frente a Arduino

Consulte nuestro artículo Consejo Regulador!

 

Arduino

Arduino es más creativo, debilita el funcionamiento de hardware específico, sus funciones y sintaxis son muy simples y es muy "tonto".

La mayor parte del control principal de Arduino es el microcontrolador AVR. La ventaja de Arduino es que tiene una alta encapsulación de código y menos oraciones, lo que reduce la dificultad del desarrollo de software.

Arduino es relativamente fácil de comenzar, siempre que comprenda un poco de hardware y C ++, puede desarrollar.

La mayoría de las funciones de Arduino tienen bibliotecas bien construidas, por lo que es muy fácil de usar, pero la capacidad de control de las funciones un poco más complicadas es deficiente. 

 

STM32

STM32 presta más atención a la práctica de la ingeniería. De hecho, hay muchos instrumentos simples en la fábrica, como controladores de temperatura, controladores de motor ordinarios, PLC de gama baja y algunos juguetes civiles, controladores de juegos, teclados y ratones con cable, y otros periféricos, etc. son muy prácticos.

STM32 se utiliza principalmente como productos para desarrolladores profesionales, lo que requiere cierto conocimiento profesional, pero al mismo tiempo, es relativamente complicado escribir código para realizar funciones. Por ejemplo, el puerto serie genera una cadena simple. Para Arduino, puede partir de un nuevo proyecto y se puede realizar con 10 líneas de código. Sin embargo, si usa herramientas de desarrollo STM32 como Keil, puede requerir cientos de líneas de código o más.

En términos de código abierto: las cosas hechas con STM32 pueden ser de código abierto si quieres el código abierto, y no puedes publicar nada si no quieres el código abierto.

 

Conclusión

 

Aquí hay algunas sugerencias para elegir:

Si usted es un estudiante común por debajo del nivel universitario que no tiene un conocimiento profundo de los lenguajes de programación, se recomienda comenzar con Arduino. Si las habilidades de C son débiles y se le ocurre STM32, pronto tendrá la idea de darse por vencido.

Si solo estudia para el empleo, decididamente el microcontrolador STM32.

Si está aprendiendo solo por diversión y no tiene especialización en electrónica y no tiene confianza, se recomienda Arduino.

Si tiene buenas habilidades de programación, se recomienda STM32. Una vez que lo haya hecho, puede echar un vistazo a las cosas hechas por la comunidad de código abierto de Arduino, y puede hacerlo fácilmente con STM32.

Por supuesto, si tienes la habilidad, puedes hacer contacto con ambos. En general, puede dominar las funciones básicas de Arduino en menos de una semana. Si lo necesita en el futuro, puede trasplantar libremente el código Arduino a plataformas MCU como STM32.

De hecho, los dos apuntan en direcciones ligeramente diferentes. Arduino es la elección de los aficionados a la electrónica general y al bricolaje, mientras que STM32 se utiliza a menudo para el desarrollo y la fabricación de productos reales.