Informatique embarqu´ee 4/16
J.-M Friedt
Informatique embarqu´ ee 4/16
J.-M Friedt
FEMTO-ST/d´epartement temps-fr´equence jmfriedt@femto-st.fr
transparents `ajmfriedt.free.fr
11 janvier 2018
1 / 14
embarqu´ee 4/16
J.-M Friedt
Les bus de communications
Communications´erielledes donn´ees : plus rapide et moins coˆuteux (SATA v.s PATA)
• Notions de bus synchrones (partage de l’horloge) et asynchrone (chaque interlocuteur a sa propre horloge).
• synchrone est g´en´eralement plus rapide mais n´ecessite un signal additionnel pour l’horloge (sauf codage Manchester – ethernet)
• asynchrone n´ecessite l’accord pr´ealable de tous les interlocuteurs sur le d´ebit de communication (baudrate)
• tr`es utilis´e comme bus local entre un microcontrˆoleur et ses p´eriph´eriques (peu de fils = r´eduction des coˆuts de cˆablage)
bus
C1 C2 C3 C4
C1 C2
2 / 14
Informatique embarqu´ee 4/16
J.-M Friedt
Les protocoles synchrones
SCK CPOL=0CPOL=1 SS
Cycle # 1 2 3 4 5 6 7 8
MISO z 1 2 3 4 5 6 7 8 z
1 2 3 4 5 6 7 8 z
MOSI z
CPHA=0
Cycle # 1 2 3 4 5 6 7 8
MISO z 1 2 3 4 5 6 7 8 z MOSI z 1 2 3 4 5 6 7 8 z
CPHA=1
Figure–Chronogramme SPI
(http://en.wikipedia.org/wiki/Image:SPI_timing_diagram.svg).
Protocole synchrone : l’horloge est explicitement distribu´ee sur le bus.
• bus asym´etrique : maˆıtre6= esclave, CS# d´esigne le(s) destinataire(s)
• version 2 fils d’un protocole synchrone : I2C (bus de donn´ees est bidirectionnel).
3 / 14
embarqu´ee 4/16
J.-M Friedt
Protocole synchrone (I
2C, SPI)
Acc`es mat´eriel : degr´es de libert´e (´etat au repos de l’horloge, front d’´echantillonnage, ordre des bits
Impos´e dans I2C, libre dans SPI (CPHA, CPOL)
SPI s´electionne par CS#, I2C par l’adressedu destinataire (impos´ee par le mat´eriel). I2C : MSB first6= SPI : LSB ou MSB first. I2C @ ?
4 / 14
Informatique embarqu´ee 4/16
J.-M Friedt
Protocole synchrone (I
2C, SPI)
Acc`es mat´eriel : degr´es de libert´e (´etat au repos de l’horloge, front d’´echantillonnage, ordre des bits
Impos´e dans I2C, libre dans SPI (CPHA, CPOL)
SPI s´electionne par CS#, I2C par l’adressedu destinataire (impos´ee par le mat´eriel). I2C : MSB first6= SPI : LSB ou MSB first. I2C @ ?
S 1 0 1 0 0 0 1 0 0
A 2
W#
DATA CLOCK
5 / 14
embarqu´ee 4/16
J.-M Friedt
Attention aux biblioth` eques
Exemple de code Arduino `a [1]
#i n c l u d e " W i r e . h "
#d e f i n e P C F 8 5 6 3 a d d r e s s 0 x 5 1 [ . . . ]
v o i d s e t P C F 8 5 6 3 ( )
// t h i s s e t s t h e t i m e and d a t e t o t h e → ,→PCF8563
{
W i r e . b e g i n T r a n s m i s s i o n ( P C F 8 5 6 3 a d d r e s s ) ; W i r e . w r i t e ( 0 x 0 2 ) ;
[ . . . ]
Datasheet : adresses 0xA2, 0xA3 mais appel `a
i n t 8 t I 2 C w r i t e (c o n s t u i n t 8 t a d d r e s s , → ,→u i n t 8 t∗d a t a , u i n t 8 t n ) {i n t 8 t d ;
i n t i ; d = I 2 C s t a r t ( ) ;
i f( ( d != 0 x 0 8 ) && ( d != 0 x 1 0 ) ){
I 2 C s t o p ( ) ;r e t u r n d ; }
TWDR=a d d r e s s ; // s e n d t h e s l a v e a d d r e s s i f ( ( d=I 2 C a c t i o n ( 0 ) ) != 0 x 1 8 ){
I 2 C s t o p ( ) ; r e t u r n d ; }
f o r( i =0; i<n ; i ++){
TWDR=(∗d a t a++) ;
i f ( ( d=I 2 C a c t i o n ( 0 ) ) != 0 x 2 8 ){
I 2 C s t o p ( ) ; r e t u r n d ; }
} I 2 C s t o p ( ) ; r e t u r n 0 ; }
[ . . . ]
#d e f i n e PCF8563 0 xA2
I 2 C w r i t e ( PCF8563 , ( u i n t 8 t ∗) t i m e , 8 ) ;
pour communiquer (0xA26=0x51 !)
[1]http://tronixstuff.com/2013/08/13/
tutorial-arduino-and-pcf8563-real-time-clock-ic/
6 / 14
Informatique embarqu´ee 4/16
J.-M Friedt
Attention aux biblioth` eques
Datasheet : adresses 0xA2, 0xA3
1 0x51=0xA2>>1
2 m´ethode Wire de Arduino [1]
appelle beginTransmission qui appelle
twi writeTo(txAddress ...)
3 twi writeTo se trouve (par exemple) `a [2] :
t w i s l a r w = TW WRITE ; t w i s l a r w |= a d d r e s s<<1 ;
⇒biblioth`eque appel´ee par Arduino fait un d´ecallage et ajoute 1 si lecture [3]
Opensource : capacit´e `a suivre le cheminement des traitements
[1]github.com/esp8266/Arduino/blob/master/libraries/Wire/Wire.cpp [2]www.libelium.com/v11-files/api/waspmote/d5/d8c/twi_8c_source.html [3]robotika.yweb.sk/skola/!Diplomovka/avr498/avr498/doc/twi__lib_8h.html dit queTWI READvaut 1 etTWI WRITEvaut 0
7 / 14
embarqu´ee 4/16
J.-M Friedt
Emulation logicielle du protocole ´
synchrone (SPI)
Pourquoi ?
• impl´ementer un mode non-support´e par le mat´eriel (e.g.
9 bits/message)
• manque de ressource mat´erielle
Exercice : impl´ementer l’envoi d’une com- mande et d’une donn´ee
`
a un ´ecran LCD Nokia
8 / 14
Informatique embarqu´ee 4/16
J.-M Friedt
Emulation logicielle du protocole ´
synchrone (SPI)
Envoi de commande/donn´ee `a un ´ecran LCD Nokia
#d e f i n e c s l o PORTB &= ˜ ( 1<<PORTB5)
#d e f i n e c s h i PORTB|= ( 1<<PORTB5)
#d e f i n e m o s i h i PORTB|= ( 1<<PORTB7)
#d e f i n e m o s i l o PORTB &= ˜ ( 1<<PORTB7)
#d e f i n e c k h i PORTC|= ( 1<<PORTC7)
#d e f i n e c k l o PORTC &= ˜ ( 1<<PORTC7) v o i d a t t e n d ( ){}// t e mp s d ’ a t t e n t e , s c k v o i d s e n d B y t e ( b o o l cmd , u8 d a t a ) {i n t k ;
c k u p ; c s l o ;
i f ( cmd==0) m o s i l o ; e l s e m o s i h i ; c k d o w n ; a t t e n d ( ) ;
c k u p ; a t t e n d ( ) ; f o r ( k =7; k>=0;k−−)
{i f ( ( ( d a t a>>k ) &0x 0 1 ) ! =0 ) m o s i h i ; e l s e m o s i l o ;
c k d o w n ; a t t e n d ( ) ; c k u p ; a t t e n d ( ) ; }
c s h i ; }
9 / 14
embarqu´ee 4/16
J.-M Friedt
Les protocoles asynchrones
0 1T t
START
1 0 0 0
2T 3T 4T 5T 6T 7T 8T
lsb msb
9T
STOP
1 0 1 0
T=1000/baud ms
Figure–Chronogramme RS232. Pour 1200 bauds,T = 833µs. En sortie du MAX232, les niveaux sont sym´etriques (±12 V)et invers´es. Protocole asynchrone :T doit ˆetre connu par les deux interlocuteurs.
RS232 : liaison point `a point (2 interlocuteurs)1
1. RS232 reste le mode privil´egi´e pour initier une connexion avec un syst`eme embarqu´e :Hack All The Things : 20 Devices in 45 Minutes, DefCon 22 (2014), `a https://www.youtube.com/watch?v=h5PRvBpLuJs
10 / 14
Informatique embarqu´ee 4/16
J.-M Friedt
Les protocoles asynchrones
0 5000 10000 15000 20000 25000 30000 35000
-0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8
time (us)
signal (a.u.)
Figure–Chronogramme RS232. Pour 1200 bauds,T = 833µs. En sortie du MAX232, les niveaux sont sym´etriques (±12 V)et invers´es. Protocole asynchrone :T doit ˆetre connu par les deux interlocuteurs.
RS232 : liaison point `a point (2 interlocuteurs) 11 / 14
embarqu´ee 4/16
J.-M Friedt
Les protocoles asynchrones
3000 4000 5000 6000 7000 8000 9000 10000
-0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8
time (us)
signal (a.u.)
Figure–Chronogramme RS232. Pour 1200 bauds,T = 833µs. En sortie du MAX232, les niveaux sont sym´etriques (±12 V)et invers´es. Protocole asynchrone :T doit ˆetre connu par les deux interlocuteurs.
RS232 : liaison point `a point (2 interlocuteurs) 12 / 14
Informatique embarqu´ee 4/16
J.-M Friedt
Les protocoles asynchrones
S11110110s S01010000s S00110110s
S00110110s S10100110s S00010010s
stopMSB
LSBStart
H e l l o \n
−1
−0.5 0 0.5 1
8000 9000 10000 11000 12000 13000 14000 15000 16000 17000
signal (a.u.)
time (us)
Figure–Chronogramme RS232. Pour 1200 bauds,T = 833µs. En sortie du MAX232, les niveaux sont sym´etriques (±12 V)et invers´es. Protocole asynchrone :T doit ˆetre connu par les deux interlocuteurs.
RS232 : liaison point `a point (2 interlocuteurs)
13 / 14
embarqu´ee 4/16
J.-M Friedt
Bus locaux sous GNU/Linux
lm-sensors donne acc`es aux informations du processeur et de la carte m`ere
$ sensors acpitz-virtual-0 Adapter: Virtual device
temp1: +50.4C (crit = +110.0C) temp2: +50.4C (crit = +130.0C) coretemp-isa-0000
Adapter: ISA adapter
Physical id 0: +52.0C (high = +87.0C, crit = +105.0C) Core 0: +49.0C (high = +87.0C, crit = +105.0C) Core 1: +49.0C (high = +87.0C, crit = +105.0C)
D´emonstration avec le mise en œuvre du LM74 sur Atmega32U4.
14 / 14