EMBEDDED_GET_STARTED - Kasimashi/Systemes-embarques GitHub Wiki

Les systèmes embarqués

Un système embarqué est généralement un système de petite taille, munie d'une batterie qui doit effectuer une action bien précise. Il doit être adapté au cas d'usage. Trouvant un compromis entre autonomie, prix , puissance de calcul et sa taille. Un exemple concret : le téléphone portable, objets IOT ...

image

Introduction

Un système embarqué est un ensemble électronique et/ou informatique intégré comme composant d'un environnement plus important.

On distingue plusieurs types de circuit qui peuvent être analogique ou numérique (donc souvent programmable)

image

C'est un système électronique et informatique, souvent temps réel, spécialisé dans une tâche ou plusieurs tâches bien précise.

Un système embarqué englobe la combinaison logicielle et matérielle avec des capacités fixes ou plus souvent programmables.

Les composants hardwares pouvant être utilisés dans un système embarqués sont :

  • Des processeurs RISC (Reduced Intruction-Set computer) comme ARM, PIC etc ...
  • Des DSP (Digital Signal Processing) : un processeur optimisé pour effectuer des traitements numériques de signals, comme du filtrage, extraction de signaux etc, avec une grosse capacité de calcul ...
  • Des FPGA (Field-Programmable Gate Array): ce sont des circuits logiques programmables ils permettent une modélisation matérielle et reconfigurable.
  • Des périphériques de communication, afficheurs et interfaces

Des composants softwares :

  • Système d'exploitation embarqué en général temps réel pour des applications multi-tâches.
  • Des logicielles spécifiques, compilateurs et interpréteurs pour pouvoir programmer ces processeurs.

Un système embarqué se définit surtout par les contraintes auxquelles il est soumis.

Il doit :

  • Fonctionner en temps réel pour des raisons de fiabilité et de rentabilité : grâce à des interruptions matérielles, des deadlines, des systèmes multi-rate (Traitement à différences fréquences).
  • Utiliser des ressources généralements limitées : Encombrement réduit, taille mémoire limitée, consommation restreinte (alimentation sous batterie)
  • Dans un environnement sévère : Température, vibrations, intéférences radio fréquences, radiations, eau, feu, etc ...

Get Started with Embedded System

Le microcontrôleur de référence pour l'embarqué sur une architecture ARM, on retrouve ainsi comme référence le processeur basé sur STM32 de chez STM Electronic. Celui-ci est représentatif des architectures modernes et est présent dans de nombreux systèmes industriels existants. Cela inclut les téléphones, les routeurs et sans oublier les appareils IoT qui semblent exploser dans les ventes ces jours-ci. Cela dit, le processeur ARM est devenu l'un des cœurs de processeur les plus répandus au monde.

STM32

Un tel processeur est disponible pour un peu plus d’une dizaine d’euro sur une carte de développement. Cette carte dispose d’une connectique compatible avec les composants Arduino, ce qui vous permettra de poursuivre sa prise en main en investissant dans quelques composants supplémentaires. Pour l’utiliser, il suffit d’un simple câble USB et une chaîne de développement adaptée.

Généralités sur les systèmes embarqués

Je vais tenter de vulgariser tout les systèmes embarqués en allant du nanomètre jusqu'à notre echelle du cm, et expliquer le lien qu'il existe entre le matériel (hardware) et le logiciel (software).

Un Microprocesseur c'est quoi ?

Un microprocesseur est un composant électronique très complexe et compliqué à prendre en main lorsqu'on est pas concepteur de celui ci. C'est un composant qui regroupe des millions de composants miniaturisés appelés transistors sur un processeur Intel Core i3/i5 ou i7 on peut compter plus de 1 500 000 000 transistors ! : en réalité ça ressemble à ceci :

Microprocesseur Il existe des simulations sur internet qui nous permettre de comprendre le fonctionnement : http://www.visual6502.org/sim/varm/armgl.html Et à notre echelle ça ressemble plus à ceci : Microprocesseur

Sur les montages électroniques il possède plusieurs apparence appelée "Package" qui lui permet de s'adapter à tout type de PCB(Printed Circuit Board) et il est lui même relié à des composants exterieurs qui lui permet de communiquer avec le monde réel.

PCB

Ainsi le constructeur de carte nous donne soit un processeur seul et c'est à nous de l'introduire sur un PCB, ceci nous permet dans les fonctionalités du processeur de faire tout ce que l'on veux dans la mesure où le processeur est capable de le faire. Il existe aussi des cartes appelées cartes de développement comme la NUCLEO-F401RE que j'ai introduit plus haut pour faire le lien entre le processeur et le reste du circuit il existe un schematic qui permet au constructeur de relier les composants entres eux.

Exemple_schematic

Exemple simple de shematic pour NUCLEO-F401RE : https://dallasmakerspace.org/w/images/d/dc/NUCLEO-F401RE_Schematic.pdf

Ce shématic est fait par logiciel par le concepteur de puce pour une carte de développement ou par un tier et permet aussi de créer des PCB sur ordinateur afin de créer la(sa) carte électronique suivant les besoins.

Microcontroleur / Microprocesseur / et System on Chip (S.O.C)

Il est important de comprendre la différence qu'il existe entre un microcontroleur et un microprocesseur.

alt text

Microcontrôleur Microprocesseur
Généralement pas de système d'exploitation (ou minimal). Optimisé pour l'utilisation d'un système d'exploitation
Mise en œuvre électronique simple. Mise en œuvre électronique beaucoup plus complexe
Déterminisme et fiabilité de fonctionnement. Entrées-sorties réalisées par des contrôleurs externes au processeur

Quelques exemples de microcontrôleurs : • Atmel : AT91 (AT91SAM9xx, AT91SAM7xx), AVR (TinyAVR, MegaAVR…) • Freescale : 68HC05, 68HC08, 68HC11 • Hitachi / Renesas : H8 (H8/300, H8/500…), SuperH (SH-1, SH-2, SH-3...) • Intel : 8051, 8052, 8085 • Microchip : PIC (PIC-10F, PIC-12F, PIC-16F, PIC-24F) • STMicroelectronics : ST6, STM8, STM32 • Texas Instruments : MSP430, TMS320, TM4C

Quelques exemples de microprocesseurs : • Famille Arm : ARM7 (Arm 720T), ARM9 (Arm 926) ARM11 (Arm 1176jzf), Cortex-A (Cortex-A7, Cortex-A8, Cortex-A9, Cortex-A15), • Famille x86 : Intel (Atom, Core 2, Core i5, Core i7), AMD (Opteron, Phenom), Via (Nano) • Famille M68k : Motorola 680x0, Coldfire (MCF5xxx), Dragonball. • Famille PowerPC : Apple (G5), IBM (Power 6, Power 7, Power 8, Cell, Xenon)

Un System on Chip regroupe un microprocesseur et des périphériques sur le même boitier.

SoC
Contrôleurs d'entrées-sorties déjà incorporés
Intégration électronique encore assez complexe
Souvent peu d'entrées-sorties industrielles (CAN) ou analogiques (ADC/DAC, PWM)

alt text

Quelques systems-on-chip Arm : • Allwinner : A13, A20, A80 • Broadcom : BCM2835, BCM2836 • Freescale : i.MX21, i.MX23, i.MX6 • Marvell : 88SE6, 88SE9 • Rockchip : RK30, RK31 • Texas Instruments : OMAP, DaVinci

Cortex ARM Families

On distingue 3 familles de processeurs Cortex :

  • Les Cortex-M qui sont designé pour des microcontroleurs (M pour microcontroleur)
  • Les Cortex-R pour du traitement temps réel sur des cibles embarqués (R pour Real Time)
  • Les Cortex-A pour des applications hautes performance (A pour Application)

Les processeurs Cortex-A sont spécifiquement designés sur une architecture ARMv7-A ou ARMv8-A qui permettent d'avoir des performances rapides sur des devices sophistiqués, comme les smartphones et tablettes. Ils peuvent supporter des systèmes d'exploitations comme Linux, iOS ou Android.

Les processeurs Cortex-R dont spécifiquement désignés pour des systèmes temps réels qui exigent une haute fiabilité, une tolérance aux pannes, et réagit de façon déterministe pour du temps réel. Les exemples d'utilisation d'un tel processeur peut être de l'automatisation industrielle, le contrôle d'un moteur de voiture. Dans les systèmes temps réels, l'exactitude du calcul est déterminée non seulement par l'exactitude logique, mais aussi par le fait qu'il est systématiquement achevé dans certaines contraintes de temps.

Les processeurs Cortex-M offres un bon compromis entre la performance, le cout et la consommation énergétique. Ils permettent d'effectuer des applications multiples comme pour de la domotique, de la robotique, des protocol industrielles, des montres connectés et de nombreux IoT. Contrairements aux processeurs utilisés dans les PC ceux ci intègres un coeur processors, une mémoire, et de nombreux périphérique d'entrée sorties, timers, des ADC, des canaux de communication série, et des drivers LCD.

![Cortex-M Product line](Cortex-M Product line.png)

Dans la famille des cortex M on trouve par exemple le Cortex-M0 et le Cortex-M0+, le Cortex-M1, Cortex-M3, Cortex-M4 et le Cortex-M7. Les 3 premiers sont sur une architecture VON Neumann, et les 3 derniers sur une architecture Harvard. De plus les Cortex M0/M0+/M1 sont sur du ARMv6-M, et les Cortex-M3/M4/M7 sur du ARMv7-M. (ARMv6-M et ARMv7-M correspondent aux instruction set architecture)

Les processeurs Cortex-M sont rétrocompatible. C'est à dire qu'il programme compilé pour Cortex-M4 peut fonctionner sur Cortex-M3 sans aucune modification.

Le Floating Point Unit (FPU) est un coprocesseur pour les opérations flotantes, c'est un processeur optionnel sur les Cortex M4-M7. Ces derniers possèdes aussi un single-intruction multiple data (SIMD) et un multiply and accumulate (MAC) pour faire du digital signal processing application (DSP).

Pour identifier rapidement de quel type de processeur il s'agit sur les produits STM32 il suffit de comprendre les Conventions de Nomage des STM32

Organisation interne d'un processeur

Intéréssons nous de plus prêt au diagramme bloc d'un processeur : L'implémentation des périphériques se fait par le vendeur du processeur. Les bus de données et les ponts de communications pour les communications entre le coeur et les périphériques sont prédéfinis.

Des exemples de périphériques que l'on peut trouver dans un processeur Cortex-M sont les LCD controllers, encore les communications séries (I2C,SPI et USART), USB , DAC, ADC. Prenons par exemple de cas du STM32F401RE : (Cortex-M4)

STM32F401RE_Block_Diagram

Le diagramme block ci dessus montre comment le coeur et les périphériques sont intégrés dans la puce.

  • Le coeur du processeur communique avec la mémoire flash (typiquement pour cela utilise une instruction mémoire), avec la SRAM (avec une instruction data), le DMA ou encore avec les GPIOs et le PHY via l'AHB bus matrix (aussi appelé crossbar switch).
  • La matrice de bus est un schéma d'interconnexion, qui permet des flux de données simultanés entre les composants connectés à la matrice de bus, fournissant ainsi une bande passante de communication élevée. La matrice de bus connecte des composants à haute vitesse, tels que le cœur du processeur, Flash, SRAM, contrôleurs DMA et PHY, ou encore les GPIOs.
  • Les périphériques sont connectés à la matrice de bus via des ponts qui permettent de lier : l'advanced high-performance bus (AHB) et le advanced peripheral bus (APB). Généralement l'AHB est utilisé là ou se trouve de grosses bandes passantes, et l'APB pour des bandes passantes plus petites. l'AHB et l'APB sont connecté via des ponts, qui met en mémoire tampon les données et les signaux de contrôle pour combler l'écart de bande passante entre les deux bus et s'assurer qu'il n'y a pas de perte de données.
  • Chaques broches GPIO possèdes de multiples fonctions. Le software pevent les modifier. Nous pouvons utiliser les GPIOs comme une entrée numérique, ou une sortie. On peut aussi faire de l'ADC, des communications séries, des fonctionalités liés aux timers etc ... Les alternates fonctions dépend de la carte.
  • La plupart des périphériques comme les timers, ADC et I2C sont connecté à l'APB.

Mais qu'est-ce qu'un bus ? Un bus est un ensemble de fils physiques permettant de transférer des données ou des signaux de commande entre deux ou plusieurs composants matériels. Un protocole ou une entente de communication doit être en place pour coordonner l'utilisation d'un autobus. La bande passante d'un bus dépend de la largeur du bus (généralement spécifiée en bits) et de la vitesse d'horloge prise en charge. Un processeur dispose de plusieurs bus pour communiquer les composants matériels internes et externes. Un pont de bus relie deux bus différents ensemble.

D'autres composant fondamentals des processeurs sont aussi l'unité : arithmetic logic unit (ALU), le processos control unit, l' interrupt controller (NVIC), the instruction fetching and decoding unit, ainsi que les interfaces pour la mémoire et le debug.

  • l'ALU permet de faire des calculs sur un signal (comme l'instruction logic AND), sur des opérations arithmétique (comme l'instruction ADD). L'ALU prend 2 données en entrées (appelés opérandes) et donne une seule sortie. ALU

  • Le processor control unit génère lui des signals de controle pour les circuits numériques interne (comme une suite de signaux des multiplexeurs, le signal de control de l'ALU) et coordonne chaques composants du coeur du processeur.

  • L'interrupt controller (NVIC) permet au processeur de stopper une execution de la tache courante et de répondre à un autre événement généré par le hardware ou par le software.

  • L'intruction fetching and decoding unit lits les instructions machines et les décodes pour que le processeur puisse les traiters. Le processor control unit génère un signal en fonction de l'opération à effectuer.

  • L'interface mémoire elle permet l'accès aux périphériques mémoires (comme la SRAM ou la Flash)

  • L'interface de debug permet au développeur d'utiliser son ordinateur pour arrêter ou démarrer un programme sur le processeur. Cela lui permet de faire du monitoring et de modifier les registres du processeur, des registres des périphériques et de voir la mémoire en temps réel.

  • Les Cortex M4 supportent les DSP et peuvent aussi avoir un FPU. Les Cortex M plus ancien de supportent pas ces fonctionalités.

Les différents types de systèmes software

On distingue plusieurs méthodes de fonctionnement dans un microcontroleur :

  • Bare-metal programming
    • Pas de sur couche OS
    • Ne nécéssite pas beaucoup de puissance électrique
    • Permet l'accès direct au hardware
    • Permet le développement d'une application simple
    • Timing Strict

  • Real-ime Operating System (RTOS)
    • OS Rajouté : Ordonnancement
    • Plus de puissance électrique nécéssaire
    • Permet l'accès direct au hardware
    • MultiThreading
    • MultipleTask : Networking, Interface utilisateur etc ...

  • Embedded General Purpose Operating System (GPOS) (Linux, Mac, Windows, Android ...)
    • Surcouche importante : OS, MMU
    • Un microprocesseur est requis et parfois plus de mémoire (mémoire externe flash et ram additionnelles).
    • Ne permet pas l'accès aux drivers hardware direct (Abstract layer)
    • MultiThrading, MultiProcessing
    • Multiple complex task : networking, filesystem, graphical interface etc ...

Un programme en embarqué c'est quoi ?

Un programme est une suite d'instruction lancé au démarrage du processeur. Celui ci ne doit jamais se terminer. Ainsi ce dernier doit se trouver dans une boucle infini pour ne jamais s'arrêter. Cependant l'application de l'embarqué nous contraint d'optimiser la consommation de courant, la taille du programme et le temps d'exécution. Ainsi un programme functionnant sous interruption est préféré à un programme qui marche sous scrutation (polling).

⚠️ **GitHub.com Fallback** ⚠️