0% ont trouvé ce document utile (0 vote)
40 vues29 pages

Bus SPI

Le bus SPI (Serial Peripheral Interface) est un protocole de communication maître-esclave développé par Motorola dans les années 1980, permettant une transmission série synchrone full duplex. Il utilise des lignes de données, d'horloge et de sélection pour interconnecter un maître et un ou plusieurs esclaves, avec des vitesses de transfert dépendant des composants utilisés. Le document présente également des exemples d'initialisation et de fonctionnement du bus SPI sur des microcontrôleurs spécifiques comme le TMS320LF2407A et le TMS320F28335.

Transféré par

vejifi8753
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
40 vues29 pages

Bus SPI

Le bus SPI (Serial Peripheral Interface) est un protocole de communication maître-esclave développé par Motorola dans les années 1980, permettant une transmission série synchrone full duplex. Il utilise des lignes de données, d'horloge et de sélection pour interconnecter un maître et un ou plusieurs esclaves, avec des vitesses de transfert dépendant des composants utilisés. Le document présente également des exemples d'initialisation et de fonctionnement du bus SPI sur des microcontrôleurs spécifiques comme le TMS320LF2407A et le TMS320F28335.

Transféré par

vejifi8753
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Chapitre II.

Les bus de communication


capteurs

III. Le bus SPI

MC43 Mesures et Capteurs 1


III. Bus SPI
III.1 Présentation générale
 SPI : Serial Peripheral Interface
 Développé dans les années 1980 par Motorola
 Transmission série synchrone full duplex
 Communications maître esclave
 Interconnexion par 2 lignes de données, 1 ligne d’horloge et
1 ligne de sélection
 donnée SPISIMO (Slave input / Master output)
 donnée SPISOMI (Slave output / Master input)
 horloge SPICLK (pilotée par le maître)
 sélection SPISTE (Slave Transmit Enable)

MC43 Mesures et Capteurs 2


III. Bus SPI
III.1 Présentation générale
 La fréquence de transfert est limitée uniquement par les
caractéristiques électriques des composants utilisés
 TMS320LF2407A : 10MHz max; TMS320F28335 : 18,75MHz max
 Un seul esclave est activé à la fois (pas de conflit ni
d’arbitrage)
 Connexion de plusieurs esclaves par pilotage de plusieurs
signaux de sélection SPISTE (signaux SS : Slave Select)
 Pas d’acquittement
 Format des données libre de 1 à 16 bits
 déphasage SPIDAT/SPICLK réglable (suivant les propriétés
du composant esclave)
MC43 Mesures et Capteurs 3
III. Bus SPI
III.1 Présentation générale
 Connection maître-esclave
lignes de
Maître données Esclave

registre de
réception

registre de
transmission

ligne ligne
d’activation d’horloge
MC43 Mesures et Capteurs 4
III. Bus SPI
III.1 Présentation générale
 Connection maître-esclave

Un maître et un esclave Un maître et plusieurs esclaves

Lignes nSS (Slave Select)


- une seule active à la fois
- réalisées à l’aide d’E/S numériques

MC43 Mesures et Capteurs 5


III. Bus SPI
III.2 Principe de transmission
• Le maître active nSS avant de transmettre et la relâche après la transmission
• La ligne d’horloge est pilotée par le maitre
• Le maître pilote la ligne de données SIMO pour réaliser une écriture (bit de
poids fort en premier)
• L’esclave pilote la ligne de données SOMI pour réaliser une lecture (bit de poids
fort en premier)
• La lecture et l’écriture peuvent se faire simultanément (lignes distinctes)

MC43 Mesures et Capteurs 6


III. Bus SPI
III.2 Principe de transmission
 Modes de configuration de l’horloge
Le positionnement des bits de donnée par
rapport aux cycles d’horloge comporte 4
modes de configuration possibles

Le maître doit être


configuré selon le mode
accepté par l’esclave (à
vérifier dans sa
documentation)

MC43 Mesures et Capteurs 7


III. Bus SPI
III.2 Principe de transmission
Exemple du DAC 12 bits MCP4922 (rising edge with delay)

MC43 Mesures et Capteurs 8


III. Bus SPI
III.2 Principe de transmission
Exemple de signaux de communication

• Ecriture 16 bits
• Mode rising edge with delay
• Horloge à 5 MHz

MC43 Mesures et Capteurs 9


III. Bus SPI
III.3 Exemple du µC TMS320LF2407
Architecture du contrôleur SPI du TMS320LF2407
registre de
réception
registre
d’émission interruptions

lignes de
transmission

MC43 Mesures et Capteurs 10


III. Bus SPI
III.3 Exemple du µC TMS320LF2407
Horloge
Registres
Tailles des mots

Interruption

(3 ≤ SPIBRR ≤ 127)

Fbauds = Fcpu/4
Si SPIBRR=0,1 ou 2
Communications

MC43 Mesures et Capteurs 11


III. Bus SPI
III.3 TMS320LF2407
Interruptions

Interruption SPIINT déclenchée dans


les deux cas suivants:
- donnée reçue (disponible dans
SPIRXBUF)
- donnée transmise (SPITXBUF
envoyé)

MC43 Mesures et Capteurs 12


III. Bus SPI
III.3 Exemple du µC TMS320LF2407
Exercice: initialisation du module SPI dans le mode suivant :
• données de 16 bits
• émission uniquement
• fréquence maximale
• positionnement de la donnée sur front montant, horloge
retardée d’½ cycle

MC43 Mesures et Capteurs 13


III. Bus SPI
III.3 Exemple du µC TMS320LF2407

MC43 Mesures et Capteurs 14


III. Bus SPI
III.3 Exemple du µC TMS320LF2407
 Initialisation du module SPI dans le mode suivant :
• données de 16 bits
• émission uniquement
• fréquence maximale
• positionnement de la donnée sur front montant, horloge
retardée d’½ cycle

MC43 Mesures et Capteurs 15


III. Bus SPI
III.3 Exemple du µC TMS320LF2407

// attente SCITXBUF vide

MC43 Mesures et Capteurs 16


III. Bus SPI
III.3 Exemple du µC TMS320LF2407

// Emission et réception d’une donnée de 16 bits


int rxspi(unsigned int x)
{
while(SPISTS & 0x20); // attente SCITXBUF vide (TX BUF FULL FLAG)
SPITXBUF = x;
while(SPISTS & 0x40); // attente fin de transmission (SPI INT FLAG)
return SPIRXBUF;
}

MC43 Mesures et Capteurs 17


III. Bus SPI
III.4 Exemple du TMS320F28335
Architecture du contrôleur SPI du TMS320F28335
FIFO de réception
(16 registres)

registre de
réception interruptions
FIFO d’émission
(16 registres)
registre
d’émission

lignes de
transmission

MC43 Mesures et Capteurs 18


III. Bus SPI
III.4 Exemple du TMS320F28335
Emission et réception de paquets de 8 mots de 16 bits (FIFO / interruptions)
void spi_fifo_init()
{
// Initialize SPI FIFO registers
[Link]=0; // Reset SPI
[Link]=0x001F; // 16-bit character, Loopback mode (test), CLKPOL=0
[Link]=0x0017; // Int. enabled, Master/Slave XMIT enabled, CLKPHS=0
[Link]=0; // Baud rate = LSPCLK/4 = 9,375MHz (default)
[Link]=0xC028; // RST SPI & TXFIFO, Enable FIFO's, TX FIFO level=8
[Link]=0x0028; // RST RXFIFO, RX FIFO level=8
[Link]=0x00;
[Link]=0x0010;
[Link]=1; // Enable SPI
[Link]=1;
[Link]=1;
}

MC43 Mesures et Capteurs 19


III. Bus SPI
III.4 Exemple du TMS320F28335
Emission et réception de paquets de 8 mots de 16 bits (FIFO / interruptions)
void spi_fifo_init()
{
// Initialize SPI FIFO registers
[Link]=0; // Reset SPI
[Link]=0x001F; // 16-bit character, Loopback mode (test), CLKPOL=0
[Link]=0x0017; // Int. enabled, Master/Slave XMIT enabled, CLKPHS=0
[Link]=0; // Baud rate = LSPCLK/4 = 9,375MHz (default)
[Link]=0xC028; // RST SPI & TXFIFO, Enable FIFO's, TX FIFO level=8
[Link]=0x0028; // RST RXFIFO, RX FIFO level=8
[Link]=0x00;
[Link]=0x0010;
[Link]=1; // Enable SPI
[Link]=1;
[Link]=1;
}

MC43 Mesures et Capteurs 20


III. Bus SPI
III.4 Exemple du TMS320F28335
Emission et réception de paquets de 8 mots de 16 bits (FIFO / interruptions)
void spi_fifo_init()
{
// Initialize SPI FIFO registers
[Link]=0; // Reset SPI
[Link]=0x001F; // 16-bit character, Loopback mode (test), CLKPOL=0
[Link]=0x0017; // Int. enabled, Master/Slave XMIT enabled, CLKPHS=0
[Link]=0; // Baud rate = LSPCLK/4 = 9,375MHz (default)
[Link]=0xC028; // RST SPI & TXFIFO, Enable FIFO's, TX FIFO level=8
[Link]=0x0028; // RST RXFIFO, RX FIFO level=8
[Link]=0x00;
[Link]=0x0010;
[Link]=1; // Enable SPI
[Link]=1;
[Link]=1;
}

MC43 Mesures et Capteurs 21


III. Bus SPI
III.4 Exemple du TMS320F28335
Emission et réception de paquets de 8 mots de 16 bits (FIFO / interruptions)
void spi_fifo_init()
{
// Initialize SPI FIFO registers
[Link]=0; // Reset SPI
[Link]=0x001F; // 16-bit character, Loopback mode (test), CLKPOL=0
[Link]=0x0017; // Int. enabled, Master/Slave XMIT enabled, CLKPHS=0
[Link]=0; // Baud rate = LSPCLK/4 = 9,375MHz (default)
[Link]=0xC028; // RST SPI & TXFIFO, Enable FIFO's, TX FIFO level=8
[Link]=0x0028; // RST RXFIFO, RX FIFO level=8
[Link]=0x00;
[Link]=0x0010;
Int. TX FIFO si nb valeur <= 8
[Link]=1; // Enable SPI (soit 16-8=8 places
[Link]=1; disponibles)
[Link]=1;
}

MC43 Mesures et Capteurs 22


III. Bus SPI
III.4 Exemple du TMS320F28335
Emission et réception de paquets de 8 mots de 16 bits (FIFO / interruptions)
void spi_fifo_init()
{
// Initialize SPI FIFO registers
[Link]=0; // Reset SPI
[Link]=0x001F; // 16-bit character, Loopback mode (test), CLKPOL=0
[Link]=0x0017; // Int. enabled, Master/Slave XMIT enabled, CLKPHS=0
[Link]=0; // Baud rate = LSPCLK/4 = 9,375MHz (default)
[Link]=0xC028; // RST SPI & TXFIFO, Enable FIFO's, TX FIFO level=8
[Link]=0x0028; // RST RXFIFO, RX FIFO level=8
[Link]=0x00;
[Link]=0x0010;
Int. RX FIFO si nb valeur >= 8
[Link]=1; // Enable SPI (soit 8 réceptions)
[Link]=1;
[Link]=1;
}

MC43 Mesures et Capteurs 23


III. Bus SPI
III.4 Exemple du TMS320F28335
Emission et réception de paquets de 8 mots de 16 bits (FIFO / interruptions)
void InitSpiaGpio()
{ SPI sur GPIO16,17,18,19 ou 54,55,56,57
EALLOW;
// Enable internal pull-up for the selected pins
// Pull-ups can be enabled or disabled by the user.
[Link].GPIO16 = 0; //Enable pull-up on GPIO16 (SPISIMOA)
[Link].GPIO17 = 0; //Enable pull-up on GPIO17 (SPISOMIA)
[Link].GPIO18 = 0; //Enable pull-up on GPIO18 (SPICLKA)
[Link].GPIO19 = 0; //Enable pull-up on GPIO19 (SPISTEA)
// Set qualification for selected pins to asynch only
// This will select asynch (no qualification) for the selected pins.
[Link].GPIO16 = 3; // Asynch input GPIO16 (SPISIMOA)
[Link].GPIO17 = 3; // Asynch input GPIO17 (SPISOMIA)
[Link].GPIO18 = 3; // Asynch input GPIO18 (SPICLKA)
[Link].GPIO19 = 3; // Asynch input GPIO19 (SPISTEA)
// Configure SPI-A pins using GPIO regs
// This specifies which of the possible GPIO pins will be SPI functional pins.
[Link].GPIO16 = 1; // Configure GPIO16 as SPISIMOA
[Link].GPIO17 = 1; // Configure GPIO17 as SPISOMIA
[Link].GPIO18 = 1; // Configure GPIO18 as SPICLKA
[Link].GPIO19 = 1; // Configure GPIO19 as SPISTEA
EDIS;
}
MC43 Mesures et Capteurs 24
III. Bus SPI
III.4 Exemple du TMS320F28335
Emission et réception de paquets de 8 mots de 16 bits (FIFO / interruptions)
Initialisation des vecteurs d’interruption (fonctions d’int.) et autorisation
// Interrupts that are used in this example are re-mapped to
// ISR functions found within this file.
EALLOW;// This is needed to write to EALLOW protected registers
[Link] = &spiRxFifoIsr;
[Link] = &spiTxFifoIsr;
EDIS; // This is needed to disable write to EALLOW protected registers

// Step 4. Initialize all the Device Peripherals:


// This function is found in DSP2833x_InitPeripherals.c
// InitPeripherals(); // Not required for this example
spi_fifo_init(); // Initialize the SPI only

// Enable interrupts required for this example


[Link] = 1; // Enable the PIE block
[Link].INTx1=1; // Enable PIE Group 6, INT 1
[Link].INTx2=1; // Enable PIE Group 6, INT 2
IER=0x20; // Enable CPU INT6
EINT; // Enable Global Interrupts

MC43 Mesures et Capteurs 25


III. Bus SPI
III.4 Exemple du TMS320F28335
Emission et réception de paquets de 8 mots de 16 bits (FIFO / interruptions)
Initialisation des vecteurs d’interruption (fonctions d’int.) et autorisation

MC43 Mesures et Capteurs 26


III. Bus SPI
III.4 Exemple du TMS320F28335
Emission et réception de paquets de 8 mots de 16 bits (FIFO / interruptions)
Initialisation des vecteurs d’interruption (fonctions d’int.) et autorisation
// Interrupts that are used in this example are re-mapped to
// ISR functions found within this file.
EALLOW;// This is needed to write to EALLOW protected registers
[Link] = &spiRxFifoIsr;
[Link] = &spiTxFifoIsr;
EDIS; // This is needed to disable write to EALLOW protected registers

// Step 4. Initialize all the Device Peripherals:


// This function is found in DSP2833x_InitPeripherals.c
// InitPeripherals(); // Not required for this example
spi_fifo_init(); // Initialize the SPI only

// Enable interrupts required for this example


[Link] = 1; // Enable the PIE block
[Link].INTx1=1; // Enable PIE Group 6, INT 1
[Link].INTx2=1; // Enable PIE Group 6, INT 2
IER=0x20; // Enable CPU INT6
EINT; // Enable Global Interrupts

MC43 Mesures et Capteurs 27


III. Bus SPI
III.4 Exemple du TMS320F28335
Emission et réception de paquets de 8 mots de 16 bits (FIFO / interruptions)
Fonction d’interruption d’émission (8 places libres en TXFIFO)

__interrupt void spiTxFifoIsr(void)


{
Uint16 i;
for(i=0;i<8;i++)
{
[Link]=sdata[i]; // Send data
}

for(i=0;i<8;i++) // Increment data for next cycle (exemple pour test)


{
sdata[i] = sdata[i]+ 1;
}

[Link]=1; // Clear Interrupt flag


[Link]|=0x20; // Issue PIE ACK (Group 6)
}

MC43 Mesures et Capteurs 28


III. Bus SPI
III.4 Exemple du TMS320F28335
Emission et réception de paquets de 8 mots de 16 bits (FIFO / interruptions)
Fonction d’interruption de réception (8 mots reçus en RXFIFO)

__interrupt void spiRxFifoIsr(void)


{
Uint16 i;
for(i=0;i<8;i++)
{
rdata[i]=[Link];// Read data
}
for(i=0;i<8;i++) // Check received data (exemple pour test)
{
if(rdata[i] != rdata_point+i) error();
}
rdata_point++;
[Link]=1; // Clear Overflow flag
[Link]=1; // Clear Interrupt flag
[Link]|=0x20; // Issue PIE ack (Group 6)
}

MC43 Mesures et Capteurs 29

Vous aimerez peut-être aussi