Académique Documents
Professionnel Documents
Culture Documents
Presentation :
Systèmes embarqués avancés
Réalisé par : Arari Ahmed
Bellaaj Iskander
Achich Abdelmajid
Bousrih Nour
Sommaire :
1. introduction
2. Interface
3. Fonctionnement
2
Introduction
Introduction
Une liaison SPI (Serial Peripheral Interface) est un bus de données série synchrone baptisé ainsi par
Motorola en 1980, qui opère en mode Full-duplex. Les circuits communiquent selon un schéma maître
esclaves, où le maître s'occupe totalement de 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 chip select.
4
1
Interface
Interface
6
3
Fonctionnement
Fonctionnement
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 .
8
Fonctionnement
MODE CPOL CPHA CPHA — Clock Phase, le bit de poids faible
0 0 0 CPOL — Clock Polarity, le bit de poids fort
Le CPOL détermine si au repos l’horloge est au niveau BAS (CPOL=0) ou
1 0 1 HAUT (CPOL=1). Le CPHA détermine à quel front de l’horloge les données
2 1 0 sont transmises. CPHA=0 les données sont valides au premier front d’horloge,
3 1 1 CPHA=1 elles sont valides au deuxième front. 9
3
Avantage et
Inconvénients
Avantage et Inconvénients
11
4
marketing MIx
Initialisation du spi
//void PeripheralInit_SPI1_Master(){
GPIO_InitTypeDef GPIO_InitDef;
SPI_InitTypeDef SPI_InitDef;
Initialisation spi et
GPIO_StructInit(&GPIO_InitDef);
SPI_StructInit(&SPI_InitDef); gpio
// initialize clocks
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA,
ENABLE); Initialisation horloge
// do not initialize A4/SS because a software SS will be used
// initialize A5/SCK alternate function push-pull (50 MHz)
GPIO_InitDef.GPIO_Pin = GPIO_Pin_5;
GPIO_InitDef.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitDef);
Configuration du
// initialize A6/MISO input pull-up (50MHz)
GPIO_InitDef.GPIO_Pin = GPIO_Pin_6; master et slave
GPIO_InitDef.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitDef);
// initialize A7/MOSI alternate function push-pull (50 MHz)
GPIO_InitDef.GPIO_Pin = GPIO_Pin_7;
GPIO_InitDef.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitDef);
SPI_InitDef.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitDef.SPI_Mode = SPI_Mode_Master;
SPI_InitDef.SPI_DataSize = SPI_DataSize_8b; // 8-bit transactions Configuration du spi
SPI_InitDef.SPI_FirstBit = SPI_FirstBit_MSB; // MSB first
SPI_InitDef.SPI_CPOL = SPI_CPOL_Low; // CPOL = 0, clock idle low
SPI_InitDef.SPI_CPHA = SPI_CPHA_2Edge; // CPHA = 1
SPI_InitDef.SPI_NSS = SPI_NSS_Soft; // use software SS
SPI_InitDef.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; // APB2 72/64 = 1.125 MHz
// SPI_InitDef.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; // APB2 72/256 = 0.28 MHz
// SPI_InitDef.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; // APB2 72/16 = 4.5 MHz
SPI_InitDef.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitDef);
SPI_Cmd(SPI1, ENABLE);
}
13
14
Merci beaucoup pour votre attention !