SPI Master Complet (Mode configurable)

Avancé
Se connecter →
00:00
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 :

GenericTypeDéfautDescription
g_MODE_SPInatural3Mode SPI (0 à 3). Les bits (1) et (0) de sa conversion 2 bits donnent CPOL et CPHA
g_CK_PER_HF_SPIpositive3Nombre de coups d'horloge système par demi-période d'horloge SPI
g_SHIFT_SPI_CLKpositive2Décalage de o_sck par rapport à l'horloge interne (en ticks). Doit être < g_CK_PER_HF_SPI - 1
g_NB_SLAVEpositive1Nombre d'esclaves SPI
g_DATA_2RC_SIZEpositive32Taille max des données à recevoir (bits)
g_DATA_2SD_SIZEpositive32Taille 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
SignalDirectionLargeurDescription
i_clkEntrée1Horloge système
i_rstEntrée1Reset synchrone actif haut
o_sckSortie1Horloge SPI (décalée de g_SHIFT_SPI_CLK ticks)
o_ss_nSortieg_NB_SLAVESlave Select actif bas
i_misoEntrée1Master In Slave Out
o_mosiSortie1Master Out Slave In ('Z' quand inactif)
o_data_rec_validSortie1Pulse 1 cycle : données reçues valides
o_data_receivedSortieg_DATA_2RC_SIZEDonnées reçues
o_frame_full_okSortie1Pulse 1 cycle : trame complète
i_spi_com_rqstEntréeg_NB_SLAVERequête de communication (1 bit par esclave, pulse 1 cycle)
i_data_2sendEntréeg_DATA_2SD_SIZEDonnées à émettre
i_data_2send_sizeEntréef_log2(g_DATA_2SD_SIZE)Nombre de bits à émettre
i_data_2rec_sizeEntréef_log2(g_DATA_2RC_SIZE)Nombre de bits à recevoir