[Programmation] Problème Bus SPI
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Problème Bus SPI



  1. #1
    PierreBoss

    Problème Bus SPI


    ------

    Bonjour,

    Je réalise un stage dans une entreprise et je rencontre un problème avec les bus SPI. Voici la datasheet du microcontrôleur avec lequel je travail : https://ww1.microchip.com/downloads/..._Datasheet.pdf (page 676 à 707 pour la partie SPI)

    J'aimerai réaliser un transfert de 5 bytes par le biais d'un bus SPI mais mon soucis c'est que le Chip Select remonte entre les bytes...

    Voici ce que j'obtiens quand j'utilise mon oscilloscope :

    Nom : SDS00001.png
Affichages : 140
Taille : 26,8 Ko

    J'aimerai que la courbe violette (CS) reste bas pendant le transfert de tous les bytes (courbe jaune).

    Voici les mon initialisation de mon bus SPI :

    Code:
    /* Configure an SPI peripheral. */
    spi_enable_clock(SPI0);
    
    spi_disable(SPI0);
    spi_reset(SPI0);
    	
    /* Permet de gérer le NPSC mais il est déjà géré par les fonction EVE */
    //spi_set_lastxfer(SPI0);
    spi_set_master_mode(SPI0);
    	
    spi_disable_mode_fault_detect(SPI0);
    	
    //spi_set_variable_peripheral_select(SPI0);
    spi_set_peripheral_chip_select_value(SPI0, SPI_CHIP_SEL);
    
    spi_set_clock_polarity(SPI0, SPI_CHIP_SEL, SPI_CLK_POLARITY);
    spi_set_clock_phase(SPI0, SPI_CHIP_SEL, SPI_CLK_PHASE);
    	
    spi_set_bits_per_transfer(SPI0, SPI_CHIP_SEL, SPI_CSR_BITS_8_BIT);
    spi_set_baudrate_div(SPI0, SPI_CHIP_SEL, (sysclk_get_peripheral_hz() / gs_ul_spi_clock));
    	
    spi_enable(SPI0);
    Voici ma fonction qui déclenche les transferts de bytes :

    Code:
    uint8_t ftData8;
    
    EVE_cs_set(); //Cs at 0
    
    spi_transmit_32(...); //Make 4 spi_transmit(data)
    ftData8 = spi_receive(0x00); /* read data byte by sending another dummy byte thank to spi_transmit(data)*/
    
    EVE_cs_clear();	//Cs at 1
    
    return ftData8;	/* return byte read */
    Et voici enfin ma fonction spi_transmit(data) qui permet les transferts :

    Code:
    static inline uint8_t spi_transmit(uint8_t data)
    {	
    	uint8_t data_send = SPI_TDR_TD(data);
    	
    	//Transmission
    	while ((SPI0->SPI_SR & SPI_SR_TDRE) == 0);
    	
    	SPI0->SPI_TDR = data_send;
    	
    	//Read
    	while ((SPI0->SPI_SR & SPI_SR_RDRF) == 0);
    	
    	uint8_t data_read = SPI0->SPI_RDR;
    	
    	return data_read & SPI_RDR_RD_Msk;
    }
    Entre les transfert de bytes je ne demande jamais à ce que CS reviennent à l'état haut, je ne sais donc pas comment régler ce soucis...

    -----

  2. #2
    umfred

    Re : Problème Bus SPI

    page 703, bits CSNAAT ou/et CSAAT du registre SPI_CSRx

  3. #3
    PierreBoss

    Re : Problème Bus SPI

    Thank you man... I should read more carrefuly the datasheet !

Discussions similaires

  1. probleme pour configurer mes interfaces sur linux ( probleme assez théorique)
    Par docEmmettBrown dans le forum Internet - Réseau - Sécurité générale
    Réponses: 1
    Dernier message: 31/07/2023, 21h07
  2. Remédier à un problème de chauffage quand les pros ne suffisent à résoudre le problème
    Par Comme vous dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 2
    Dernier message: 14/08/2020, 08h59
  3. Problème de majoration - Discrétisation d'un problème de Dirichlet homogène pénalisé
    Par sknbernoussi dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 30/01/2015, 08h13
  4. Réponses: 2
    Dernier message: 04/12/2012, 14h08
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...