Bonjour à tous,
je possède un dsPIC33F et une MMC : mon but est simplement de lire et d'écrire dans cette dernière par une liaison SPI.
J'ai beau avoir parcouru internet dans son intégralité, je n'ai pas trouvé de solution.
/****************************** *********************/
#include "p33fxxxx.h"
#include "header.h"
char alpha;
int init_MMC(void)
{
tempo2us(500); // attendre 1 ms
PORTBbits.RB13=1; // CS à état haut
PORTBbits.RB12=1; // Data Input à l'éat haut
tempo2us(4); // attendre 80 coups d'horloge
// 20 Mips > 1/20*10^6 = 50*10^-9 > *160 (nb d'instructions pour
// faire 80 cycles d'horloge) = 8 us
PORTBbits.RB13=1; // CS à état haut : déselection du device
WriteSPI1(0xFF);
PORTBbits.RB13=0; // CS à état bas : selection du device
do{
tempo2us(10);
WriteSPI1(0x40); // envoie de CMD0
WriteSPI1(0x00); // 40,00,00,00,00,95
WriteSPI1(0x00);
WriteSPI1(0x00);
WriteSPI1(0x00);
WriteSPI1(0x95); // Reset effectué
}while(ReadSPI1()!=0x01); // attente de 0x01 : la carte est en mode idle
envoi(0x0005);
PORTBbits.RB13=0; // CS à état bas : selection du device
do{
WriteSPI1(0x41); // envoie de CMD1
WriteSPI1(0x00); // 41,00,00,00,00,00
WriteSPI1(0x00);
WriteSPI1(0x00);
WriteSPI1(0x00);
WriteSPI1(0x00);
}while(ReadSPI1()!=0x0000); // attente que la carte soit prête
envoi(0x0006);
return 0;
}
/****************************** ******************/
La MMC ne répond pas à l'initialisation (RESET).
PS. Si la fonction envoi() apparait c'est que mon debugger ne fonctionne plus : c'est pour moi un moyen de savoir où en est mon programme...
-----