MODULES DE BASE - HELLO WORD - DOMAINE DU COURS MODULE IOC - MU4IN109 - 2021 FRANCK WAJSBÜRT - FRANÇOIS PÉCHEUX - SOC

 
CONTINUER À LIRE
MODULES DE BASE - HELLO WORD - DOMAINE DU COURS MODULE IOC - MU4IN109 - 2021 FRANCK WAJSBÜRT - FRANÇOIS PÉCHEUX - SOC
Modules de base — hello word
    Module IOC — MU4IN109 — 2021
    Franck Wajsbürt - François Pécheux

                                         1

          Domaine du cours

                                         2
MODULES DE BASE - HELLO WORD - DOMAINE DU COURS MODULE IOC - MU4IN109 - 2021 FRANCK WAJSBÜRT - FRANÇOIS PÉCHEUX - SOC
Plateforme cible
                          Hello world
                          12:54             arduino
                                             NRF24

                 GPIO             WIFI                lumière
  WEB                                        ESP32    son
                  WEB     SPI                         mouvement
Browser                          NRF24        WIFI
                 Server                               présence
ethernet           ethernet       BLE                 température

                                             ESP32    led
                                              BLE     biper
Routeur    web     Routeur

                 Cours abordés
                  ● Systèmes embarqués
                  ● protocole filaire
                  ● protocole radio
                  ● Pilotes Linux
                  ● server web
                  ● Base de données
                  ● Publish & Subscribe
                                                                    3

                                   Plan

     ● Informations sur les unités de calculs utilisées
     ● Périphériques passifs avec un peu d'électroniques
     ● Conversion Analogique ↔ Numérique
     ● Raspberry PI Accès aux GPIO

                                                                    4
MODULES DE BASE - HELLO WORD - DOMAINE DU COURS MODULE IOC - MU4IN109 - 2021 FRANCK WAJSBÜRT - FRANÇOIS PÉCHEUX - SOC
Unités de calculs

                                                                           5

                      Nanocomputers

● Le modèle des réseaux de capteurs est constitués de nanocomputers
  interconnectés en filaire ou par radio.
● Un nanocomputer est un ordinateur complet construit autour d'un SoC
  (System-On-Chip) de la taille d'une carte de crédit ou ticket de métro
   ○ processeur(s)
   ○ ram + rom (flash)
   ○ nombreux contrôleurs d'entrées-sorties
   ○ périphériques d'entrées-sorties basiques (BP, LED, écran, HP)
   ○ connecteurs
   ○ chargeur de batterie
   ○ etc….
● Exemples utilisés en TP
   ○ Raspberry PI 1 et 3,
   ○ TTGO LoRa 32
   ○ Arduino nano,
                                                                           6
MODULES DE BASE - HELLO WORD - DOMAINE DU COURS MODULE IOC - MU4IN109 - 2021 FRANCK WAJSBÜRT - FRANÇOIS PÉCHEUX - SOC
Que contient un SoC ?

    Un SoC ou System-On-Chip rassemble au moins 1 cœur de calcul
          des contrôleurs de périphériques et de la mémoire.
         (un MCU pour Micro Controler Unit est un petit SoC)

                cœur
                            ROM                         copro    debug
                 de                          RAM
                           (flash)                      Crypto    prog
                calcul

                            I2C
               watchdog
                            SPI              conv.
                 réveil                                 PWM      GPIO
                horloge
                           UART,            analog.
                            WIFI

Peu de composants autour sont nécessaires pour réaliser un nanocomputer

                                                                                      7

les SoC contiennent beaucoup de choses !
Les documentations font des centaines de pages mais la plupart des
fonctionnalités sont abstraites par des drivers ou des API spécifiques.
Nous allons utiliser le C / C++ avec Linux et Arduino

Atmega328p                           BCM2835                             XTENSA LX6
   (Arduino)                         (Raspberry-Pi 1)                       (ESP32)
                                                                                      8
MODULES DE BASE - HELLO WORD - DOMAINE DU COURS MODULE IOC - MU4IN109 - 2021 FRANCK WAJSBÜRT - FRANÇOIS PÉCHEUX - SOC
Raspberry Pi
●   Université de Cambridge
●   Basé sur des SoC Broadcom / ARM
●   Supporte OS généralistes : Linux, Windows IOT, Android, RiscOS
●   Raspberry Pi 1 est sortie en février 2012, la Rpi4 en 2019
●   Modèles utilisés en TP :
● Raspberry Pi 1B (2012)                  ● Raspberry Pi 3 (2016)
       ■       BCM2835 (1 core) + GPU             ■     BCM2837 (4 cores) + GPU
       ■       ARM V6 32 bits                     ■     ARM V8 64 bits
       ■       700 MHz                            ■     1200 MHz
       ■       256 MB                             ■     1024 MB
       ■       SDcard                             ■     SDcard
       ■       2 USB                              ■     4 USB
       ■       ethernet 10/100 MHz                ■     ethernet 10/100 MHz,
       ■       HDMI FullHD + son                  ■     HDMI FullHD + son
       ■       8 GPIO                             ■     17 GPIO
       ■       I2C, 2 SPI, UART, PWM              ■     I2C, 2 SPI, UART, PWM
       ■       200mA (alim 1 A)                   ■     800mA (alim 2.5 A)
                                                  ■     WIFI 802.11ac, Bluetooth 4.1
                                                                                       9

                                 Arduino
● Interaction Design Institute Ivrea (Italie)
● Intègre initialement des SoC (System On Chip) Atmel 8 bits
  mais aussi des 32 bits : ARM Cortex-M0/M3 et Intel Quark x86
● Basé sur le projet Wiring 2003 (Hernando Barragán)
● Exécutif spécifique (Inspiré de Processing MIT 2001 pour Graphiste)
● Projet Open Source pour le code et le matériel ⇒ beaucoup de clones
● Arduino Uno (2005)
           ■    Atmega328p
           ■    5V
           ■    core 8 bits
           ■    16 MHz
           ■    Flash 32 kB + EEPROM 1 kB + SRam 2 kB
           ■    14 GPIO dont 6 PWM
           ■    I2C, SPI, UART,
           ■    8 Entrées Analogiques 10 bits
           ■    20 mA + 40 mA par I/O
           ■    LED + 1 bouton reset

                                                                                       10
MODULES DE BASE - HELLO WORD - DOMAINE DU COURS MODULE IOC - MU4IN109 - 2021 FRANCK WAJSBÜRT - FRANÇOIS PÉCHEUX - SOC
ESP32
●   Espressif Systems (Shanghai)
●   nanocomputers pour réseaux de capteur radio
●   Intègre des SoC Xtensa dual-core (or single-core) 32-bit LX6 (2016)
●   Version précédente : ESP8266 (2014)
●   Plusieurs Exécutifs spécifiques SDK en C++, LUA, Python, C, Go
●   Supporte Arduino et aussi Free RTOS
● Module TTGO-Lora32-Oled (Wemos)
        ■   XTENSA LX6
        ■   3.3V
        ■   dual-core 32 bits
        ■   240 MHz
        ■   Flash 32 MB
        ■   SRam 512 kB
        ■   28 GPIO (multi-fonctions)
        ■   I2C, SPI, UART, 18 Entrées Analogiques (12 bits)
        ■   50 mA
        ■   LED + 1 bouton reset
        ■   WIFI 802.11 bgn, Bluetooth 4.2,
        ■   LoRa 868 MHz (SX1276)                                         11

                      Périphériques

                                                                          12
MODULES DE BASE - HELLO WORD - DOMAINE DU COURS MODULE IOC - MU4IN109 - 2021 FRANCK WAJSBÜRT - FRANÇOIS PÉCHEUX - SOC
Que connecte-on à un nanocomputer ?
    Les périphériques qui vont permettre de se connecter à l'environnement.

Entrées capteurs                                            Sorties actionneurs
                                       debug
                                                  GPIO

      lumière, micro, hygromètre,                                 moteurs CC ou PàP,
                                        prog

      mouvement, détecteur de          copro
                                                  PWM
                                                                  relais, HP, leds, ….
      gaz, proximité, torsion,
                                       Crypto

      pression, thermomètre,                      conv.

      accéléromètre, GPS, ...
                                        RAM
                                                 analog.

IHM
                                                   I2C
                                        ROM        SPI
                                       (flash)    UART
                                                  WIFI
                                                            IHM
      clavier, télécommande,
      surface tactile, voix, ...       cœur de
                                        calcul
                                                 watchdog
                                                   réveil
                                                  horloge
                                                                  écran LCD, buzzer, voix, ...

●    Il existe une très grande variété de capteurs et d'actionneurs mais le nombre
     d'interface est plus réduit en passant par des protocoles de communication
     standard : rs232, CAN, I2C, SPI, USB, WIFI, BLE, LoRa
●    Les capteurs et actionneurs contiennent souvent des µC pour simplifier
     le travail de l'application ou réduire la quantité d'informations à échanger.
                                                                                                 13

                    2 types de périphériques

● Périphériques passifs
           Lecture / écriture directe d'une grandeur électrique numérique [0,
           1] ou analogique (OV à 3.3V)

● Périphériques actifs
           Un contrôleur de périphérique offrant une abstraction sous forme
           de registres de contrôle accessibles par un protocole de
           communication avec ou sans fils.
           En général, ces périphériques intègrent ... un micro-contrôleur...

                                                                                                 14
MODULES DE BASE - HELLO WORD - DOMAINE DU COURS MODULE IOC - MU4IN109 - 2021 FRANCK WAJSBÜRT - FRANÇOIS PÉCHEUX - SOC
Périphériques passifs basiques
                                                               résistances

     ● bouton poussoir
     ● potentiomètre
     ● thermistance, photorésistance
     ● LED
     ● interrupteur commandé (relais)
     ● moteur(s)

                                                                               15

                   Résistance et capacité

                                                                   V

Résistance                   R1                                        R1
                                                                        R2
                                                           R1*R2
loi d'Ohm                             R1+R2 R1       R2
                                                           R1+R2       R1+R2
  U=RI                       R2                                        R2

Capacité                           charge d'une capacité
                                                 U
   Q = CU
   I = C dU/dt
                                            U

   composition
     - parallèle    C = Σ Ci
     - série        C = Σ 1 / Ci
                                                                               16
MODULES DE BASE - HELLO WORD - DOMAINE DU COURS MODULE IOC - MU4IN109 - 2021 FRANCK WAJSBÜRT - FRANÇOIS PÉCHEUX - SOC
Entrées-Sorties basiques
                                                                                                           VR

                                                                                                           VL
      ● Allumer une LED
                 ○    Il faut que D13 soit programmé en sortie (5V)
                 ○    loi d'Ohm : U = RI (ou R = U/I)
                 ○    La tension aux bornes d'une LED allumée est ~ 1.8V
                     mA     led
                                  point de fonctionnement        si VL = 1.8V ⇒ I = 20mA
                 20                                              ⇒ VR = 5-1.8 = 3.2V
I = (5-VL) / R                     R 160 Ohms                    ⇒ R = 3.2/20 = 160
I = led(VL)                                    VL
                                       5

      ● lire un bouton poussoir
                 ○    Lorsque l'interrupteur est ouvert D2 est à 5V
                 ○    Lorsqu'il se ferme la capacité se décharge
                      à 66% en RC secondes (résitance*capacité=temps)
                 ○    en R1*C1 = 104 * 10-7 = 10-3 = 1 ms (66%)
                                                                                                                     C1
                                                                                                                    100nF

       http://eskimon.fr/ est une aide précieuse                                                                17

                                  Traitement des rebonds
 Il suffit d'échantillonner à une période supérieure aux rebonds, mais
 inférieure à la durée d'appui
 soit
  ● B : une variable
  ● E : la valeur du bouton poussoir
  ● appui : un drapeau à 1 si appui
  ● relache : un drapeau à 1 si relachement

 faire périodiquement                          V

     B = (B
MODULES DE BASE - HELLO WORD - DOMAINE DU COURS MODULE IOC - MU4IN109 - 2021 FRANCK WAJSBÜRT - FRANÇOIS PÉCHEUX - SOC
Conversion Analogique

                                   19

   Place de l'analogique

        ANALOG
                    ADC
       MULTIPLEX

                    PWM      MEM

                   NUMERIC
                             CPU
                     IN

                   NUMERIC
                     OUT

                                   20
Convertisseur Analogique Numérique 1/2
          Signal analogique 1 fil        CAN           Signal numérique N bits

                                                    La conversion impose une
                                                    quantification qui va dépendre
                                                    du nombre de bits du signal
                                                    numérique 8, 10, ou 12 bits

                         Recherche par dichotomie

                            out = 1 si Vin > Vr
                                 0 si Vin
Conversion Numérique Analogique PWM

Sans Convertisseur Numérique Analogique,
on peut produire un signal modulé
en largeur d'impulsion : PWM

La valeur moyenne du signal
est proportionnel à la largeur
d'impulsion

C'est ce propose l'Arduino.

                                           http://www.mon-club-elec.fr/pmwiki_reference_arduino/
                                           pmwiki.php?n=Main.AnalogWrite                           23

          Présentation RaspberryPi

                                                                                                   24
Raspberry Pi 1B

26 pins
                                                  BMC2835

                                                            25

              GPIO de la Raspberry Pi

  Le BCM2835 à 54 GPIO mais seulement 17 sont accessibles
  La carte Raspberry Pi3 en propose 26                      26
GPIO schéma électrique

                               27

Périphériques de base : GPIO

                   150

                               28
GPIO Memory Mapping

                                                                    29

Mapping des GPIO dans l'espace utilisateur

                                            adresses physiques
  Espace d'adresses physiques                   des GPIO

                                 Traduction d'adresses par la MMU
  Espace d'adresses virtuelles

   adresses virtuelles des
  GPIO pour l'application

        Le mapping est réalisé par un appel au système
                                                                    30
GPIO Registres de configuration

                            41 registres permettent de
                            définir les fonctions et les
                            comportement des GPIO

                                                           31
                                         90

  Configuration des broches GPIO

FSELn (3 bits) : 000 pour input    001 pour output
                                                           32
GPIO functions

                                 Chaque broche peut être liée
                                 à des fonctions alternatives
                                 ● attention toutes ne sont pas
                                   accessibles sur la RaspberryPi
                                 ● code couleur facilite la lecture
                                     ○   Orange / Fuschia   I2C
                                     ○   Bleu moyen         PWM
                                     ○   Rouge              RS232
                                     ○   Marron             SPI
                                     ○   ...

                                                                      33

     Ecrire une valeur sur une broche

       Deux bits par broche : SET & CLEAR
       4 registres 32 bits puisqu'il y a 54 GPIOs

adresse BUS

                                                                      34
Lire la valeur d'une broche

      1 seul bit par broche qui recopie sa valeur

                                                                  35

        Exemple avec les GPIO                   1/4

● L'objectif est d'accéder aux GPIO en utilisant le mapping des
  registres de contrôle dans l'espace virtuel de l'application.

● On doit pouvoir
  ○ permettre l'accès aux registres par mmap
  ○ lire et écrire dans les registres

                                                                  36
Exemple avec les GPIO                  2/4

 ● accès aux registres
    void * gpio_base;             if ( gpio_base == MAP_FAILED ) {
                                      close ( mmap_fd );
    mmap_fd = open( "/dev/mem",       return -1;
           O_RDWR | O_SYNC );     }

    if ( mmap_fd < 0 ) {
        return -1;
    }

    gpio_base = mmap (
        NULL,
        RPI_BLOCK_SIZE,
        PROT_READ | PROT_WRITE,
        MAP_SHARED, // pas de copy-on-write
        mmap_fd,
        BCM2835_GPIO_BASE );
                                                                 37

        Exemple avec les GPIO                  3/4

● Ecriture dans les registres de configurations des GPIO

*( gpio_base + 0x0 ) =
   ( *( gpio_base + 0x0 ) & ~( 0x7
Exemple avec les GPIO                      4/4

● Pour lire l'état d'une broche

   uint32_t reg_value =
          ( *( gpio_base + ( 0x34 / 4 ) ) >> 2 ) & 0x1;

             adresse du registre à partir de la base

                                                           39

                           En TME

  ● Compilation et cross-compilation sur Raspberry Pi 1B
      ○ Hello World
      ○ Commande de LED et lecture d'un Bouton Poussoir
        depuis une application utilisateur
      ○ Commande d'un afficheur LCD en mode utilisateur

                                                           40
Vous pouvez aussi lire