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

Spi



  1. #1
    Martintin

    Question Spi


    ------

    Bonjour à tous!
    Je travaille sur un pic18f4455 et je désire communiquer avec une mémoire MMC par le port SPI.
    J'utilise le programme donné par microchip ici.
    Ce programme utilise la fonction spi_read (SPI_READ(0xFF)). Je n'arrive pas à trouver cette fonction et du coup mon programme ne marche pas.
    Quelqu'un aurait-il le code ou saurait-il ou le trouver svp.
    Je vous remercie de votre aide, bonne journée à tous.
    Martin

    -----
    Dernière modification par Martintin ; 09/08/2006 à 13h24.

  2. Publicité
  3. #2
    Martintin

    Re : Spi

    Je vais essayer d'etre plus complet dans l'explication de mon problème.
    Lors de l'initialisation de ma MMC, il faut que j'envoie une suite de caractère afin de la lancer en mode SPI.
    A la suite de cet envoi la mmc envoie sur le port SPI un accusé de réception (valeur 0x01). A l'oscilloscope tout à l'air de se passer comme il faut, je vois meme la réponse de la mmc.
    Mais il est impossible d'acquérir dans le registre SSPBUF les données présentent sur le bus!!!
    Quelqu'un pourrait-il me dire comment on se débrouille pour lire sur le bus spi?
    Je vous remercie de votre aide. M.

  4. #3
    umfred

    Re : Spi

    La fonction SPI_READ qui se trouve dans ton fichier, est en faite une fonction utilisable dans le compilateur utilisé pour écrire le code que tu as téléchargé (CCS C Compilier dont voici le manuel (voir page 216 pour cette fonction)).

  5. #4
    Martintin

    Re : Spi

    Merci Umfred!
    Décidemment je peux compter sur toi, merci encore.
    M.

  6. #5
    hunti93

    Re : Spi

    Bonjour à tous! je vien de lire cette page sur le SPI. je voudrait savoir si, il est possible que vous m'envoyer un exemple de trame SPI ou dans lequelle la MMC envoit des donnée vers l'µC.
    Car je suis exactement dans la même situation, mise a part
    que je tape mon langage C dans Code vision AVR.
    merci d'avance.

  7. A voir en vidéo sur Futura
  8. #6
    umfred

    Re : Spi

    Dans Codevision AVR, il y a la fonction spi() (tout simplement) qui permet d'utiliser la fonction SPI. Tu trouvera un exemple de son utilisation dans le manuel d'utilisation (p173) de codevision AVR, téléchargeable ici.
    Si tu veux plus de détail sur ce qu'il faut envoyer comme données à la MMC, consulte sa datasheet, il doit y avoir les diverses instructions qu'elle accepte

  9. Publicité
  10. #7
    hunti93

    Re : Spi

    re bonjour,
    justement j'ai utilisé cette fonction [spi()] (pour réception et émission). Sur l'oscilloscope je voi bien la trame d'émission que je veux (en SI). Mais en réception c'est juste la ou ça se gatte. Précisement j'envoie dans ma carte MMC (AT45DCB002) ke des "10101010...". et quand je lui demande de me renvoyer les données il me revoie que des "0".
    Pourtant je j'applique bien ce que me dit la doc de la carte MMC, c'est à dire un octet de commande, un paquet d'octet et demie pour la mémoire tampon, 2 octet et demi pour la page de mémoire et la DATA.

    bref je suis un peu perdu :/. (mais merci beaucoup pour ce debut de réponse).

  11. #8
    hunti93

    Re : Spi

    escuse moi des fautes, j'ai taper un peu trop vite

  12. #9
    umfred

    Re : Spi

    mets nous le code que tu utilises pour faire la lecture et l'écriture (ainsi qu'un lien vers la doc de ta MMC), ça sera plus facile pour comprendre ce qu'il se peut se passer. (enfin j'espère )

  13. #10
    hunti93

    Re : Spi

    Alors voici la Carte en question:
    http://www.atmel.com/dyn/resources/p...ts/doc3257.pdf
    Mais le fonctionnement de la carte est indiquer dans une doc (qui est sont équivalent en CMS) que voici:
    http://www.atmel.com/dyn/resources/p...ts/DOC0807.PDF
    ensuite mon programme (que j'ai taper dans code vision est le suivant):

    //Cractère déclarer que j'utilise:
    int i;
    char BUFFERT[5]={0x84,0x00,0x00,0x00,0xAA};
    char READT[6]={0xD4,0x00,0x00,0x00};

    // SPI initialization
    // SPI Type: Master
    // SPI Clock Rate: 1000,000 kHz
    // SPI Clock Phase: Cycle Half
    // SPI Clock Polarity: Low
    // SPI Data Order: MSB First
    SPCR=0x50;
    SPSR=0x00;

    WRITEBUFFERSD() //ECRITURE dans le buffer
    {
    PORTC.0=0; //cette broche est relié au /CS
    delay_us(1);
    for (i=0; i<5; i++) {spi(BUFFERT[i]);};
    delay_us(1);
    PORTC.0=1;
    }

    READBUFFERSD() //lecture du buffer
    {
    PORTC.0=0;
    delay_us(1);
    for (i=0; i<7; i++) {spi(READT[i]);};
    delay_us(1);
    PORTC.0=1;
    delay_ms(2);

    }

    Voila j'espere que cela est compréhensible.
    Merci de vous intéresser à mon cas en tous cas .

  14. #11
    hunti93

    Re : Spi

    je rajoute une précision:
    Dans ce cas ici j'essaye simplement d'écrire 0xAA a l'adresse 0 du buffer et je la relis ensuite. c'est la que je me suis apercut que à l'oscilloscope ma commande était transmit a merveille mais que la réception est foireuse .

  15. #12
    hunti93

    Re : Spi

    pardonne moi mais g gaffer sur le lien de la mémoire équivalente: c'est celle ci
    http://seniordesign.engr.uidaho.edu/...amm/memory.pdf
    désolé.

  16. Publicité
  17. #13
    umfred

    Re : Spi

    essaie en corrigeant ainsi
    //Cractère déclarer que j'utilise:
    int i;
    char BUFFERT[5]={0x84,0x00,0x00,0x00,0xAA};
    char READT[5]={0xD4,0x00,0x00,0x00,0x00};
    char resultat;

    // SPI initialization
    // SPI Type: Master
    // SPI Clock Rate: 1000,000 kHz
    // SPI Clock Phase: Cycle Half
    // SPI Clock Polarity: Low
    // SPI Data Order: MSB First
    SPCR=0x50;
    SPSR=0x00;

    WRITEBUFFERSD() //ECRITURE dans le buffer
    {
    PORTC.0=0; //cette broche est relié au /CS
    delay_us(1);
    for (i=0; i<5; i++) {spi(BUFFERT[i]);};
    delay_us(1);
    PORTC.0=1;
    }

    READBUFFERSD() //lecture du buffer
    {
    PORTC.0=0;
    delay_us(1);
    for (i=0; i<5; i++) {spi(READT[i]);};
    resultat=spi(0);
    delay_us(1);
    PORTC.0=1;
    delay_ms(2);

    }
    En fait, il y avait une différence entre la taille de READT et son indice dans le for (dépassement de capactié de READT)
    Et d'après la datasheet, il faut 8 bits du code de commande, 14 bits sans importance, 10 bits d'adresses, et 8 bits sans importance, ensuite on lit le SDO (voir le chrono de la page 17 de la datasheet de la mémoire.

  18. #14
    hunti93

    Re : Spi

    je te remercie je v essayer ce code. je te tiens au courant.
    Bonne soirée!

  19. #15
    hunti93

    Re : Spi

    Bonsoir,
    Voila j'ai donc éffectuer mes tests avec le code que tu ma conseillier mais malheureusement je n'obtiens toujour pas mais fameux "10101010". MAIS JE RECOIT QUAND MEME quelque chose . "10000000" en réponse alors, je me pose la question si par hasard ce ne serait po une sorte de réponse (erreur ou autre) de ma mémoire... enfin je continue a chercher. Grand merci a toi

  20. #16
    hunti93

    Re : Spi

    Bonjour!
    Je voudrai savoir a quoi sert le "0" de spi("0") qui correspond a la commande de lecture spi.
    Que ce passe-t-il si je change ce chiffre?
    Merci d'avance

  21. #17
    sly535

    Re : Spi

    bonsoir, je met en ligne en fin de semaine une librairie pour codevision sur la gestion de mmc et sdcard

    http://www.atmicroprog.com/forum/index.php

    A bientot.

  22. #18
    hunti93

    Re : Spi

    merci beaucoup je vais regarder ça de très pres .

  23. Publicité
  24. #19
    sly535

    Re : Spi

    bonsoir,

    voila c'est fait et ca se trouve ici : http://www.atmicroprog.com/forum/viewtopic.php?t=667

    ++

Discussions similaires

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