SAM2 Repro
SAM2 Repro
Charpak Provence
ISMIN
Système A Microcontrôleur 2
Version : VP2024 – V2
3
Pr. Acacio MARQUES - ISMIN 2023 3 Principe
3
OBJECTIFS
INTRODUCTION : objectifs – biblio - cible
Se familiariser avec
Architecture ARM 32 bits et STM32
Le C embarqué
Le Debug
Métriques
4
Pr. Acacio MARQUES - ISMIN 2023 4 La doc
Le cours sera orienté programmation en langage C notamment écriture des drivers des différents périphériques.
Le test se fera en salle informatique sur PC fixes équipés des outils et de la documentation nécessaires. Le
logiciel réalisé durant le test devra être débuggé via la carte cible Platform STM32. Le test sera constitué de mini
TP à réaliser de difficultés croissantes. Je ne peux que vous encourager à travailler sérieusement les TP durant
les cours pour être prêt pour le test. Le rattrapage sera de même nature et de même difficulté que le test avec
une note maximum écrêtée à 10.
4
BIBLIO
INTRODUCTION : objectifs – biblio - cible
Cours SAM1
The definitive Guide to ISMIN 1A
Architecture ARM
The definitive Guide to the ARM Cortex de Joseph Yiu
Users’manual
Microcontrôleur STM32L476RG Data Sheet
LIVRE
5
Pr. Acacio MARQUES - ISMIN 2023 5 Le kit
Le site ST est incontournable pour les datasheets du microcontrôleur ainsi que les outils de développement, il
faut pour cela créer un compte sur le site.
Pour information vous trouverez « The definitive guide to the ARM Cortex » gratuitement sur internet en anglais
ou à la bibliothèque.
Le cours SAM1 est un prérequis indispensable, on ne reviendra pas sur les périphériques et leur programmation
vus en première année.
5
MA CIBLE
INTRODUCTION : objectifs – biblio - cible
3.3V
DAC_OUT_ADC_IN
PWM_LED
LDR_ADC1_13
POT
PB1 PC4 PA6 PA4 PB12 PB13 PB14 PC6 PC7
BUZZER
GPIO
ENCB COMP2 LED3
PA1 PA10
LED2
PA7
PWM
PA5 INTOF1
USER RESET LD2 PC11
TIM2 PH0
SHUT1
DIR
PA9
INTOF2
DIS PC10
PB5
PH1
SHUT2
CSN
PB9 SPI2 SDMMC CAN1 LPUART1 I2C1
PB8 PC2 PC3 PB10 PC8 PD2 PC8 PC12 PA12 PA11 PC1 PC0 PB7 PB6
CO²
6
Pr. Acacio MARQUES - ISMIN 2023 6 C’est parti
6
SOMMAIRE
INTRODUCTION : objectifs – biblio - cible
7
Pr. Acacio MARQUES - ISMIN 2023 7 Principe
7
BENCHMARK
POWER CONTROL : supply - low power – application
8
Pr. Acacio MARQUES - ISMIN 2023 8 Surveillance alimentation
Comme il existe des benchmarks pour comparer les performances (CoreMark, Drystone) , il en existe aussi
pour comparer l’efficacité énergétique comme le EEMBC ULPBench.
Parmi la famille des microcontrôleurs Low-power le STM32L4 à la meilleure efficacité énergétique comme
l’illustre les benchmarks.
Une grande performance avec un cout énergétique faible grâce aux nombreux modes basse consommation.
8
SUPERVISEURS
POWER CONTROL : supply - low power - application
PROBLEME PVM
normal
non fiable
stop
BOR PVD
20 mv
1,6 v .. 2,86 v
2 v .. 2,96 v
EXTI_16
9
Pr. Acacio MARQUES - ISMIN 2023 9 Alimentation
Entre V2 et V3 (voir datasheet) le fonctionnement du microcontrôleur n’est plus garanti. Le périphérique Brown
Out Reset évite ce piège. Le seuil VBOR doit être fixé juste au-dessus de V2 pour remplacer le fonctionnement
erratique du micro par un reset. Attention le design du reset doit avoir été pensé comme un état sûr pour le
système. 5 valeurs de seuil VBORx sont possibles de 1,7 v à 2,95 v. Remarque : la temporisation n’existe que
pour le seuil VBOR0. La fonction BOR est active pour tous les power modes sauf en shutdown mode et ne peut
pas être désactivée.
En cas de défaillance de l’alimentation un reset intempestif peut faire perdre des données importantes, c’est
pourquoi couplé au module BOR on peut activer le périphérique PVD (Programmable Voltage Detector). C’est
également un comparateur mais avec un seuil légèrement au-dessus de VBORx (7 valeurs programmables de 2
v à 2,9 v), il se déclenche donc avant et génère une interruption (EXTI_16) plutôt qu’un reset ce qui permet des
sauvegardes avant le reset.
Les alimentations indépendantes (VDDA, VDDIO2, VDDusb) sont de leur côté surveillées par le périphérique
PVM (Peripheral Voltage Monitoring).
9
DOMAINE
POWER CONTROL : supply - low power - application
1,62 v .. 3,6 v
3,00 v .. 3,6 v
1,08 v .. 3,6 v
1,70 v .. 3,6 v
1,55 v .. 3,6 v
10
Pr. Acacio MARQUES - ISMIN 2023 10 Zoom
Les alimentations VDDA, VLCD, VDDUSB, VDDIO2, VBAT sont indépendantes de l’alimentation principal VDD
mais doivent être reliée de préférence à VDD lorsque les périphériques ne sont pas utilisés.
Pour l’alimentation principale on peut utiliser un régulateur 1.8 v ± 5 %, le fonctionnement du microcontrôleur est
garanti jusqu’à 1,6 v. Le seuil du BOR doit donc être fixé à 1.7 v.
10
2 REGULATEURS
POWER CONTROL : supply – low power - application
Range1/2
Run
Sleep
Stop0
VDD Main
Regulator Core Logic
RTC
VBAT Backup
Domain
11
Pr. Acacio MARQUES - ISMIN 2023 11 Application typique
2 régulateurs linéaire alimentent la plupart des périphériques : le Main regulator (MR) et le Low_Power regulator
(LPR)
Le MR est utilisé dans le run, sleep et stop0 mode.
Le LPR est utilisé dans le Low-Power Run, le Low-power sleep et le stop1 ou 2 mode. Il est également utilisé
pour alimenter la SRAM2 en mode Standy avec SRAM2 retention.
Les 2 régulateurs sont désactivés en standby et shutdown modes, leurs sorties est en haute impédance, ils ne
consomment donc rien dans ces modes.
Le régulateur principal (MR) possède un high performance range 1 (1,2 v avec clock < 80 Mhz) et un low-power
range 2 (1,0 v avec clock < 26 Mhz ).
Pour minimiser la consommation on joue à la fois sur les tensions d’alimentation et les fréquences d’horloge.
11
PROFILE
POWER CONTROL : supply – low power - application
Application Process
• RUN range 1 : 100 DMIPS à 80 Mhz
• RUN range 2 : 32,5 DMIPS à 26 Mhz
• LPRUN : 2,5 DMIPS à 2 Mhz
Inactive
• Data RAM retention
• Capacités de wakeup
• Temps de wakeup
• Consommation la plus faible possible
• 8 modes pour y arriver
12
Pr. Acacio MARQUES - ISMIN 2023 12 Performance
Process phase : gestion de capteurs ou envoie radio traité de façon périodique (RTC) ou via des événements
externes.
3 modes de fonctionnement possible durant cette phase suivant le compromis efficacité
énergétique/performance recherché.
Inactive phase : Le système est en low-power et attend un réveil par le RTC ou un événement.
12
EFFICACITE
POWER CONTROL : supply – low power - application
Meilleure efficacité
Meilleure performance
13
Pr. Acacio MARQUES - ISMIN 2023 13 Synthèse
Ce microcontrôleur permet l’exécution du code en SRAM1 ou 2. On obtient les meilleures performances avec le
code en SRAM1 et les données en SRAM2. On aurait pu s’en douter, mais avec la mémoire cache associée à la
flash on se rapproche très prêt de ces performances. Cependant on obtient la meilleure efficacité énergétique
avec le code dans la flash sans la mémoire cache mais ce n’est vrai qu’à 80 Mhz. En fait comme vu
précédemment la meilleure efficacité énergétique est obtenue en range 2 à 26 Mhz avec Flash ART on (mémoire
cache).
13
VUE GENERALE
POWER CONTROL : supply – low power - application
14 µs STANDBY 115 nA / 415 nA* Core + all peripherals off + SRAM off
256 µs SHUTDOWN 30 nA / 330 nA* Core + all peripherals off + BOR off
Grande flexibilité avec 8 modes low power pour gérer la phase inactive et 3 modes pour la phase process.
Sleep ou LP Sleep : si la réactivité est primordiale (seulement 6 cycles de temps de réveil). Dans ce mode seul le
cœur CPU est arrêté, les autres périphériques fonctionnent normalement et peuvent donc réveiller le CPU lors d’un
événement. La différence entre le mode Sleep et LP Sleep c’est que ce dernier fonctionne avec le Low-Power run
mode. Le LP Sleep n’est accessible qu’à partir du LP Run (voir diagramme de transition).
Stopx : modes de veille permettant d'atteindre la consommation la plus basse lorsqu’on veut conserver le contenu de
la SRAM et des registres. Toutes les horloges dans le domaine VCORE sont arrêtées, le PLL, le MSI RC, le HSI16 RC
et les oscillateurs à cristal HSE sont désactivés. La LSE ou la LSI peuvent être maintenues en fonctionnement.
Stop0/1 : si un nombre important de périphériques doit rester activés, si le system à plusieurs sources de réveil
incluant l’USB. Stop1 mode est très similaire à Stop0 mode seule le régulateur change LPR et MR respectivement.
Stop1 mode consomme donc moins au prix d’un réveil plus long.
Stop2 : si quelques périphériques doivent rester activés et générer des réveils (event ou interruptions) comme
LPUART, LPTIM1ou I²C.
Standby : ce mode veille est utilisé pour atteindre la consommation d'énergie la plus basse avec le périphérique BOR
actif. Les 2 régulateurs internes sont désactivés de sorte que le domaine VCORE est éteint. Seule l'horloge RTC peut
rester active (standby mode avec ou sans RTC). Le système peut être réveillé en utilisant une broche SYS_WKUP, un
événement RTC, le WDG indépendant (IWDG) ou un reset. Après le réveil, l'exécution du programme redémarre
comme suite à un reset. A utiliser si aucun périphériques autres que le RTC à besoin de rester actif. Possibilité de
garder la SRAM2 sauvegardée si nécessaire via le LP régulateur.
Shutdown : permet d'atteindre la consommation d'énergie la plus basse, pas de périphérique BOR et Watchdog, pas
de vbatt, programme moins sécuritaire. Le système peut être réveillé du mode d'arrêt en utilisant une broche
SYS_WKUP, un événement RTC, ou un reset. Après le réveil, l'exécution du programme redémarre comme suite à un
reset.
Vbat : permet de conserver le fonctionnement du RTC et des backup registers en cas de panne de l’alimentation VDD.
Bien sûr il faut brancher une batterie sur la broche Vbatt, une commutation automatique s’opère en cas de défaillance
du Vdd.
14
TRANSITIONS
POWER CONTROL : supply – low power - application
Reset LPSleep
Stop0 Stop2
15
Pr. Acacio MARQUES - ISMIN 2023 15 Bilan
15
SYNTHESE
POWER CONTROL : supply – low power - application
sources de réveil
RNG se réfère à un générateur de nombres aléatoires (Random Number Generator). Dans les
STM32, ce module matériel est capable de produire des nombres aléatoires vrais (True Random
Numbers), ce qui est utile pour des applications de cryptographie, des systèmes de sécurité, des jeux, et
d'autres applications nécessitant une certaine forme d'aléatoire.
16
BATCH ACQUISITION MODE
POWER CONTROL : supply – low power - application
17
Pr. Acacio MARQUES - ISMIN 2023 17 Outil
L’utilisation typique est l’optimisation du transfert par lot de data. Plutôt que de collecter les informations
capteurs par capteurs, on peut les regrouper et placer le MCU en Batch Acquisition Mode.
Ce mode laisse uniquement actif les périphériques nécessaires à la collecte de donnée (SRAM, DMA,
périphérique de communication, I²C par exemple).
Ainsi le MCU reste plus longtemps en low power et on gagne en consommation.
17
CONCLUSION
INTRODUCTION : organisation – concept de base
18
Pr. Acacio MARQUES - ISMIN 2023 18 Quiz
La série STM32L4 offre un large choix d'options pour optimiser à la fois les performances et la consommation d'énergie,
quelle que soit l'application.
Dans le cas du benchmark ULPBench , avec une période de réveil de 1 seconde et une charge de traitement d'environ 10
Kcycles par période, le choix optimal est d'utiliser le mode basse consommation Standby pour la phase INACTIVE
associée au mode Run Range 2 à 26 MHz (à partir du MSI) pour la phase PROCESS.
En affinant suivant la période de réveil:
•Si le temps de réveil est supérieur à quelques dizaines de millisecondes, une implémentation utilisant le mode
Standby offre une meilleure consommation.
•Si la période de réveil est plus courte, une implémentation avec Stop 2 donnera de meilleurs résultats.
•Si la température est élevée, le mode Standby doit être privilégié.
Le choix des modes basse consommation dépend non seulement de la consommation d'énergie, mais également de
l'exigence de temps de réveil (réactivité du système) et de l'exigence de rétention des données. Pour la série STM32L4, si
le traitement peut accepter une fréquence inférieure à 26 MHz, les points optimaux sont (dans l'ordre décroissant
d'efficacité énergétique) :
•Mode Standby : si le temps de transition de réveil peut être supérieur à 20 μs et la zone de rétention peut être
aussi petite que 32 Koctets.
•Stop 2 : si le temps de transition de réveil peut être supérieur à 8 μs et si l'application nécessite plus de 32 Koctets
de rétention.
En fin de compte, si la période de réveil est plus longue que quelques secondes et que la mémoire de rétention n'est pas
nécessaire, le mode Shutdown offre les meilleures performances énergétiques. Dans ce cas, le temps de réveil est
généralement de 256 μs.
Pour aider le client à ajuster finement son application et à faire son propre choix, STMicroelectronics fournit un module
calculateur de consommation électrique (PCC) dans le STM32CubeMX.
18
QUIZZ
POWER CONTROL : supply – low power - application
4. Quel mode low power est le plus adapté pour une application nécessitant une
réactivité rapide à des événements externes ?
5. Dans quel mode faut-il mettre les GPIO non utilisés pour limiter les fuites de courant ?
6. Quel mode low power est le plus efficace énergétiquement en phase process ?
7. Quel mode low power est adapté à une application interrupt driven ?
19
Pr. Acacio MARQUES - ISMIN 2023 19 Quizz
19
TP0
POWER CONTROL : supply – low power - application
*-----------------------------------------------------------------------------------------------------------------
* FONCTION : Phase process en mode Run 2, MSI 24 Mhz : allumer LED2 pendant 1 s.
* Phase inactive : en mode standby pendant 10 s.
* Utilisation du wakeup timer du RTC pour le réveil.
*----------------------------------------------------------------------------------------------------------------
Run 1, 80 Mhz
*-----------------------------------------------------
* Courant phase moy :
*-----------------------------------------------------
20adopte un chien
Pr. Acacio MARQUES - ISMIN 2023 20
Pour vérifier le gain en autonomie, la première mesure peut être faite en condition haute performance sans
phase inactive : remplacée par un HAL_Delay (10000).
Ensuite on met en place la phase inactive en mode standby et enfin on améliore la phase process en passant au
range 2 (attention utiliser l’horloge low power MSI).
La fonction HAL_PWR_EnterSTANDBYMode() permet d’entrer en mode low power standby. Attention dans ce
mode le réveil entraine l'exécution du programme comme pour donner suite à un reset, il faut donc tout
réinitialiser.
20
TP1
POWER CONTROL : supply – low power - application
*-----------------------------------------------------------------------------------------------------------------
* FONCTION : Incrémenter un compteur à chaque réveil et affichez le sur le terminal
* série
*
*----------------------------------------------------------------------------------------------------------------
21adopte un chien
Pr. Acacio MARQUES - ISMIN 2023 21
21
SOMMAIRE
INTRODUCTION : objectifs – biblio - cible
22
Pr. Acacio MARQUES - ISMIN 2023 22 Principe
22
WATCHDOG
WATCHDOG : principe – STM32 – application
BUT
Surveiller le bon déroulement du programme. - logicielle
Les causes des perturbations peuvent être d ’origine : - électrique
- mécanique
Principe
µP décompteur
Watchdog
Horloge ERROR
UNDERFLOW
RELOAD
Programme
Watchdog
Programme
Temps
< Programme
Timeout Programme
Programme
RESET
Watchdog
Programme
Programme
Programme
Programme
Watchdog
t
23
Pr. Acacio MARQUES - ISMIN 2023 23 Domaine d’étude
Le logiciel embarqué est sujet aux bugs et aux problèmes techniques. Les watchdogs agissent comme un filet de
sécurité, permettant au système de récupérer des défaillances logicielles, assurant un fonctionnement
ininterrompu et réduisant le risque de crash système.
Le choix du timeout est critique. Il doit être suffisamment long pour éviter les réinitialisations inutiles dues à des
problèmes transitoires, mais assez courte pour empêcher le système de rester bloqué indéfiniment en cas de
panne grave.
Avec des milliards d'appareils IoT déployés sur le terrain, il serait impossible pour un technicien de les entretenir
en temps voulu en cas de problème. Par conséquent, les systèmes IoT doivent être capables de détecter et de
récupérer eux-mêmes des défaillances sans intervention humaine.
23
SCENARIO
WATCHDOG : principe – STM32 – application
24
Pr. Acacio MARQUES - ISMIN 2023 24 Watchdog indépendant
24
IWDG
WATCHDOG : principe – STM32 – application
4 .. 256
Window value
Ce watchdog est dit indépendant car l’horloge est indépendante de l’horloge système, il utilise l’horloge LSI de 32
Khz. Attention une fois activé seul un reset peut le désactiver. La valeur de rechargement est programmable , par
défaut 0xFFF. La valeur du timeout est donc configurable via le prescaleur sur l’horloge LSI et surtout la valeur
de reload (timeout = 125 µs à 32,8 s). Un rechargement sera provoqué par l’écriture de la valeur 0XAAAA dans
le Key Register.
Les registres du IWDG sont dans le Core domain tandis que les blocs fonctionnels sont dans le VDD domain,
cela permet au IWDG de continuer à fonctionner en mode low Power STOP et Standby.
Possibilité d’une windows option mais le watchdog WWDG peut être utilisé dans ce cas.
On utilisera le IWDG si l’horloge principale est incluse dans la surveillance. L’option window est utile dans les cas
ou on veut vérifier que des opérations sont effectué dans une fenêtre temporelle précise. Par exemple des
communications qui ne doivent pas prendre trop de temps.
25
WWDG
WATCHDOG : principe – STM32 – application
1/2/4/8
T[6:0]
Timeout (@ 80 MHz)
51,2 µs W[6:0]
To EWI interrupt
0x40
0x3F
26,2 ms
Reload = RESET Reload RESET t
Domaine d’étude
26
Pr. Acacio MARQUES - ISMIN 2023 26 Application
Ce watchdog n’est pas indépendant : horloge sur APB1. Cette horloge peut monter à 80 Mhz max
Si le logiciel reload T lorsque T > W alors un reset est généré, cela arrive lorsque l’application à surveiller
survient trop tôt. Si le décompteur passe de 0x40 à 0x3F un reset survient, cela arrive lorsque l’application ne
réagit pas dans la fenêtre temporelle souhaitée.
Vous avez la possibilité de valider une interruption Early wakeup lorsque le décompteur arrive à 0x40. Elle peut
être utilisée pour faire des sauvegardes avant le reset et/ou pour annuler le reset en faisant un reload.
26
WWDG
WATCHDOG : principe – STM32 – application
(dé)compteur
tWWDG = T2
CNTmax
(paramètre, max 127)
4096 × 𝑃𝑆𝐶
CNTwind 𝑑𝑡 =
𝑓
(paramètre)
Où
• 1 < PSC < 8
• fPCLK = 80 MHz (par défaut)
CNTmin Timeout
(imposé = 63) WWDG
RESET si Fenêtre du WWDG RESET !
refresh Refresh autorisé
Comment procéder ?
1. Fixer dt => Choix de PSC (« WWDG counter clock prescaler »)
2. Calculer T2 = dt (CNTmax – 63) => Choix de CNTmax (« WWDG free running counter value »)
3. Calculer T1 = dt (CNTmin – 63) => Choix de CNTmin (« WWDG window value »)
27
Pr. Acacio MARQUES - ISMIN 2023 27 QUIZZ
27
QUIZZ
POWER CONTROL : supply – low power - application
4. Quels sont les modes de fonctionnement dans lesquels l'IWDG peut rester actif ?
28
Pr. Acacio MARQUES - ISMIN 2023 28 Quizz
28
TP0
WATCHDOG : principe – STM32 – application
*-----------------------------------------------------------------------------------------------------------------
* FONCTION : IWDG
• SW1 premier appui commande en vitesse le moteur (1 kHz, 25 %)
• SW1 deuxième appui : arrêt moteur
• LED 2 clignotante à 1 seconde simule une application dans le main
• BP1 simule une panne (écriture en Flash par exemple)
• Utiliser les interruptions
• Testez sans et avec watchdog (timeout 2 s)
• En cas de reset watchdog allumer LED5
*----------------------------------------------------------------------------------------------------------------
SW2
PB11
ENCA SW1
PA0 PA15
LED5
PB2
TIM5 LED4
PC5
ENCB
PA1
LED3
PA10
LED2
PWM PA7
PA5
TIM2
DIR
PA9
DIS
PB5
29
Pr. Acacio MARQUES - ISMIN 2023 29 Algo
29
RAPPEL TIMER
WATCHDOG : principe – STM32 – application
UEV
ARR
ARR
Clock Sources
Syst clk
Extern clk timer clock
CK
Pin 0
Timerx CNT
TR
Trigger sources
Timer x Enable, Reset, up/down
Pin x
Soft
CCRx
Capture Compare
Acquisition signaux Génération signaux
30
Pr. Acacio MARQUES - ISMIN 2023 30 Appli suite
30
RAPPEL
TIMERS : principe – STM32 – application
𝑷𝒆𝒓𝒊𝒐𝒅𝒆∗
𝑷𝑺𝑪𝑶𝒑𝒕𝒊 ≥ ≥ 0,00001
𝟐
Soit PSC = 1
𝑷𝒆𝒓𝒊𝒐𝒅𝒆 ∗𝑻𝒊𝒎𝒆𝒓𝒄𝒍𝒌
𝐀𝐑𝐑 = = 80 000
𝑷𝑺𝑪
La prudence élémentaire suppose de toujours initialiser le moteur avec une vitesse nulle au démarrage avec donc le
paramètre Pulse = 0 dans Cube.
La consigne peut ensuite être donnée dans le code avec la commande: TIM2->CCR1 = 20 000 ou
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1, 20000);
PWM mode: 1 channel active si Period < Pulse , 2 channel inactive si Period < Pulse
Internal Clock Division: concerne les filtres des inputs channels
Comme d’habitude il faudra démarrer le timer 2 via la fonction HAL appropriée
HAL_TIM_PWM_Start.
31
TP0
WATCHDOG : principe – STM32 – application
Infinite loop
INITIALISATIONS
BP1 PRESS
EXTI13 IT
INVALID
TOGGLE LED 2 PWM on ACCES
REFRESH IWDG
32
Pr. Acacio MARQUES - ISMIN 2023 32 Appli suite
Pour vérifier dans un premier temps le fonctionnement du IWDG vous pouvez configurer une période de 500 ms
et vérifier qu’il se produit bien un reset avec un point d’arrêt au début du main. En passant la période IWDG à 2
secondes les reset ne se produisent plus à condition de rafraichir correctement le watchdog. Le programme
devrait donc fonctionner normalement. Si vous simulez un plantage , le IWDG permet alors de reprendre le
contrôle du moteur évitant une catastrophe.
La fonction HAL_RCC_GetResetSource() permet de retrouver l’origine du reset et donc d’alerter en cas de reset
IWDG.
32
TP1
WATCHDOG: principe – STM32 – application
*-----------------------------------------------------------------------------------------------------------------
* FONCTION: WWDG
* LED 2 clignotante
* Transmission périodique 25 ms à 115200 baud du message « donnes
* importantes a transmettre » durée 2,2 ms
* BP1 simule une panne ( taille des data erronée )
* Tester sans et avec windows watchdog ( timeout 26 ms, fenêtre 2 ms )
* En cas de reset watchdog allumer LED4
*----------------------------------------------------------------------------------------------------------------
SW2
PB11
ENCA SW1
PA0 PA15
LED5
PB2
TIM5 LED4
PC5
ENCB
PA1
LED3
PA10
LED2
PWM PA7
PA5
TIM2
DIR
PA9
DIS
PB5
33
Pr. Acacio MARQUES - ISMIN 2023 33 Algo
33
TP1
WATCHDOG: principe – STM32 – application
WWDG TIMEOUT
RESET
INITIALISATION
WWDG ? LED 4 ON
EXTI13 IT
TOGGLE LED 2
BP1 PRESS
INVALID
DELAY( 25 ms ) TRANSMIT 26 ms
REFRESH WWDG 2 ms
TRANSMIT ( 2,2 ms )
Infinite loop 25 ms
34
Pr. Acacio MARQUES - ISMIN 2023 34 DMA
Le windows watchdog est utile pour surveiller des contraintes de temps comme lors d’une transmission prioritaire
périodique. Tout disfonctionnement est détecté, perte de data, transmission trop longue, fluctuation de la période.
Testez en simulant une transmission abrégée ( Taille du message = 5 au lieu de 32 ) et une période trop longue.
La transmission trop longue peut être détecté par le timeout de la fonction HAL_Transmit.
Remarque: on peut utiliser dans une même application les 2 types de watchdog ( IWDG et WWDG ) puisqu’ils
ont des rôles différents.
34
TP2
WATCHDOG : principe – STM32 – application
*-----------------------------------------------------------------------------------------------------------------
* FONCTION : WWDG
• LED 2 clignotante, période 10 ms
• Transmission à 9600 bauds d’un message de 6, 12 ou 24 chars.
• Un appui sur SW1 simule une panne en envoyant le message trop long de 24 chars
• Surveiller avec le windows watchdog (fenêtre entre 17.2 ms et 26.2 ms)
• En cas de reset watchdog allumer LED4
*----------------------------------------------------------------------------------------------------------------
SW2
PB11
ENCA SW1
PA0 PA15
LED5
PB2
TIM5 LED4
PC5
ENCB
PA1
LED3
PA10
LED2
PWM PA7
PA5
TIM2
DIR
PA9
DIS
PB5
35
Pr. Acacio MARQUES - ISMIN 2023 35 Algo
35
TP2
WATCHDOG : principe – STM32 – application
RESET
INITIALISATIONS
(sauf WWDG)
INIT + START
WWDG
EXTI IT
TRANSMIT (10 ms)
SW1 PRESS
DELAY(10 ms) TOO SHORT WWDG EARLY
Infinite TRANSMIT (5 ms) REFRESH
loop
LED 2 TOGGLE SW2 PRESS
TOO LONG
WWDG
TRANSMIT (20 ms)
TIMEOUT
WWDG REFRESH
36
Pr. Acacio MARQUES - ISMIN 2023 36 Appli suite
Le WWDG est utile pour surveiller des contraintes de temps comme lors d’une transmission prioritaire
périodique.
Tout disfonctionnement est détecté, perte de data, transmission trop longue, fluctuation de la période.
Remarque : on peut utiliser dans une même application les 2 types de watchdogs (IWDG et WWDG) puisqu’ils
ont des rôles différents.
36
TP2
WATCHDOG : principe – STM32 – application
Refresh
LED 2 Toggle
Durée de
transmission TRANSMIT HAL_DELAY
souhaitée
Refresh
LED 2 Toggle
Timeout WWDG
RESET !
Transmission
TRANSMIT HAL_DELAY
trop longue
Temps
T0 = 0 T1 T2
Initialisation & démarrage Ouverture fenêtre Fermeture fenêtre
WWDG WWDG WWDG
37
Pr. Acacio MARQUES - ISMIN 2023 37 DMA
37
SOMMAIRE
INTRODUCTION : objectifs – biblio - cible
38
Pr. Acacio MARQUES - ISMIN 2023 38 Principe
38
PRINCIPE
DMA : principe – STM32 – application
µP Cession de bus
Adresse périphérique
Sens de transfert
Mémoire
Périphérique
Fin de transfert
Contrôleur DMA
TRANSFERT
39
Pr. Acacio MARQUES - ISMIN 2023 39 Principe
2) Démarrage transfert
3) Fin du transfert, interruption CPU optionnelle
4) Redémarrage automatique ou attente d’un nouveau démarrage ordonné par le CPU
39
ARCHITECTURE
DMA : principe – STM32 – application
40
Pr. Acacio MARQUES - ISMIN 2023 40 Les 7 canaux capitaux
Le circuit DMA du STM32 n’occupe que 40 % de la bande passante du bus même en fonctionnement continu ce
qui autorise les accès CPU en parallèle.
Le démarrage des transferts est possible via un événement issu des périphériques (hardware request : timeout
timer, fin de conversion ADC, réception UART etc…) mais il est aussi possible via un trigger logiciel.
40
REQUEST
DMA : principe – STM32 – application
1
2
41
Pr. Acacio MARQUES - ISMIN 2023 41 Quelques IT
41
INTERRUPTIONS
DMA : principe – STM32 – application
Ping Pong
Remplissage
Buffer
ADC1 DR register
Half buffer
HT circulaire
Traitement
TC
42
Pr. Acacio MARQUES - ISMIN 2023 42 Quizz
Pour le transfert de mémoire à mémoire, vous aurez besoin de créer vos CallBack via la fonction
RegisterCallback voir le poster.
Pour les autres cas ou le request est initié par les périphériques les CallBack du DMA sont partagés avec les
CallBack du périphérique (exemple HAL_ADC_ConvHalfCpltCallback et HAL_ADC_ConvCpltCallback).
Les interruptions half et complete associées au mode circulaire permettent la technique du ping pong, optimisant
le traitement des données (travail en parallèle CPU et DMA).
Lorsque la moitié du buffer est rempli (Half Transfert IT), le CPU passe en phase de traitement pendant que le
DMA continue à remplir la seconde moitié.
Celle-ci sera signalée remplie par l’interruption Transfert Complete commandant la permutation du traitement
CPU sur l’autre buffer et ainsi de suite. C’est ce qu’on appelle la technique du ping-pong.
42
QUIZZ
DMA : principe – STM32 – application
43
Pr. Acacio MARQUES - ISMIN 2023 43 Analyse performances
43
TP0
DMA : principe – STM32 – application
*-------------------------------------------------------------------------------------------------------------------------------------------------
* FONCTION : Transfert mémoire Flash vers mémoire SRAM sans et avec DMA du message suivant
* const char message1[10000]="Centre de microelectronique de provence - George Charpak";
* char message2[10000];
* Mesurer le temps de transfert DMA en utilisant l'interruption DMA fin transfert, comparer
*------------------------------------------------------------------------------------------------------------------------------------------------
Mesure temporelle
44
Pr. Acacio MARQUES - ISMIN 2023 44 Attention aux yeux
Pour mesurer le temps utiliser une variable (ici debut) qui encadre le délai à mesurer.
Cette variable vous pouvez ensuite la représenter via l’outil SWV Data Trace Timeline et en déduire le temps écoulé.
Au préalable il faut valider l’outil SWV dans la configuration du debugger.
44
TP1
DMA : principe – STM32 – application
*-------------------------------------------------------------------------------------------------------------
* FONCTION : Piloter des LED RVB adressables
*------------------------------------------------------------------------------------------------------------
« Couleur » Freq = 800 khz
0xFF 0xFF 0x00
«1» 0,8 µs 0,45 µs
23 0 RC = 64 %
CCR1
145
45
Pr. Acacio MARQUES - ISMIN 2023 45 Une partie de ping pong ?
Explications
La couleur d’une LED est codée sur 3 composantes codées en uint8_t : Green, Red et Blue (mélange de 3 couleurs
primaires)
Chacune de ces valeurs, entre 0 et 255, détermine l’intensité de la couleur primaire correspondante (0 : couleur éteinte,
255 : couleur au max d’intensité).
Considérons une de ces composantes. On écrit sa valeur en donnant une séquence de 8 valeurs de CCR, 1 par bit, avec :
- bit i = 1 encodé par CCR tel que rapport cyclique = 64% (pour i de 0 à 7)
- bit i = 0 encodé par CCR tel que rapport cyclique = 32% (pour i de 0 à 7)
(Voir : [Link]
Le remplissage du tableau PwmRC est donné ci-dessous.
Il peut être amélioré en parcourant chaque couleur bit à bit et non pas octet par octet.
uint8_t Couleur[12] = {0,255,0,255,0,0,0,0,255,0,255,255};
uint16_t PwmRC[96+50];
for (i=0; i<12; i++){
for (j=0; j<8; j++){
if(Couleur[i] == 0) PwmRC[k]= 32;
else PwmRC[k]= 64;
k++;
}}
Pour trigger l’ADC1 utiliser la sortie TRGO du timer6 plutôt qu’un démarrage soft.
Pour implémenter le ping pong vous aurez besoin des interruptions « half transfert » et « complete transfert » du DMA
qui sont gérées avec les CallBack de l’ADC.
46
TP2
DMA : principe – STM32 – application
3.3V Buffer
pot 0
POT LDR_ADC1_13
lum
PA6 PC4 SW2
PB11
pot
ADC1 lum
SW1
PA15
LED5
PB2
LED4
255
PC5
HT
LED3
PA10
LED2
PA7
TC
511
Recette :
• Le timer 6 est configuré à une fréquence de 200 Hz avec un « trigger update selection : update event »
• Le DMA1 est « connecté » à l’ADC1 en mode « circular », « peripheral to memory »
• L’ADC1 utilise les « DMA continuous requests » et le « Scan conversion mode » avec un scan des canaux et une
fin de conversion pour chaque canal. On doit aussi préciser que c’est le timer 6 qui lance la séquence de captures.
Ne pas oublier d’activer ses interruptions pour gérer les callbacks de demi-transfert DMA (HT) et de transfert
complet DMA (TC).
Chaque trigger du timer (toutes les 5 ms), deux conversions ADC sont réalisées : canal 11 pot et canal 13 ldr.
Les résultats sont automatiquement transférés par le DMA dans le tableau Buffer.
Lorsque Buffer est à moitié remplis, une interruption HT survient et l’on peut calculer avec le CPU la moyenne de ces
256 premiers éléments (de 0 à 255).
En parallèle, simultanément, le DMA continuer de remplir Buffer au-delà de l’élément 255.
Lorsque Buffer est complètement remplis, une interruption TC survient et l’on peut calculer avec le CPU la moyenne
de ces 256 derniers éléments (de 256 à 511).
En parallèle, simultanément, le DMA continue de remplir Buffer à partir de l’élément 0.
Etc.
47
SOMMAIRE
INTRODUCTION : objectifs – biblio - cible
48
Pr. Acacio MARQUES - ISMIN 2023 48 Principe
48
CARACTERISTIQUES
I²C : principe – STM32 – application
49
Pr. Acacio MARQUES - ISMIN 2023 49 Attention conflits
Le bus I²C (Inter Integrated Circuit) fait partie des bus série : 3 fils pour faire tout passer.
Il a été développé au début des années 1980, par Phillips pour minimiser les liaisons entre les circuits intégrés
numériques de ses produits (Téléviseurs, éléments Hi-Fi, magnétoscopes ...).
Pour se connecter à un bus I²C il faut une masse et deux fils de communication.
Le premier fil, SDA (Signal DAta), est utilisé pour transmettre les données.
L'autre fil, SCL (Signal CLock) est utilisé pour transmettre un signal d'horloge synchrone (signal qui indique le
rythme d'évolution de la ligne SDA).
49
ARBITRAGE
I²C : principe – STM32 – application
50
Pr. Acacio MARQUES - ISMIN 2023 50 Les différentes trames
Il reste maintenant un problème crucial. Comment permettre à plusieurs circuits logiques de connecter leurs sorties
ensemble (multipoints), sachant que certains circuits voudront imposer un niveau haut tandis que d'autres voudront
imposer un niveau bas ? La réponse est connue depuis longtemps. Il faut utiliser des sorties à collecteur ouvert (ou à drain
ouvert pour des circuits CMOS). Le niveau résultant sur la ligne est alors une fonction « ET » de toutes les sorties
connectées. Attention ne pas oublier les résistances de pull up sur les lignes SDA et SCL.
Au repos, tous les circuits connectés doivent imposer un niveau haut sur leurs sorties respectives. Avant de tenter de
prendre le contrôle du bus, un circuit doit vérifier que les lignes SDA et SCL sont au repos, c'est-à-dire à l'état haut. Si
c'est le cas, le circuit indique qu'il prend le contrôle du bus en mettant la ligne SDA à 0. À partir de ce moment-là, les
autres circuits savent que le bus est occupé et ils ne devraient pas tenter d'en prendre contrôle. Le circuit qui vient de
prendre le contrôle du bus en devient le maître (en anglais « master »). C'est lui qui génère le signal d'horloge, quel que
soit le sens du transfert.
Il existe la possibilité que deux maîtres prennent le contrôle du bus en même temps. Si cela ne pose pas de problème sur
le plan électrique grâce à l'utilisation de collecteurs ouverts, il faut pouvoir détecter cet état de fait pour éviter la corruption
des données transmises. Comment cela se passe-t-il ?
Si tous les maîtres qui ont pris le contrôle du bus placent le même état sur la ligne SDA, le conflit n'étant pas visible, la
transmission se poursuit normalement, comme si chacun était seul. En revanche, dès qu'un maître place un niveau
différent des autres sur la ligne SDA, il y aura forcément un état bas sur la ligne SDA, tandis qu'un ou plusieurs maîtres
souhaitaient imposer un niveau haut. Tous les maîtres qui ont demandé un niveau haut, tandis que la ligne SDA reste à 0,
vont perdre immédiatement le contrôle du bus.
50
TRAMES
I²C : principe – STM32 – application
Adresse
7 bits
Adresse
10 bits
BURST
Mode
COMBINED
Transaction
51
Pr. Acacio MARQUES - ISMIN 2023 51 Détails
Le mode burst permet de lire ou écrire plusieurs octets sans stopper à chaque fois la communication.
On monopolise la ligne tout le temps de la transaction.
Le mode combined permet d’enchainer en mode burst écriture et lecture en gardant la ligne.
51
PROTOCOLE
I²C : principe – STM32 – application
Ecriture
Lecture
52
Pr. Acacio MARQUES - ISMIN 2023 52 Cas STM32
Le nombre de composants qu'il est possible de connecter sur un bus I²C étant largement supérieur à deux, le
maître doit pouvoir choisir quel esclave est censé recevoir les données.
Dans ce but, le premier octet que transmet le maître n'est pas une donnée, mais une adresse.
Le format de l'octet d'adresse est un peu particulier puisque le bit D0 est réservé pour indiquer si le maître
demande une lecture à l'esclave ou bien au contraire si le maître impose une écriture à l'esclave.
Une fois les 8 bits transmis, le circuit esclave doit imposer un bit d'acquittement ACK sur la ligne SDA.
Pour cela, le maître place sa propre sortie au niveau haut, tandis que l'esclave place sa sortie au niveau bas.
Puisque les sorties sont à collecteur ouvert, la ligne SDA restera au niveau bas à cause de l'esclave.
Le maître relit ensuite la ligne SDA, si la valeur lue pour le bit ACK est 0, c'est que l'esclave s'est bien acquitté de
l'octet reçu, sinon c'est qu'il y a une erreur et le maître doit générer la condition arrêt.
52
PARAMETRES
I²C : principe – STM32 – application
Horloges
Timings
53
Pr. Acacio MARQUES - ISMIN 2023 53 Application
Comme pour l’UART, l’horloge du périphérique I²C peut-être indépendante du bus APB.
Des filtres analogiques et numériques sont présents sur les lignes SDA et SCL, l’ordre du filtre numérique est
programmable de 0 à 15 mais est désactivé en mode low-power a contrario du filtre analogique.
Les Timings Tsetup et hold time sont configurables via les registres SDADEL et SCLDEL. Le temps haut et bas de
l’horloge est également configurable via respectivement les registres SCLH et SCLL. Heureusement dans la plupart
des cas les timings par défaut conviennent.
Une ligne SMBus Alert peut être utilisé en mode SMBus (System Management Bus). Le SMBus est étroitement lié au
standard I²C, et dans de nombreux cas, les périphériques SMBus sont également compatibles avec le standard I²C.
Cependant, le SMBus a des spécifications supplémentaires et des fonctionnalités spécifiques qui le rendent adapté aux
applications de gestion système (surveillance batteries, les ventilateurs, les capteurs de température, contrôle de
tension …). Le SMBus fonctionne généralement à des vitesses plus lentes que le bus I²C, avec des vitesses typiques
allant jusqu'à 100 kbps.
53
QUIZZ
I²C : principe – STM32 – application
1. Quels sont les différentes vitesses disponibles pour le bus I2C du STM32L476 ?
3. Quelle est la différence entre une condition de START répétée et une condition de
STOP sur le bus I2C ?
4. Quelle est l'utilité de la fonction d'horloge étirable (clock stretching) sur le bus I2C ?
5. Quel est le rôle d'une résistance pull-up dans une configuration I2C ?
6. Quel est l'impact d'une résistance pull-up mal dimensionnée sur le bus I2C ?
54
Pr. Acacio MARQUES - ISMIN 2023 54 Quizz
54
TP0
I²C : principe – STM32 – application
*-----------------------------------------------------------------------------------
* FONCTION : Affichage
* Afficher « Hello word » sur l’afficheur OLED
* à 400 kb/s
*----------------------------------------------------------------------------------
SW2
PB11
SW1
PA15
LED5
PB2
LED4
PC5
Main()
GPIO
LED3
PA10
PA7
LED2 Init I2C1 400kb/s
INTOF1
PC11
SSD1306_Init();
PH0
SHUT1
PC10
INTOF2 SSD1306_GotoXY (0,0);
PH1
SSD1306_Puts ("Hello", &Font_11x18, 1);
SHUT2
SSD1306_GotoXY (0, 30);
I2C1 SSD1306_Puts ("word", &Font_11x18, 1);
PB7 PB6 SSD1306_UpdateScreen();
SDA SCL
CO²
55
Pr. Acacio MARQUES - ISMIN 2023 55 CubeMX
Remarque : compte tenu de la fréquence de balayage de l’afficheur OLED, il ne peut pas fonctionner en dessous
de 400 kbit/s de débit. Assurer-vous donc que le mode FAST est sélectionné à 400 kbit/s.
55
INIT
I²C : principe – STM32 – application
56
Pr. Acacio MARQUES - ISMIN 2023 56 Installer la librairie de gestion de l’OLED
Laisser les valeurs Rise Time et Fall Time à 0 indique généralement au matériel de gérer automatiquement les
temps de montée et de descente en fonction de la configuration du bus et des spécifications électriques du
microcontrôleur STM32. Cela peut être suffisant pour de nombreuses applications.
Lorsqu'un esclave I²C n'est pas prêt à recevoir ou à envoyer des données, il peut "étirer" ou ralentir le signal
d'horloge SCL (clock stretch mode) pour indiquer au maître I²C qu'il doit attendre. Cela permet à l'esclave de
rattraper son retard et de se préparer à la communication. Le mécanisme d'étirement de l'horloge est une
fonctionnalité intégrée au protocole I²C pour éviter les collisions et les erreurs de données.
General Call Address Detection : L'appel général est une fonctionnalité du protocole I²C qui permet à un maître
d'envoyer une trame spéciale à tous les esclaves sur le bus plutôt qu'à un esclave spécifique (broadcast). Cela peut
être utilisé pour envoyer des commandes ou des instructions générales à tous les périphériques I²C connectés.
Dual Address Acknowledged : Les adresses doubles sont utilisées pour permettre à un esclave I²C de répondre à
deux adresses différentes. Cela peut être utile dans certaines situations où vous avez des périphériques avec des
adresses physiques différentes, mais qui sont gérés par le même esclave. Par exemple, vous pourriez avoir un
capteur avec deux plages de registres distinctes accessibles via deux adresses différentes.
Lorsque le STM32 fonctionne en tant qu'esclave I²C, il doit avoir une adresse unique pour être adressé par d'autres
maîtres sur le bus : Primary slave address. Si cette adresse est à 0 c’est sûrement qu’il n’y a aucun autre maître
dans les parages.
56
BIBLIOTHEQUE
I²C : principe – STM32 – application
128 pixels
57
Pr. Acacio MARQUES - ISMIN 2023 57 I²C suite
Pour gérer de tel afficheur il faut une bibliothèque, vous la trouverez dans le répertoire de travail STM32L4 sur
campus : ssd1306.h, fonts.h et ssd1306.c, fonts.c.
Dans le .c vous trouverez la fonction d’initialisation de l’afficheur SSD1306_Init et SSD1306_Puts pour écrire une
chaine de caractères. Dans le .h l’adresse de l’afficheur SSD1306_I2C_ADDR.
Remarque : Sur le web des exemples existent mettant en avant les fonctionnalités de l’afficheur.
57
TP1
I²C : principe – STM32 – application
*-----------------------------------------------------------------------------------
* FONCTION : Capteur de qualité d’air
* Tester le capteur, si OK
* Afficher la qualité de l’air (ticks) sur l’afficheur
* OLED toutes les secondes
SW2
PB11
PA15
SW1
*----------------------------------------------------------------------------------
LED5
PB2
PC5 LED4
*--------------------------------------------------------------------------
* FONCTION : Amélioration
GPIO
LED3
PA10
PC11
INTOF1
*--------------------------------------------------------------------------
PH0
SHUT1
INTOF2
PC10
PH1
SHUT2
I2C1
PB7 PB6
SDA SCL
CO²
58
Pr. Acacio MARQUES - ISMIN 2023 58 Des explications
58
SGP40 DATA
I²C : principe – STM32 – application
320
Self test Cmde = 0x28 , 0x0E ms
Result 0xD4 OK
0x4B NOK
Mesure Cmde = 0x26 ,0x0F, 0x80, 0x00, 0xA2, 0x66, 0x66, 0x93
Result = XX YY CC
59
Pr. Acacio MARQUES - ISMIN 2023 59 C’est quoi l’index VOC ?
Le capteur SGP40 permet une compensation tenant compte de l’humidité et de la température, il suffit d’insérer
ces informations dans la trame de cmde transmise via I²C.
Attention, il faut également insérer un octet de CRC par data !
Par défaut nous enverrons une commande spécifiant 50 % d’humidité relative et 25 °C de température.
L’information brute (SRAW_VOC) entre 0 et 65535 ticks est proportionnelle au logarithme de la résistance Mox.
Elle varie donc comme la concentration en gaz, plus il y a de gaz, plus il y a d’électrons et donc plus la résistance
baisse.
La mesure est donc relative et difficilement exploitable telle quelle.
59
CAPTEUR DE GAZ – Index VOC ?
I²C : principe – STM32 – application
Résistance Mox
SRAW_VOC en tick [ 0..65535]
R = k . log (gaz)
Relative intensity
60
Pr. Acacio MARQUES - ISMIN 2023 60 Autre bus série
Good
Les capteurs à oxydes métalliques utilisent des matériaux semi-conducteurs qui présentent des variations de résistance électrique en
fonction de l’atmosphère gazeuse dans laquelle ils sont placés.
Mais ils souffrent d'une faible sensitivité lorsqu’ils fonctionnent à température ambiante et d’un manque de sélectivité.
Il faut donc les chauffer typiquement entre 300°C et 500°C.
L’humidité doit également être prise en compte pour une meilleure précision de la mesure.
Le signal brut peut être lu seul, mais pour obtenir les meilleurs résultats, l'algorithme gas index de Sensirion traite le signal pour produire des
données d'indice de VOC (Volatile Organic Compounds) ou COV en français pour « Composés Organiques Volatils ».
La valeur VOC index traité varie de 0 à 500 points d'indice.
Les données sont relatives à l'historique de la pièce surveillée, où 100 représente la lecture moyenne rapportée au cours des dernières 24
heures.
Les valeurs au-dessus de 100 indiquent un événement de COV ou une qualité de l'air inférieure à la moyenne, tandis que les valeurs
inférieures indiquent une qualité de l'air supérieure à la moyenne.
Le taux et l'intensité du changement aident à identifier la gravité de l'événement pour déclencher des actions telles que la mise en marche
des ventilateurs pour ventiler la zone jusqu'à ce que le signal se stabilise à nouveau.
Pour mettre en place l’algorithme copier la librairie SGP40 présente sur campus dans Driver du projet.
L’algorithme suppose une mesure toutes les secondes.
while (1){
voc1 = SGP40_MeasureRaw(25, 50);
voc2 = SGP40_MeasureVOC(25, 50);
HAL_Delay(500);
}
60
SOMMAIRE
INTRODUCTION : objectifs – biblio - cible
61
Pr. Acacio MARQUES - ISMIN 2023 61 Principe
61
CARACTERISTIQUES
SPI : principe – STM32 – application
62
Pr. Acacio MARQUES - ISMIN 2023 62 Topo
Selon Wikipedia :
Une liaison SPI (pour Serial Peripheral Interface) est un bus de données série synchrone baptisé ainsi par Motorola,
au milieu des années 1980 qui opère en mode full-duplex. Les circuits communiquent selon un schéma maître-
esclave, où le maître contrôle la communication. Plusieurs esclaves peuvent coexister sur un même bus, dans ce
cas, la sélection du destinataire se fait par une ligne dédiée entre le maître et l'esclave appelée « Slave Select (SS)
».
Il faut autant de fils Slave Select que d’esclaves, donc c’est une liaison qui reste gourmande en fil comparez à la
liaison I²C par exemple. Son point fort c’est son débit.
62
TOPOLOGIE
SPI : principe – STM32 – application
Direct Connection
Daisy Chain
63
Pr. Acacio MARQUES - ISMIN 2023 63 Signaux
Alors que le SPI classique présente certaines limites en termes de gestion des périphériques et de complexité du
câblage, le principe du Daisy Chain SPI offre une solution élégante à ces défis.
63
MODE
SPI : principe – STM32 – application
64
Pr. Acacio MARQUES - ISMIN 2023 64 Diagramme
Une transmission SPI typique est une communication simultanée entre un maître et un esclave :
Le maître génère l'horloge et sélectionne l'esclave avec qui il veut communiquer par l'utilisation du signal SS.
L'esclave répond aux requêtes du maître
À chaque coup d'horloge le maître et l'esclave s'échangent un bit. Après huit coups d'horloges le maître a transmis
un octet à l'esclave et vice versa. La vitesse de l'horloge est réglée selon des caractéristiques propres aux
périphériques.
La plupart du temps c’est le mode 0 qui est utilisé mais vérifier toujours les data sheet.
64
BLOC DIAGRAMME
SPI : principe – STM32 – application
65
Pr. Acacio MARQUES - ISMIN 2023 65 Modes
Toutes les transactions de données SPI passent par les FIFOs (First-In-First-Out) intégrées de 32 bits.
Cela permet au SPI de fonctionner en flux continu et d'éviter les surcharges lorsque la taille de la trame de données
est courte.
Ces FIFOs sont utilisées dans tous les modes SPI, sauf en mode réception uniquement (esclave ou maître) avec
calcul de CRC activé.
Deux calculateurs CRC séparés sont implémentés pour vérifier la fiabilité des données transmises et reçues.
Le SPI offre un calcul CRC8 ou CRC16 indépendamment de la longueur de la trame de données, qui peut être fixée
à 8 bits ou 16 bits.
Pour toutes les autres longueurs de trame de données, aucun CRC n'est disponible.
La valeur CRC calculée est vérifiée automatiquement à la fin du bloc de données, que le transfert soit géré par le
CPU ou par le DMA.
Lorsque l'on détecte une discordance entre le CRC calculé en interne sur les données reçues et le CRC envoyé par
l'émetteur, un drapeau CRCERR est activé pour indiquer une erreur de corruption des données.
65
MODE
SPI : principe – STM32 – application
Hardware NSS
signal disabled
1K
66
Pr. Acacio MARQUES - ISMIN 2023 66 Mode
Le mode le plus utilisé est le mode Master/Slave avec 1 ou plusieurs esclaves. La communication Full Duplex est
disponible par défaut.
Mais si nécessaire pour économiser du câblage on peut utiliser une communication simplex ou half duplex.
Remarque : En cas de multi-slave il faut utiliser des GPIO en output pour les sélectionner.
Un seul doit être sélectionné à la fois. Cela correspond au NSS software mode (Hardware NSS signal disabled).
L’autre mode NSS hardware output signal gère en interne la sortie NSS, elle passe automatiquement à zéro lorsque
le maître commence la communication.
Bien sûr cela n’est utile que lorsqu’on a un seul slave. Le mode NSS hardware input signal est lui utilisé en mode
multi maître.
66
MODE
SPI : principe – STM32 – application
67
Pr. Acacio MARQUES - ISMIN 2023 67 FIFO
Un mode multi-maîtres est possible même si le protocole SPI ne le propose pas, chaque maître pouvant accéder au bus
à tour de rôle.
Les stations sont en mode esclave par défaut lorsque le bus est au repos.
Au début d’une communication une station commute en mode maître pour prendre temporairement le contrôle du bus.
Dans cette configuration la broche NSS est configuré en input et permet de détecter les conflits : quand la station est
maître son entrée NSS doit être à 1.
67
FIFO ACCESS & IT
SPI : principe – STM32 – application
68
Pr. Acacio MARQUES - ISMIN 2023 68 NSS Pulse
Les requêtes DMA peuvent être déclenchées lorsque les seuils de remplissage de la FIFO sont atteints.
Ces seuils (FxLVL)sont programmables sur 4 niveaux (0, ¼, ½, >½).
Remarque : Actuellement STM32CubeIDE ne permet pas de configurer ces seuils (ils sont fixés à 00 au reset).
68
NSS PULSE
SPI : principe – STM32 – application
• Simplification de la Synchronisation
• Réduction du Risque de Conflits
• Compatibilité avec le Matériel TI
69
Pr. Acacio MARQUES - ISMIN 2023 69 Comparaison
Le mode NSSP (NSS Pulse) est une fonctionnalité du protocole SPI (Serial Peripheral Interface) dans les
microcontrôleurs STM32.
Ce mode permet de générer une brève impulsion NSS (Slave Select) au lieu de maintenir un niveau bas constant
pendant toute la durée de la communication SPI.
Simplification de la Synchronisation :
En générant une impulsion courte, le mode NSSP simplifie la synchronisation entre le maître et les esclaves,
surtout dans des environnements où plusieurs périphériques SPI partagent le même bus.
Réduction du Risque de Conflits :
L'utilisation d'impulsions NSS réduit le risque de conflits sur le bus SPI en minimisant la période pendant
laquelle plusieurs esclaves peuvent être activés simultanément.
Compatibilité avec le Matériel TI :
Le mode NSSP est compatible avec les périphériques TI, qui utilisent des impulsions NSS pour délimiter les
trames de données.
69
COMPARAISON
SPI : principe – STM32 – application
ConsommationD D
moyenne D
faible élevée
D
70
QUIZZ
SPI : principe – STM32 – application
1. Quel paramètre de configuration SPI détermine si les données sont échantillonnées sur
le front montant ou descendant du signal d'horloge ?
2. Quel est le rôle de la ligne NSS (Slave Select) dans une communication SPI ?
3. La ligne NSS peut-elle être utilisé en cas de mode muti-slaves ? Par quoi la remplacer ?
6. Quelle est la vitesse maximale de communication typique pour le SPI sur le STM32L4 ?
7. Quel est l'avantage principal de l'utilisation du DMA (Direct Memory Access) avec le
bus SPI sur le STM32L4 ?
71
Pr. Acacio MARQUES - ISMIN 2023 71 Il fait chaud non?
71
TP0
SPI : principe – STM32 – application
*----------------------------------------------------------------------------------------------------------------
* FONCTION : Affichage de la température sur l’écran OLED toutes les secondes
*
*----------------------------------------------------------------------------------------------------------------
ENCA
PA0
SW2
PB11
TIM5
SW1
ENCB
PA1 PA15
LED5
PB2
PWM LED4
PA5 PC5
GPIO
TIM2 PA10
LED3
DIR LED2
PA9 PA7
DIS
PB5 INTOF1
PC11
PH0
SPI2
CSN SHUT1
PB9
INTOF2
PB8 PC2 PC3 PB10 PC10
PH1
SHUT2
CE SDO SDI SCK
I2C1
PB7 PB6
SDA SCL
72Capteur TC72
Pr. Acacio MARQUES - ISMIN 2023 72
72
Capteur de température
SPI : principe – STM32 – application
Registres
every 150 ms
Low-power
every 150 ms
150 ms after control write
73
Pr. Acacio MARQUES - ISMIN 2023 73 Le polling c’est plus facile
Bien que la dynamique du résultat de l’ADC en 10 bit signé en virgule fixe format Q2(10) permette une mesure de
température de -128 °C à +127,75 °C, la véritable plage de mesure est de -55°C to +125°C avec une résolution de
0,25 °C .
73
Process
SPI : principe – STM32 – application
Control Write
150 HAL_Delay
ms
Temp Read
HAL_transmit
HAL_receive
74
Pr. Acacio MARQUES - ISMIN 2023 74 Les interruptions et le DMA c’est plus performant
Remarque : lors de la lecture à une adresse, le capteur répond en envoyant les octets d’adresses inférieures ou
égales.
74
TP1
SPI : principe – STM32 – application
*----------------------------------------------------------------------------------------------------------------
• FONCTION : Affichage de la température sur l’écran OLED toutes les secondes
* Améliorations : 1) Utiliser les timers pour le temps.
* 2) Transfert en DMA.
*-------------------------------------------------------------------------------------
SW2
ENCA
PA0 PB11
TIM5 PA15
SW1
ENCB LED5
PA1 PB2
LED4
PC5
GPIO
PWM
PA5 LED3
PA10
TIM2 PA7
LED2
DIR
PA9 INTOF1
PC11
DIS
PB5
PH0
SHUT1
INTOF2
SPI2
CSN
PB9 PC10
SDA SCL
75
Pr. Acacio MARQUES - ISMIN 2023 75 On passe au CAN
75
SOMMAIRE
INTRODUCTION : objectifs – biblio - cible
76
Pr. Acacio MARQUES - ISMIN 2023 76 Principe
76
AUTOMOBILE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
Câblage traditionnel
CAN
Simple &
Léger
77
Pr. Acacio MARQUES - ISMIN 2023 77 S’est étendu à toute l’industrie
Le bus CAN, pour « Controller Area Network » est un bus d’abord développé par la société BOSCH dans le cadre
de la conception automobile.
Depuis 1960 le nombre de capteurs augmente sans cesse dans les véhicules et donc le câblage aussi, 2000 m
en 1995.
Pour parer à cela, la société BOSCH invente en 1983 un bus série, asynchrone, multiplexé, sur lequel des
messages circulent tous sur une même paire de fils.
Moins de fils implique moins de maintenance, coûts plus bas et plus grande fiabilité.
L’ampleur du marché automobile a fait baisser les coûts ce qui a permis la diffusion du bus CAN dans les autres
industries (médical, aéronautique, machines industrielles …).
Le fonctionnement de type multi-maîtres apporte redondance et robustesse : tous les nœuds du réseau ont les
mêmes droits et s’occupent de la détection et de la gestion des erreurs.
Les nœuds disposent chacun de leur propre horloge et le protocole est conçu pour qu’ils ajustent celle-ci
régulièrement de sorte à rester mutuellement synchrones.
Par conséquent, des nœuds peuvent être ajoutés au réseau sans qu'il n'y ait rien à modifier tant au niveau logiciel
que matériel et sans qu’il y ait besoin d’une unité centrale pour les coordonner.
Le protocole CAN supporte des débits allant jusqu’à 1 Mbit/s en mode synchrone (CAN classique) et environs 6
Mbit/s en mode asynchrone (FD-CAN) .
77
MARCHE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
Débit
(kbits)
CAN
10 000
Ethernet Réseau d ’ordinateurs
1 000
Automobile
application motorisation
100
I²C
Automobile
D²B
10
application confort
bus de terrain
1 Automobile
industriels
application éclairage
78
Pr. Acacio MARQUES - ISMIN 2023 78 2 vitesses
78
NORMES
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
79
Pr. Acacio MARQUES - ISMIN 2023 79 Type de réseau ?
Attention 2 normes existent : High speed CAN (< 1Mb/s) et Low speed CAN (< 125 kb / s) avec des circuits
différents.
Pour des raisons économiques, on trouve souvent les 2 types de réseaux au sein d’un même système.
Le CAN High speed est désormais complété par un protocole asynchrone introduit en 2012 appelé « Flexible
Datarate CAN ».
FD-CAN susceptible d’atteindre des débits de 6 Mb/s.
79
RESEAU MULTI-MAITRE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
Message
Message Filtrage
Nœud
Emetteur Récepteur
3
Nœud Nœud
2 4
80
Pr. Acacio MARQUES - ISMIN 2023 80 Comment sont géré les confit de bus ?
La logique de fonctionnent du codage NRZ correspond à un modèle de collecteurs ouverts selon la figure 3.2. Les trois
nœuds du réseau A, B, C sont modélisés par 3 transistors NPN en configuration collecteur-ouvert (« Et-Câblé »). Le niveau
du bus sera « bas » (dominant) si l’un au moins des transistors est passant. Le niveau du bus sera « haut » (récessif) si tous
les transistors sont simultanément fermés. La table logique est bien celle d’une porte « Et » : la sortie est 1 si toutes les
entrées valent également 1.
Dans le cas d'une transmission simultanée de bits récessifs et dominants, la valeur résultante du bus sera naturellement
dominante.
80
ARBITRAGE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
Champ d'arbitrage
S Identificateur R Champ de
Champ de
O T données 0
commande
F 10 9 8 7 6 5 4 3 2 1 0 R à 8 octets
Station
1
Station
2
Station
3
La station La station 1
2 perd perd
l'arbitrage l'arbitrage
Signal
sur le bus
La station 3 a gagne le bus
81
Pr. Acacio MARQUES - ISMIN 2023 81 Le codage NRZ pose quelques problèmes
L’ARBITRAGE
Si plusieurs nœuds veulent envoyer une trame de donnée sur le bus en même temps, seul le nœud qui propose la
trame prioritaire sera autorisé à publier la suite de celle-ci.
La phase d'arbitrage comprend l'envoi bit à bit de l’arbitration field par chaque nœud jusqu’au bit RTR compris.
Lorsqu’un nœud vient de poster un bit récessif (1) et qu’il constate un niveau de bus dominant (0) à la relecture, il
passe en mode de réception. Il a perdu l’arbitrage ce tour ci, mais il retentera sa chance au prochain ; c’est pour
cela que le processus est dit « sans perte ».
La trame prioritaire sera donc celle qui a l’arbitration field le plus petit (celui qui contient le plus de bits
dominants de valeur 0.)
Ce mécanisme garantit qu'il n'y aura ni perte de temps, ni perte d'informations. Il est qualifié de CSMA/CA (pour
« Carrier Sense Multiple Access - Collision Avoidance »).
Remarque : le bit RTR fait partie du champ d’arbitrage donc une trame de donnée est plus prioritaire
qu’une trame de requête à identificateurs égaux par ailleurs.
81
BIT STUFFING
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
1 2 3 4 5 6 7 S 8 9 10 11 12 13 14 15 16 17 18 19 S 20 21 22 23 24
82
Pr. Acacio MARQUES - ISMIN 2023 82 De quoi a l’air une trame ?
Le Bit stuffing
Le mécanisme de « bit stuffing » s’applique exclusivement aux trames de données. Il est plus précisément actif
pour les champs suivants : SOF, Arbitration Field, Control Field, Data Field, CRC. Il est désactivé pour les
champs suivants : CRC delimiter, ACK field, EOF field, Interframe.
Il consiste à rompre la monotonie du signal sur le bus en insérant un bit de polarité inverse chaque fois que 5 bits
consécutifs de même polarité sont émis.
Par exemple, « 11111110 » deviendra « 111110110 ».
Les stuff-bits sont ajoutés par les nœuds émetteurs et retirés par les nœuds récepteurs.
Il a pour objectifs :
• Fournir assez de fronts dans le signal pour faciliter la synchronisation des nœuds
• Améliorer la détection d’erreurs : si plus de 5 bits consécutifs de même parité sont publiés sur le bus, une
trame d’erreur est émise.
82
TRAMES
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
Trame de données « Bonjour tout le monde, voici la donnée ALPHA, j’espère que vous l’aimerez »
Interframe
Acknowledge
Trame de requêtes « Bonjour tout le monde, quelqu’un peut-il envoyer la donnée ALPHA ? »
83Trame d’erreur
Pr. Acacio MARQUES - ISMIN 2023 83
LES TRAMES DE DONNÉES ET DE REQUÊTES
Start Of Frame. L’émission du bit SOF dominant marque le début d’une trame de donnée (auquel cas il est dominant) ou d’une trame de requête (il est alors récessif). Un échange ne peut démarrer que si
précédemment le bus était au repos. Un bus au repos est détecté par une séquence de 11 bits récessifs : le bit ACK Delimiter, les 7 nits du champ End of Frame et les 3 bits du champ d’Intermission. SOF
force aussi la resynchronisation de tous les nœuds sur son front descendant.
• Arbitration field. Ce champ est composé d’une zone Identifier et d’un bit RTR.
• Identifier. L’identificateur est codé sur 11 bits, ce qui permet de définir jusqu'à 2048 messages plus ou moins prioritaires sur le réseau.
• 1 bit Remote Transmission Request (RTR, dominant).
• Control field. Ce champ est composé d’un bit IDE, d’un bit r0 et de quatre bits DLC. Il permet à un nœud récepteur de s’assurer qu’il a bien reçu l’ensemble des données qui lui étaient adressées.
• 1 bit IDE. Il établit la distinction entre format standard (lorsqu’il est émis à l’état dominant) et format étendu (s’il est à l’état récessif).
• 1 bit Reserved (r0). Il est réservé pour une utilisation future (dominant).
• 4 bits Data Length Code (DLC). Nombre d'octets contenus dans la zone de données, entre 0 et 8.
Data field. Ici se trouvent les données utiles transmises (valeurs de température, pression …)
• Check field. Champ de vérification de l ’intégrité des données, composé d’une séquence CRC de 15 bits suivis du CRC delimiter.
• 15 bits de Cyclic Redundancy Code (CRC). Le CRC est recalculé à la réception et comparé au CRC lu sur le bus. Si l’un des nœuds trouve une différence, une erreur CRC est déclarée. Il permet
de détecter jusqu’à 5 erreurs de bits indépendantes.
• 1 bit CRC Délimiter (récessif) qui donne du temps pour le calcul du CRC.
End Of Frame. Le champ EOF marque la fin de la trame ; il est composé de 7 bits récessifs.
Interframe. Le champ d’intermission ou d’inter-trame est constitué au minimum de 3 bits récessifs. Il sépare des trames de message et/ou de requête successives. Il ne peut être interrompu que par une
trame de surcharge.
2) La trame de requête
Une trame de requête a pratiquement la même structure qu’une trame de données avec toutefois deux différences importantes :
• Le bit RTR du champ d’arbitrage (Arbitration field) est récessif
• Elle ne contient pas de champ de données (Data field).
Les 4 bits DLC du champ de contrôle doivent être explicitement renseignés conformément à la taille du champ de données attendu en réponse.
Du fait d’incohérences entre les implémentations des contrôleurs CAN, l’usage des trames de requête est susceptible de générer des collisions sur le bus (notamment si plusieurs
trames de requête sont émises avec le même identifier mais des DLC différents) ou encore de le mettre dans un état indéterminé. Il est donc fortement déconseillé de les utiliser.
83
TRAMES SUITE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
Trame d’erreurs
[ tout le monde crie ] « Quiconque a envoyé ça, recommencez !»
Trame d’erreur
active.
Trame de Surcharges
« Je vous ai entendu mais je suis occupé. Pouvez-vous attendre s’il vous plait ?»
84
Pr. Acacio MARQUES - ISMIN 2023 84 Les erreurs
Une trame d’erreur consiste en un drapeau d’erreur (Error flag) constitué de six bits consécutifs de même polarité et un délimiteur d’erreur (Error
delimiter) constitué de 8 bits récessifs. Elle est émise en réponse à une trame de données ou de requête défaillante. Le drapeau d’erreur est en
général émis sur le bit suivant immédiatement l’alerte. Si l’erreur survient pendant le CRC Field / Check, le bus laisse se terminer l’étape
d’acquittement, et commence à écrire le drapeau d’erreur juste après le ACK delimiter.
Les trames d’erreurs sont déclinées en trames d’erreurs actives pour lesquelles le drapeau d’erreur est constitué de six bits dominants et en
trames d’erreurs passives pour lesquelles le drapeau d’erreur est constitué de six bits récessifs. Laissons ces dernières de côté pour le moment …
Supposons que le bus n’ait jusqu’à présent fait l’objet d’aucune erreur. Lorsqu’un nœud détecte le premier une erreur, il va émettre une trame d’erreur
active. Les six bits dominants de son drapeau vont naturellement écraser les bits récessifs de la trame de donnée en cours de publication. Ceci violera
la règle du bit-stuffing (puisque 6 bits dominants vont s’enchainer sur le bus) ; ce drapeau d’erreur amènera donc tous les autres nœuds du réseau à
publier à leur tour des trames d’erreur actives.
Note : Il est également tout à fait possible que les autres nœuds aient réagi avant et émis des trames d’erreur en réponse à l’erreur initiale. Par ailleurs,
dès lors qu’un nœud prend connaissance d’un drapeau d’erreur, il rejette bien entendu la trame de donnée interrompue.
Mais il faut bien que ce processus prenne fin à un moment pour ne pas saturer le bus avec des trames d’erreurs actives. Le nombre de bits dominants
d'affilée ne doit pas dépasser 12 par suite de la superposition de plusieurs drapeaux d’erreur active.
Cette limite atteinte, les nœuds n'ayant pas encore émis leur trame d'erreur ne sont plus autorisés à le faire. Le délimiteur d’erreur est tout
naturellement fourni par le dernier nœud émetteur. Le nœud ayant émis la trame de données incriminée laisse passer l’Interframe et retente alors sa
chance. Et ainsi de suite, jusqu'à ce que la trame passe ou qu'un de ses compteurs d'erreur fasse changer le mode d'erreur du nœud (ceci sera
expliqué plus loin).
Un nœud émet une trame de surcharge lorsqu’il lit un bit dominant dans le champ intermission. Le drapeau de surcharge écrase alors les bits récessifs
suivants de l’Interframe. Les autres stations détectent la surcharge et émettent à leur tour des trames de surcharge.
Tout comme pour les trames d'erreurs actives, les trames de surcharge se superposent et le nombre de bits dominants d'affilée ne doit pas
dépasser 12 bits plus l’overload delimiter.
Au-delà les nœuds n'ayant pas émis leur trame de surcharge restent muets.
84
TYPES
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
Erreur bit
Erreur Stuff-bit
Erreur de format
Trame de données Erreur ACK
Emetteur S
O Arbitrage Commande Données CRC EOF
Récepteur F
Erreur bit
Erreur Stuff-bit
Erreur de format
Erreur de CRC
85entre erreurs
Différenciation
Pr. Acacio MARQUES - ISMIN 2023 85 persistantes et fugitives
Généralités
Le protocole CAN intègre des mécanismes de détection d'erreurs de transmission très performants et complètement transparents pour les développeurs et les utilisateurs. Ce système fait toute sa
puissance car seule une erreur tous les 1000 ans n’est pas détectée. Il a aussi un faible temps de recouvrement : un bus CAN cadencé à 1Mb/s mettra au plus 23 µs pour traiter une erreur et
recommencer à transmettre.
Tous les nœuds surveillent simultanément le bus, ils détectent des différences entre bits reçus et bits émis ou bien des corruptions dans la structure des trames de données publiées, notamment à l’aide
de codes de redondance cycliques (CRC).
Dès qu'une erreur est détectée par un nœud, la transmission en cours est interrompue par l'émission d’une ou plusieurs trames d’erreur. Les autres nœuds du réseau reconnaissent ce signal et rejettent
les parties de la trame de donnée émises à ce stade. En réponse l’émetteur republiera sa trame de donnée.
Le protocole sait confiner les sources d’erreurs : des nœuds qui transmettraient des données erronées ou bien qui seraient incapables de lire correctement le bus de façon récurrente se
déconnecteront spontanément pour ne plus le perturber.
Le protocole CAN implémente un ensemble de mécanismes de détection d’erreurs conçu pour détecter et réagir à quatre types d’erreurs : des « Bit errors » (corruptions de bit), des «
Acknowledge errors » (erreurs d’acquittement), des « Stuff bit errors » (erreurs protocole de transparence) et des « Form errors » (erreurs de structure de trame).
Si l’un des nœuds récepteurs calcule le même CRC que l’émetteur, ceci lui confirme que toute la plage couverte par le CRC lui a été transmise sans problème. Dans ce cas le récepteur
écrase le bit initialement récessif de l’ACK slot par un bit dominant.
Lorsque l’émetteur constate que l’ACK slot et devenu dominant il a confirmation que son message est parvenu correctement à un ou plusieurs récepteurs.
Si d’autres récepteurs constatent que l’ACK Slot a été validé alors qu’eux même ne calculent pas le bon CRC, ils en déduisent une défaillance locale. Ils émettent des trames d’erreur.
Si aucun nœud récepteur n’a calculé un CRC identique à celui qu’il a lu, le Slot ACK reste récessif.
Lorsque l’émetteur relis le slot ACK et le trouve inchangé, il en déduit soit qu’il a émis un CRC incorrect (défaillance locale), soit que son message ne s’est pas propagé correctement
(défaillance globale). Il émet une trame d’erreur.
4 - Form errors
Les composants suivants d’une trame de données ou de requête sont supposés rester dans le même état récessif : Le CRC delimiter, L’ACK delimiter, Le champ EOF et
Le champ d’Intermission. Une Form error est générée lorsque l’un de ces éléments contient un ou plusieurs bits dominants, sauf dans les situations suivantes :
• Un nœud récepteur détecte un niveau dominant sur le dernier bit de l’EOF.
• Un nœud détecte un niveau dominant sur le dernier bit d’un délimiteur d’erreur.
• Un nœud détecte un niveau dominant sur le dernier bit d’un délimiteur de surcharge.
85
COMPTEURS
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
COMPTEURS
REC
• Envoie d’une trame d’Erreur : +1
• Réception d’une trame corrompue : +8 (jusqu’à 128)
• Réception d’une trame correcte : - 1 (si > 0)
TEC
• Emission d’une trame corrompue : +8 (jusqu’à 256)
• Emission d’une trame correcte : -1 (si > 0)
86
Pr. Acacio MARQUES - ISMIN 2023 86 Exemple
La description du protocole CAN implique à ce point que des nœuds défectueux vont immanquablement paralyser le réseau. Examinons de telles situations :
• Erreur de transmission :
Un nœud défaillant transmet une trame haute priorité, mais corrompue. Tous les autres nœuds fonctionnels du réseau détecteront et rapporteront l’erreur. En
réponse, le nœud défaillant réémettra encore et encore la même trame corrompue. Des trames de priorité inférieures ne pourront donc jamais accéder au bus.
• Erreur de réception :
Un nœud défaillant reçoit une trame intègre et rapporte à tort une erreur. En réponse, le nœud émetteur publiera à nouveau sa trame, trame qui sera de nouveau
lue incorrectement et réémise, etc.
On comprend bien qu’il est indispensable de disposer d’un mécanisme pour identifier et déconnecter du bus les nœuds qui produisent des erreurs récurrentes. Pour ce faire, le
contrôleur CAN de chaque nœud dispose de deux compteurs, un pour les erreurs de transmission et un autre pour les erreurs de réception. Ils sont incrémentés ou
décrémentés selon les règles suivantes :
On constate que cet algorithme pénalise les nœuds émetteurs car il est plus probable qu’ils soient à l’origine d’un message erroné que l’ensemble des autres éléments et
nœuds du bus.
Selon la valeur de ses compteurs, un nœud fonctionnera en mode « Error-Active », « Error-Passive » ou « Bus-Off », définis comme suit :
86
ERREUR ACTIVE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
87
Pr. Acacio MARQUES - ISMIN 2023 87 Exemple
On voit que dans le cas d’une erreur active, l’émetteur va pouvoir tenter de réémettre 23 bits maximum après la
détection de l’erreur.
Dans le cas d’une erreur passive, l’émetteur doit voir 6 bits récessifs successifs suite à l’erreur. Ors ceux-ci peuvent
être écrasé par les autres nœuds donc le temps d’attente est imprévisible dépend de la charge du réseau. Dès que le
réseau est idle pendant 6 bits, l’émetteur fautif valide sa trame d’erreur et se met en position de réémettre.
87
GESTION
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
127 127
96 96
temps temps
88
Pr. Acacio MARQUES - ISMIN 2023 88 Abordons les problèmes de timing
Généralement les contrôleurs CAN envoient une interruption « error interrupt » (commencent à s’affoler) au
moment où le compteur atteint 96 points (warning limit). Cette gestion des erreurs est implémentée dans le hard
du contrôleur CAN et donc totalement transparente pour le programmeur.
88
BIT TIMING
BUS CAN : intérêt – protocole – erreurs – timings – STM32 - application
89 identiques
Pr. Acacio MARQUES - ISMIN 2023 89 Les horloges ne sont pas parfaitement
Le laps de temps que dure la présence effective du bit sur le bus se nomme le bit time. La durée du bit est
habituellement construite électroniquement à partir d’un nombre déterminé de coups d’horloge système. Le
protocole subdivise le bit time en plusieurs segments de temps :
• Le segment de synchronisation : par définition le flanc avant d’un bit est censé se produire à
l’intérieur de ce segment de temps.
• Le segment du temps de propagation : cette partie est conçue pour prendre en compte et
compenser les temps de retard dus au phénomène physique de propagation du signal. Chaque nœud
qui poste un bit le relit ensuite, il est donc indispensable de laisser chaque bit durer assez longtemps
pour que le signal fasse un aller-retour entre émetteur et récepteurs.
• Les segments de phase buffer 1 et 2 : Ils définissent le point d’échantillonnage, ils sont conçus pour
être soit allongés soit raccourcis par le mécanisme de resynchronisation que nous verrons plus loin,
permettant ainsi de compenser les variations de positions des flancs de signaux liées aux tolérances
de l’électronique notamment des oscillateurs.
La longueur de ces différents segments est programmable, généralement de 1 à 8 time-quanta sauf pour le
segment de synchronisation qui vaut toujours 1 time quantum. L’échantillonnage (sampling point) du bit
correspond au moment où la valeur de celui-ci est effectivement déterminée, il a lieu après le segment de
propagation.
89
SYNCHRONISATION
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
• Hard synchronisation
• Resynchronisation
90
Pr. Acacio MARQUES - ISMIN 2023 90 Principe de la resynchronisation (1/2)
Sur un bus CAN il n’y a pas une horloge commune propagée. Généralement chaque nœud possède un oscillateur
interne, et toutes les fréquences des nœuds n’ont pas nécessairement très exactement les mêmes valeurs pour
diverses raisons (quartz différents, dérives de température, dispersion des procédés de fabrication, etc.). Un
quartz ou un résonateur de précision est en général nécessaire en high speed.
Il faut donc resynchroniser les horloges locales sur les fronts des bits incidents lorsqu’il s’en présente.
Par construction, la technique du bit-stuffing augmente ce nombre de fronts de resynchronisation. Une
resynchronisation dynamique est également utilisée et décrite dans le transparent suivant.
90
RE-SYNCHRONISATION
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
e>0
Le front d’un bit est contenu entre
le segment de synchronisation et le
point d’échantillonnage.
e<0
Le front d’un bit est situé entre le
point d’échantillonnage et avant le
segment de synchronisation du bit
suivant.
91
Pr. Acacio MARQUES - ISMIN 2023 91 Principe de la re-synchronisation (2/2)
Une resynchronisation dynamique est également utilisée pour corriger les déphasages.
Le déphasage, noté e, est mesuré entre le front d’un bit sur le bus et le segment de synchronisation du nœud
considéré.
91
RE-SYNCHRONISATION
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
Correction
pour e > 0.
Correction
pour e < 0.
92En pratique …
Pr. Acacio MARQUES - ISMIN 2023 92
La resynchronisation est réalisée en soit en allongeant le segment de phase buffer 1, soit en écourtant le
segment de phase buffer 2 afin de repositionner correctement le point d’échantillonnage.
On définit par SJW une durée appelée « Synchronisation Jump Width » comprise entre 1 et 4 time-quanta.
En général e < SJW et la correction de resynchronisation est totale avec un seul front sur le bus.
Si e > SJW, la correction est partielle et il faudra plusieurs fronts sur les données pour corriger complètement la
différence de phase.
92
CONTRÔLEUR CAN
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
Micro-
Microproces-
contrôleur
seur
Gestionnaire SLIO
Gestionnaire
de protocole de protocole
CAN_H
term CAN_L term
93
Pr. Acacio MARQUES - ISMIN 2023 93 Précisons la couche physique
L’interface de ligne est généralement séparée de façon à laisser un grand degré de liberté à l’utilisateur suivant
les médias utilisés qui peuvent être les suivants :
• Monofilaire
• Bifilaires en mode différentiel
• Avec isolement galvanique par transformateur ou optocoupleur
• Courant porteur
• Fibre optique
• Radiofréquences
Le contrôleur CAN peut être intégré ou externe, les 2 types de composants existent. Aujourd’hui un grand nombre
de microcontrôleurs existent avec périphérique gestionnaire de protocole CAN intégré.
Enfin pour des applications simples ne nécessitant pas une puissance de calcul embarquée dans le nœud CAN, il
existe des dispositifs assurant de simples fonctions d’entrée/ sortie par le réseau : les SLIO (Serial Link Input
Output).
93
COUCHE PHYSIQUE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
94 de protocole
Pr. Acacio MARQUES - ISMIN 2023 94 Zoom sur le gestionnaire
Remarque : le nombre de nœuds possibles sur une ligne n’est pas limité par le protocole CAN seules les
spécifications électriques du circuit interface de ligne limitent ce nombre.
En d’autres termes vérifiez la datasheet de l’interface de ligne pour connaitre le nombre d’équipements que vous
pouvez raccorder sur la ligne.
94
PERIPHERIQUE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
PA12
M4
PA11
(3)
(3)
95
Pr. Acacio MARQUES - ISMIN 2023 95 Fonctionnement du filtrage
3 Mailbox de transmission. Une mailbox contient toutes les informations relatives à un message : identificateur,
données, contrôle, statuts, date.
La priorité de transmission peut provenir soit de la priorité de l’identificateur, soit de l’ordre de lancement des
transmissions (transmission de type FIFO).
2 FIFO de 3 messages chacune permettent de réceptionner les messages. Seuls les messages ayant traversé les
filtres seront réceptionnés, les autres ne seront pas pris en compte.
Le filtrage a lieu sur l’identificateur du message jusqu’à 14 filtres peuvent être initialisés.
Notez les broches du microcontrôleur utilisées par le périphérique CAN : PA11 et PA12.
95
MODE DE FILTRAGE
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
3 1
STID[10:0]/IDE/RTR/0 STID[10:0]/IDE/RTR/0
STID[10:0]/IDE/RTR/0
4 2
STID[10:0]/IDE/RTR/0 STID[10:0]/IDE/RTR/0
STID[10:0]/IDE/RTR/0
96
Pr. Acacio MARQUES - ISMIN 2023 96 modes
Les filtres sont constitués de 2 registres 32-bits chacun. 4 modes d’utilisation sont possibles
1) et 2) Mode liste : les identificateurs acceptés sont indiqués en clair soit 2 par filtre en format étendu (29 bits) ou
soit 4 en mode standard (11 bits).
3) et 4) Mode masque : un groupe d’identificateurs est défini via un identificateur de référence plus un masque (0
= X), un seul groupe est possible par filtre si on travaille en format étendu sinon définition de 2 groupes
possibles par filtre.
Attention lors de l’initialisation de ces registres, les identificateurs sont calés à gauche.
96
MODE DE FONCTIONNEMENT
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
• Silent
• Loopback
97
Pr. Acacio MARQUES - ISMIN 2023 97 Programmation du nominal bit time
Les modes Loopback et Mixte sont très utiles pour tester le driver CAN. Les erreurs d’acquittement sont
ignorées. Dans un premier temps lors du développement d’un driver CAN, il est fortement conseillé d’utiliser le
mode Mixte puis le mode Loopback pour tester pas à pas son application avant de connecter le réseau.
97
BIT TIMING
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
98
Pr. Acacio MARQUES - ISMIN 2023 98 Réalisation
Par défaut tous les filtres sont désactivés, donc par défaut le périphérique CAN ne reçoit rien.
98
MODE DE FONCTIONNEMENT
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
99
Pr. Acacio MARQUES - ISMIN 2023 99 Pas oublier le filtre
Automatic bus-off management permet une reconnexion automatique après 128 trames de 11 bits récessifs.
Il est possible de sortir d’un mode veille via un message sur le bus CAN.
Les FIFO de réception peuvent être verrouillées c’est-à-dire que lorsqu’elles sont pleines, les nouveaux
messages reçus sont perdus. En mode non verrouillé, les messages reçus viennent écraser les anciens.
Les 3 mailboxes de transmission peuvent être gérées comme des FIFO c’est-à-dire que les messages sont
transmis dans l’ordre de lancement ou en fonction de la priorité des identificateurs.
99
DRIVER
BUS
filtre CAN : intérêt – protocole – erreurs – timing – STM32 - application init
CAN_FilterTypeDef sFilterConfig;
[Link] = 0;
[Link] = CAN_FILTERMODE_IDLIST;
[Link] = CAN_FILTERSCALE_16BIT;
[Link] = 0x0220; // ID = 0x11, Filter = (0x11 << 5) = 0x220
[Link] = 0x0220;
[Link] = 0x0220;
[Link] = 0x0240;
[Link] = CAN_FILTER_FIFO0;
[Link] = ENABLE;
HAL_CAN_ConfigFilter(&hcan1, &sFilterConfig);
100
Pr. Acacio MARQUES - ISMIN 2023 100 Aspects particuliers des IT
Attention les filtres par défaut sont désactivés donc le bus ne reçoit rien.
L’initialisation des filtres n’est pas prévue dans CubeMX, il faut donc l’expliciter dans votre programme voir exemple.
Les filtres sont numérotés de 0 à 13.
100
INTERRUPTIONS
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
• Validations
Dans le NVIC
+ HAL_CAN_ActivateNotification(&hcan1, CAN_IT_TX_MAILBOX_EMPTY)
+ HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING)
• CallBack
HAL_CAN_TxMailbox0CompleteCallback
HAL_CAN_RxFifo0MsgPendingCallback
HAL_CAN_RxFifo1MsgPendingCallback
HAL_CAN_ErrorCallback
101
Pr. Acacio MARQUES - ISMIN 2023 101 démarrage
101
DRIVER
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
• Validation
HAL_CAN_Start(&hcan1)
• Transmission
HAL_CAN_AddTxMessage(&hcan1, &TxHeader,TxData, &TxMailbox)
[Link] = 1 à 8; N° de mailbox
[Link] = CAN_ID_STD;
[Link] = CAN_RTR_DATA;
[Link] = 0 à 2047;
• Réception
HAL_CAN_GetRxMessage(&hcan1, CAN_RX_FIFO0, &RxHeader, RxData)
payload
102
Pr. Acacio MARQUES - ISMIN 2023 102 A vous de jouer
102
QUIZZ
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
103
Pr. Acacio MARQUES - ISMIN 2023 103 Communiquons
Le contrôleur CAN dispose de 14 interruptions pour gérer son fonctionnement de façon efficace.
103
TP0
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
*----------------------------------------------------------------------------------------------------------------------------
* FONCTION : Transfert d'une donnée de 2 octets 0x1234 via le bus CAN en mode
* loopback à 100 kbit/s avec RJW = 1 tq, BS1 = 6 tq et BS2 = 3 tq
* Le CAN sera géré par interruption ID = 0x11.
* La transmission se fera toutes les secondes
* Utilisez le debugger pour vérifier la transmission correcte de la donnée
*---------------------------------------------------------------------------------------------------------------------------
*----------------------------------------------------------------------------------------------------------------------------
* FONCTION : Vérifier la transmission entre 2 kits en mode normal
* Afficher l’ID et la data reçue sur l’afficheur OLED
*---------------------------------------------------------------------------------------------------------------------------
CAN1
PA12 PA11
CAN1_TX CAN1_RX
104
Pr. Acacio MARQUES - ISMIN 2023 104 A vous de jouer
104
TP1
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
*--------------------------------------------------------------------------------------------------------------------------
* FONCTION : Connecter 4 kits via leur bus CAN.
* La période de traitement est de 100 ms
* Le premier kit doit envoyer la distance TOF1
* Le second doit commander le moteur proportionnellement à cette
* distance TOF1
* Le troisième doit déclencher le buzzer en cas de survitesse (> 90 %)
* Le quatrième doit envoyer luminosité
* Le buzzer est fort en journée et assourdi la nuit
*-------------------------------------------------------------------------------------------------------------------------
105
Pr. Acacio MARQUES - ISMIN 2023 105 A vous de jouer
Le programme des Time Of Flight est donné, voir page suivante, il doit donc fonctionner sans trop de débug.
105
TP1
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
106
Pr. Acacio MARQUES - ISMIN 2023 106 A vous de jouer
106
En réseau
BUS CAN : intérêt – protocole – erreurs – timing – STM32 - application
BUZZER
ADC1 STM32L476 STM32L476 TIM8
Buzzer
PC4 PC9
LDR_ADC1_13
2 2
120
BUS CAN
0 0
INTOF2
PA12 PA11 PA12 PA11 PA0
ENCA
PC10
SHUT2
PH1 TIM5
ENCB
PA1
INTOF1
PC11
STM32L476 PWM
PH0
PA5
SHUT1 STM32L476 TIM2
DIR
PA9
I2C1 PB5
DIS
PB6 PB7
SCL SDA
Pour réaliser ce TP il faudra vous organiser en groupe de 4. Les identificateurs sont laissés à votre libre choix.
Penser à adapter la ligne avec la résistance 120 ohms en fermant le connecteur J1 sur les 2 cartes aux extrémités.
107
FIN
ISMIN 2A : SAM1 – Projet robot – SAM2 - STR
108