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?
-----