• Aucun résultat trouvé

´Electronique programmable – communications

N/A
N/A
Protected

Academic year: 2022

Partager "´Electronique programmable – communications"

Copied!
17
0
0

Texte intégral

(1)

Electronique´ programmable – communications J.-M Friedt

Electronique programmable – communications ´

J.-M Friedt

FEMTO-ST/d´epartement temps-fr´equence jmfriedt@femto-st.fr

transparents `ajmfriedt.free.fr

29 janvier 2020

1 / 17

(2)

Electronique´ programmable – communications

J.-M Friedt

Protocoles de communication

Protocole parall`ele :

• un bit/fil : gourmand en ressources mat´erielles (bus parall`eles)

• couplage entre signaux adjacents `a haut d´ebit ⇒isolation (paires diff´erentielles dans LVDS, masse entre les signaux dans SCSI)

Protocoles s´erie : bits transmis s´equentiellement sur 1 ou 2 fil(s).

Asynchrone v.s synchrone :

• asynchrone : pas de partage d’horloge (historiquement, sur ligne t´el´ephonique)

• synchrone : partage d’horloge⇒d´ebit plus ´elev´e

2 / 17

(3)

Electronique´ programmable – communications

J.-M Friedt

Protocole asynchrone (RS232)

1

• Pasd’horloge commune⇒cadencement des donn´ees par convention (baudrate)

• D´ebut : repos (1)→start bit (0)

• N bits de donn´ees,N∈ {7,8}, LSB first

• bit de parit´e optionnel (E, O, N)

• 1 ou 2 bit(s) de stop (1)

• Exercice : quel est le temps de transmission d’un octet `a 115200 bauds en 8N1 ?

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

1. gtvhacker,Hack All The Things : 20 Devices in 45 Minutes, DEF CON 22 (2014)

`

ahttps://www.youtube.com/watch?v=h5PRvBpLuJs

3 / 17

(4)

Electronique´ programmable – communications

J.-M Friedt

Protocole asynchrone (RS232)

1

• Pasd’horloge commune⇒cadencement des donn´ees par convention (baudrate)

• D´ebut : repos (1)→start bit (0)

• N bits de donn´ees,N∈ {7,8}, LSB first

• bit de parit´e optionnel (E, O, N)

• 1 ou 2 bit(s) de stop (1)

1. gtvhacker,Hack All The Things : 20 Devices in 45 Minutes, DEF CON 22 (2014)

`

ahttps://www.youtube.com/watch?v=h5PRvBpLuJs

4 / 17

(5)

Electronique´ programmable – communications

J.-M Friedt

Protocole asynchrone (RS232)

Quelle est cette lettre ?

5 / 17

(6)

Electronique´ programmable – communications

J.-M Friedt

Protocole asynchrone (RS232)

Quel est ce message ?

6 / 17

(7)

Electronique´ programmable – communications

J.-M Friedt

Protocole asynchrone (RS232)

00110110S s 00110110S s

0x48=’H’

1

s0000010Ss10100110S s

0x65=’e’ 0x6C=’l’ 0x6C=’l’

11110110S s1

0x6F=’o’

0110000S s

0x0D=’\r’

0 01 10000S

0x0A=’\n’

7 / 17

(8)

Electronique´ programmable – communications

J.-M Friedt

Protocoles synchrones (I

2

C, 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 @ ?

↓ Atmega32U4 BMA220 →

8 / 17

(9)

Electronique´ programmable – communications

J.-M Friedt

Protocoles synchrones (I

2

C, 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 @ ?

↓ Atmega32U4 BMA220 →

S 1 0 1 0 0 0 1 0 0

A 2

W#

DATA CLOCK

9 / 17

(10)

Electronique´ programmable – communications

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/

10 / 17

(11)

Electronique´ programmable – communications

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

11 / 17

(12)

Electronique´ programmable – communications 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

12 / 17

(13)

Electronique´ programmable – communications 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 ; }

13 / 17

(14)

Electronique´ programmable – communications

J.-M Friedt

Initialisation du port asynchrone

Atmega32U4

1 configurer le controle de flux

2 configurer le p´eriph´erique (8N1, 115200 bauds)

Initialisation :

UCSR1A = 0 ; // i m p o r t a n t l y U2X1 = 0

UCSR1B = 0 ;

UCSR1B = ( 1<<RXEN1 )|( 1<<TXEN1) ; // e n a b l e r e c e i v e r and t r a n s m i t t e r UCSR1C = BV ( UCSZ11 ) | BV ( UCSZ10 ) ; // 8N1

// UCSR1D = 0 ; // no r t c / c t s ( p r o b l e m e de v e r s i o n de l i b a v r ) baud = ( ( ( ( F CPU / ( USART BAUDRATE16UL ) ) )1 ) ) ;

UBRR1H = (u n s i g n e d c h a r) ( baud>>8);

UBRR1L = (u n s i g n e d c h a r) baud ;

14 / 17

(15)

Electronique´ programmable – communications

J.-M Friedt

Initialisation du port asynchrone

Atmega32U4

1 configurer le controle de flux

2 configurer le p´eriph´erique (8N1, 115200 bauds)

Communication :

v o i d u a r t t r a n s m i t ( u n s i g n e d c h a r d a t a ) {w h i l e ( ! ( UCSR1A&(1<<UDRE1) ) ) ;

UDR1 = d a t a ; }

u n s i g n e d c h a r u a r t r e c e i v e (v o i d) {w h i l e ( ! ( UCSR1A&(1<<RXC1 ) ) ) ;

r e t u r n UDR1 ; }

15 / 17

(16)

Electronique´ programmable – communications

J.-M Friedt

Initialisation

du port sychrone sur Atmega32U4

v o i d i n i t S P I ( )

{DDRB|= ((1<<DDB0)|(1<<DDB2)|(1<<DDB1) ) ; // MOSI ( B2 ) , SCK ( B1 ) s o r t i e , MISO ( B3 ) e n t r e e DDRB &= ˜ ( 1<<DDB3) ; // ATTENTION : meme s i CS manuel , DDB0 d o i t e t r e o u t ( s i n o n b l o q u e ) DDRC|= ( 1<<DDC7) ; // CS# // p . 1 7 . 2 . 1 d a t a s h e e t

SPCR=(0<<SPIE )|(1<<SPE )|(0<<DORD)|(1<<MSTR) | ( 0<<CPOL)|(0<<CPHA)|(1<<SPR1 )|(1<<SPR0 ) ; // I n t Ena| SPI ENA|0=MSB 1 s t| M a s t e r | CK i d l e h i |s a m p l e t r a i l i n g SCK| f OSC /128

SPSR &= ˜ ( 1<<SPI2X ) ; // No d o u b l e d c l o c k f r e q u e n c y }

16 / 17

(17)

Electronique´ programmable – communications

J.-M Friedt

Initialisation du port sychrone sur

Atmega32U4

1 d´ebit de communication (communication synchrone)

2 ´etat au repos de l’horloge et front d’´echantillonnage des donn´ees

c h a r s d r a w s e n d b y t e (c h a r b ) // p a s de d i s t i n c t i o n TX/RX

{SPDR = b ; // emet MOSI

w h i l e( ! ( SPSR & ( 1<<SPIF ) ) ) ; SPSR &= ˜ ( 1<<SPIF ) ;

r e t u r n SPDR ; // r e n v o i MISO

}

17 / 17

Références

Documents relatifs

Composer un tableau r´ esumant ce que sont les groupes d’inerties, groupes de d´ ecomposition, substitution de Frobenius en un nombre premier p suivant les valeurs de

[r]

[r]

Ce prix subit une majoration au taux de 25% puis une minoration `a un taux inconnu, t%, sur le prix major´e.. Calculer t sachant que le prix de l’article est ` a nouveau 180

Un signal est correctement représenté à partir de ses échantillons, si la fréquence

Or donc les composantes verticales de la force de pesanteur et de la force de soutien de la sph` ere doivent pouvoir se contre- balancer, ce qui n’est plus possible si l’angle α

La capture d’´ ecran de droite propose une ex´ ecution de ce code dans l’´ emulateur de ZXSpectrum (aussi sur un Z80, mais avec une carte m´ emoire un peu diff´ erente de la

Droite : montage exp´ erimental pour la caract´ erisation de la limite de d´ etection (en haut, SMC100A utilis´ e comme source de porteuse modul´ ee en fr´ equence) et le bruit de