SPI Master Complet (Mode configurable)
Avancé01Fonctionnement
Le module implémente un maître SPI configurable supportant les 4 modes SPI (0 à 3) via les paramètres CPOL et CPHA dérivés du generic g_MODE_SPI.
Une transaction est déclenchée par i_spi_com_rqst. Le module gère la sérialisation TX (MSB first), la désérialisation RX, la génération d'horloge SPI et la sélection d'esclave. Les tailles TX et RX sont indépendantes et configurables par transaction.
Génériques :
| Generic | Type | Défaut | Description |
|---|---|---|---|
g_MODE_SPI | natural | 3 | Mode SPI (0 à 3). Les bits (1) et (0) de sa conversion 2 bits donnent CPOL et CPHA |
g_CK_PER_HF_SPI | positive | 3 | Nombre de coups d'horloge système par demi-période d'horloge SPI |
g_SHIFT_SPI_CLK | positive | 2 | Décalage de o_sck par rapport à l'horloge interne (en ticks). Doit être < g_CK_PER_HF_SPI - 1 |
g_NB_SLAVE | positive | 1 | Nombre d'esclaves SPI |
g_DATA_2RC_SIZE | positive | 32 | Taille max des données à recevoir (bits) |
g_DATA_2SD_SIZE | positive | 32 | Taille max des données à émettre (bits) |
L'horloge SPI est dérivée de l'horloge système par division, avec une demi-période de g_CK_PER_HF_SPI cycles. Le mode SPI détermine la polarité et la phase de l'horloge. L'horloge de sortie o_sck est décalée de g_SHIFT_SPI_CLK cycles par rapport à l'horloge interne.
La transaction démarre sur i_spi_com_rqst. Le module sélectionne l'esclave, sérialise les données TX, désérialise les données RX et signale la fin par o_data_rec_valid. Pendant la transmission, o_spi_busy='1'.
02Interface
| Signal | Direction | Largeur | Description |
|---|---|---|---|
i_clk | Entrée | 1 | Horloge système |
i_rst | Entrée | 1 | Reset synchrone actif haut |
o_sck | Sortie | 1 | Horloge SPI (décalée de g_SHIFT_SPI_CLK ticks) |
o_ss_n | Sortie | g_NB_SLAVE | Slave Select actif bas |
i_miso | Entrée | 1 | Master In Slave Out |
o_mosi | Sortie | 1 | Master Out Slave In ('Z' quand inactif) |
o_data_rec_valid | Sortie | 1 | Pulse 1 cycle : données reçues valides |
o_data_received | Sortie | g_DATA_2RC_SIZE | Données reçues |
o_frame_full_ok | Sortie | 1 | Pulse 1 cycle : trame complète |
i_spi_com_rqst | Entrée | g_NB_SLAVE | Requête de communication (1 bit par esclave, pulse 1 cycle) |
i_data_2send | Entrée | g_DATA_2SD_SIZE | Données à émettre |
i_data_2send_size | Entrée | f_log2(g_DATA_2SD_SIZE) | Nombre de bits à émettre |
i_data_2rec_size | Entrée | f_log2(g_DATA_2RC_SIZE) | Nombre de bits à recevoir |