Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

protocole Spi



  1. #1
    stage

    protocole Spi


    ------

    Re : conception mémoire amovible
    bonjour,
    Je dois réaliser une communication SPI entre un pic 18f4550 et une mémoire EEPROM M95256. J'ai fini les câblages et j'arrive aussi à envoyer des données. Mais je n'arrive toujours pas à les lire. La fonction readspi me renvoit toujours '0'. Savez vous ce que je dois faire? Voici mon code:
    #include <p18f4550.h>
    #include <spi.h>

    void init_spi(void)
    {
    DDRAbits.RA5=0; //RA5 en sortie
    PORTAbits.RA5=1; // CS est à l'état haut sélectionne l'appareil
    DDRBbits.RB1=0; //SCK en sortie,le signal d'horloge
    DDRBbits.RB0=1; //port sdi du pic en entrée, RBO est relié à la sortie de l'EEPROM
    PORTBbits.RB0=0;
    PORTBbits.RB1=0; //RB1 est relié à l'horloge
    DDRCbits.RC7=0; //SD0 en sortie est relié à l'entrée de l'EEPROM
    PORTCbits.RC7=0;
    PIR1bits.SSPIF=0; // SSPIF teste si une émission est terminée ou non
    SSPSTAT=0x40; // l'envoi des données se fera sur front montant
    SSPCON1=0x20; // configure SCK, SDO, SDI et CS en port série,l'horloge est à la fréquence du pic/4
    }
    void out_spi(int outchar) // envoi une donnée à l'EEPROM
    {
    SSPBUF=outchar;
    while (!PIR1bits.SSPIF); // attend la fin de l'émission
    }
    void eeprom_write_enable(void) //autorise les instructions d'écriture
    {
    PORTAbits.RA5=0;
    WriteSPI(SPI_WREN);
    PORTAbits.RA5=1;
    }

    void eeprom_write(int adresse,unsigned char mem_data)
    {
    unsigned char fort=0,faible=0;
    fort=adresse>>8; // masque les poids faible
    faible=adresse & 0x00FF; // masque les poids forts
    eeprom_write_enable();

    PORTAbits.RA5=0;//SELECTION DE L APPAREIL
    WriteSPI(SPI_WRITE); //envoi l'instruction d'écriture
    WriteSPI(fort); //envoi les 8 premiers bits d'adresse
    WriteSPI(faible); //envoi les bits de poids faible
    WriteSPI(mem_data); //envoi la donnée
    PORTAbits.RA5=1;
    }

    unsigned char eeprom_read(int adresse)
    {
    unsigned char mem_data=0,fort=0,faible=0;;
    fort=adresse>>8; // masque les poids faible
    faible=adresse & 0x00FF; // masque les poids forts
    PORTAbits.RA5=0;
    WriteSPI(SPI_READ); //envoi l'instruction de l'écriture
    WriteSPI(fort); //envoi les 8 premiers bits d'adresse
    WriteSPI(faible); //envoi les bits de poids faible
    mem_data=ReadSPI();
    //PORTAbits.RA5=1;
    return mem_data;
    }
    void main ()
    {
    unsigned char resultat=0;
    init_spi();
    eeprom_write(0x21,0x11); // écrire 11h à l'adresse 21h
    resultat=eeprom_read(0x21); // lire à l'adresse 21h
    }

    L'oscilloscope montre bien que je reçois quelque chose en sortie , cependant, le readspi me renvoit toujours 0. Pourriez-vous m'aider?

    -----

  2. #2
    EmKa69

    Re : protocole Spi

    Bonjour,
    est-ce que tu es sur que le registre
    PIR1bits.SSPIF=0; // SSPIF teste si une émission est terminée ou non
    doit etre utilisé en protocole spi

  3. #3
    antoineleclercq150687

    Re : protocole Spi

    Bonjour,

    J'ai le même souci concernant le protocole SPI.

    Maitre - Esclave c'est parfait ! J'arrive à enregistrer les 4 octet à envoyer la où il faut. Par contre Esclave - Maîre, je reçois tout est n'importe quoi ....

Discussions similaires

  1. Spi
    Par Martintin dans le forum Électronique
    Réponses: 18
    Dernier message: 31/05/2007, 23h47
  2. SPI et USB
    Par piednoir dans le forum Électronique
    Réponses: 0
    Dernier message: 24/02/2007, 08h48
  3. SPI via IR ?
    Par Tix dans le forum Électronique
    Réponses: 2
    Dernier message: 17/08/2006, 10h44
  4. port SPI
    Par Martintin dans le forum Électronique
    Réponses: 2
    Dernier message: 04/08/2006, 11h46
  5. Débouchés en SPI?
    Par Coucouyou13 dans le forum Orientation après le BAC
    Réponses: 3
    Dernier message: 23/07/2006, 13h10
Découvrez nos comparatifs produits sur l'informatique et les technologies.