MMC et dsPIC
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

MMC et dsPIC



  1. #1
    invite29c39970

    Arrow MMC et dsPIC


    ------

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

    -----

  2. #2
    invite29c39970

    Arrow Re : MMC et dsPIC

    ... c'est bien ce que je craignais, peu de monde a des connaissances là-dessus. Et les forums et infos sont déjà rares sur le net..

    Même un tout petit lien serait le bien-bien-bien- bienvenu !!!



    P.S. :

    Si vous avez un programme avec des erreurs, postez-le : on y réfléchira ensembles.

  3. #3
    RISC

    Re : MMC et dsPIC

    Bonjour,

    Il existe 2 notes d'application pour gérer les cartes MMC et SD avec les dsPIC33 :

    AN1003 : http://ww1.microchip.com/downloads/e...es/MCHPMSD.zip

    AN1045 : http://www.microchip.com/stellent/id...pnote=en532040

    a+

  4. #4
    Ph3niX

    Re : MMC et dsPIC

    Citation Envoyé par blond0 Voir le message
    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
    Je sais pas comment est codé la fonction SPI, mais tu es sur que pendant des 8uS tu a un clock sur la MMC ??

    Sans ça ca ne marche pas ! (en tout cas sur les SD mais je pense que MMC c'est du même...)

  5. A voir en vidéo sur Futura
  6. #5
    invite29c39970

    Re : MMC et dsPIC

    et bien effectivement cela n'envoyait pas sur la SPI donc j'ai remplacé ce segment...
    En outre, j'ai du tester toutes les fonctions SPI (écriture et lecture) que j'ai trouvé sur internet et rien ne marche. J'ai vérifié que la MMC en elle meme n'avait pas de problème et j'arrive à la lire avec un PC...

    Je compte sur vous pour m'aider parce que la je bloque complet !

    PS:merci d'avoir répondu

  7. #6
    invite6cb8b74b

    Re : MMC et dsPIC

    Bonjour,
    1/ Avant d'envoyer ta CMD0, il faut que tu envoies au mini 80 tops d'horloge mais pour cela il faut que tu émettes qquechose sur ta liaison SPI sinon pas de top d'horloge et oui ! => donc il faut que tu aies une boucle d'émission d'au moins 8 caractères (8 fois WriteSPI1(0xFF)) avec le CS à 1 or dans ton code tu ne fais que attendre... ca génére pas de top d'horloge sur ta SPI d'attendre
    2/ Ensuite normalement il faut attendre 100ms pour la stabilisation de la tension d'alim de la carte => ca c'est la norme, mais je pense que ca peut passer sans, a voir => moi je les attends ces 100ms et j'ai jamais de pb.
    3/ émission de la CMD0 => Je ne sais pas comment est codé ReadSPI1 mais normalement dans cette proc il doit y avoir une boucle d'attente qui s'arrête lorsque la réponse de la carte présente un bit7 à '0'.
    Dans tous les cas ta boucle, comme elle est codée n'est pas bonne car toi, tu boucles sur l'émission de la CMD0 et c'est pas bon.
    4/ même remarque sur la boucle sur la CMD1, c'est pas bon.

    Sinon l'enchainement est OK, c.a.d 80 top d'horloge, puis [attente 100ms], puis CMD0, puis CMD1.
    Je pense qu'en l'état tu vois jamais passer le envoi(5) si ?
    A+
    JC

  8. #7
    invite29c39970

    Arrow Re : MMC et dsPIC

    Salut !
    J'ai enfin fait fonctionner cette carte et c'est très agréable. Cependant, j'ai encore un problème : je dois arriver à écrire 5 données en un temps très court. C'est après que je rencontre mon soucis : cette écriture doit être générique et entre une première écriture et une autre, je dois énormément attendre (500Hz!!!). Entre deux écritures il n'y a que conversion analogique->numérique.

    En réalité je dois impérativement repasser par l'initialisation de la carte avant de ré-écrire... je pense que ce n'est pas la solution.

    Pouvez-vous me dire comment faire ?!

    PS:Merci pour les réponses

  9. #8
    invite6cb8b74b

    Re : MMC et dsPIC

    Bonjour,
    [bond0] => je dois arriver à écrire 5 données en un temps très court

    Sur les cartes SD ou MMC on n'écrit que des secteurs entiers (512 octets). Tu n'as donc pas trop le choix, il te faut définir un buffer de 512 octets que tu vas remplir au fur et a mesure de tes échantillonnages et une fois les 512 octets prêts, tu émets ta commande d'écriture.

    L'attente énorme donc tu parles (500Hz) n'a aucun sens pour ta carte puisque tant que tu n'écrits pas, il n'y a aucun top d'horloge vers la carte.
    A+
    JC

  10. #9
    invite29c39970

    Re : MMC et dsPIC

    Ce dont nous parlons est une acquisition de signaux analogiques, c'est pourquoi j'ai abandonné l'idée dont tu me parles :
    imagine que le temps de remplir le buffer je fasse une acquisition et qu'ensuite j'envoie...
    Il ne s'agirait plus alors d'une acquisition crédible : le temps de l'envoi je loupe des données! Les échantillons ne sont donc pas pris à des intervalle égaux.

    Merci quand même.
    Je pense actuellement à passer l'acquisition en interruption sur TIMER et à faire l'envoi ensuite...

    PS: J'ai une grande capacité de stockage sur MMC donc je ne me soucis pas de la place et je rempli de '0' le reste des 512 octets.

  11. #10
    RISC

    Re : MMC et dsPIC

    Salut,

    Avec les dsPIC33 aucun PB de temps réel grace aux DMA.
    D'ailleurs les canaux de DMA sont utilisables pour les périphériques SPI et aussi pour le convertisseur A/N. Pendant ce temps la le processeur se tourne les pouces ;=)
    La mémoire double port a une taille max de 2KB dans les dsPIC33 (cela dépend du modèle que tu utilises.
    Les périphériques gérables par DMA peuvent écrire/lire SANS EXECUTION LOGICIELLE !!! C'est imbattable et en plus cela se fait en parallèle du micro qui continue a exécuter des instructions.

    Ton CAN pourrais donc écrire des blocs de 512 octets et seulement là tu pourrais écrire le bloc dans la carte SD ;=)

    a+

Discussions similaires

  1. Programmation dsPIC sous mikroC for dsPIC
    Par invitec63490c6 dans le forum Électronique
    Réponses: 8
    Dernier message: 10/03/2009, 08h31
  2. dsPIC et USB
    Par Fouinard dans le forum Électronique
    Réponses: 4
    Dernier message: 05/05/2008, 21h55
  3. achat dsPIC
    Par ABN84 dans le forum Électronique
    Réponses: 2
    Dernier message: 31/08/2007, 12h41
  4. Programmateur dsPIC
    Par nams2590 dans le forum Électronique
    Réponses: 4
    Dernier message: 26/02/2007, 00h10
  5. programmateur de dsPIC
    Par invite0e36b18a dans le forum Électronique
    Réponses: 0
    Dernier message: 11/05/2006, 15h48
Découvrez nos comparatifs produits sur l'informatique et les technologies.