Utilisation SPI PIC32MX
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 39

Utilisation SPI PIC32MX



  1. #1
    invite3df4a7fe

    Utilisation SPI PIC32MX


    ------

    Bonjour, je viens vers vous car je n'arrive pas à comprendre pourquoi ma liaison SPI ne fonctionne pas

    Je vous explique, j'ai une carte électronique avec un connecteur SD et un PIC32MX795F512L. J'utilise les broches du module SPI 2.

    Voila le schéma :

    Pièce jointe 255836 Pièce jointe 255837

    Oui je sais j'ai fait une belle boulette... La broche SDI du PIC sur la broche SDI de la carte SD et pareil pour SDO

    Pour la programmation, j'utilise la bibliothèque de Microchip Solution qui gère la carte SD.

    Mon problème est que sur la broche CLK, j'ai mon signal mais rien sur la broche SDI et SDO. J'utilise la broche du PIC SDI2 pour envoyer mes données du coup.

    Vous pouvez trouver le code sur le site de Microchip je vous passe les modifs que j'ai faite :

    Fichier hardwareProfile.h
    Code:
    #elif defined MDD_USE_SPI_2
                // Description: SD-SPI Chip Select Output bit
                #define SD_CS               LATGbits.LATG9
                // Description: SD-SPI Chip Select TRIS bit
                #define SD_CS_TRIS          TRISGbits.TRISG9
                
                // Description: SD-SPI Card Detect Input bit
                #define SD_CD               PORTBbits.RB0
                // Description: SD-SPI Card Detect TRIS bit
                #define SD_CD_TRIS          TRISBbits.TRISB0
    
                // Description: SD-SPI Write Protect Check Input bit
                #define SD_WE               PORTBbits.RB1
                // Description: SD-SPI Write Protect Check TRIS bit
                #define SD_WE_TRIS          TRISBbits.TRISB1
                
                // Description: The main SPI control register
                #define SPICON1             SPI2CON
                // Description: The SPI status register
                #define SPISTAT             SPI2STAT
                // Description: The SPI Buffer
                #define SPIBUF              SPI2BUF
                // Description: The receive buffer full bit in the SPI status register
                #define SPISTAT_RBF         SPI2STATbits.SPIRBF
                // Description: The bitwise define for the SPI control register (i.e. _____bits)
                #define SPICON1bits         SPI2CONbits
                // Description: The bitwise define for the SPI status register (i.e. _____bits)
                #define SPISTATbits         SPI2STATbits
                // Description: The enable bit for the SPI module
                #define SPIENABLE           SPI2CONbits.ON
                // Description: The definition for the SPI baud rate generator register (PIC32)
                #define SPIBRG			    SPI2BRG
    
                // Tris pins for SCK/SDI/SDO lines
    
                // Description: The TRIS bit for the SCK pin
                #define SPICLOCK            TRISGbits.TRISG6
                // Description: The TRIS bit for the SDI pin
                #define SPIIN               TRISGbits.TRISG8
                // Description: The TRIS bit for the SDO pin
                #define SPIOUT              TRISGbits.TRISG7
                //SPI library functions
                #define putcSPI             putcSPI2
                #define getcSPI             getcSPI2
                #define OpenSPI(config1, config2)   OpenSPI2(config1, config2)
            #endif
    Main.c

    Code:
    int main(int argc, char** argv) {
    
    
        SYSTEMConfig (SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
    
    
        AD1PCFG = 0xFFFFFFFF;
    
        CNCONbits.ON = 0;
        U3MODEbits.ON = 0;
        U6MODEbits.ON = 0;
        PMCONbits.ON = 0;
        I2C2CONbits.ON = 0;
        I2C4CONbits.ON = 0;
        ETHCON1bits.ON = 0;
        ETHCON2 = 0;
    
    FSFILE * fp; //pointeur sur la structure d?identification du fichier
    char fileName[] = "file.txt";
    char text[20] = "Bonjour!";
    
    
    if (TRUE) //Si carte détectée ?
    {
        if (FSInit())//SD card init
         {
             //ouverture en écriture ou création si fichier inexistant
             fp = FSfopen(fileName,"w");
             aff_txt("Initialisation OK");
    
             if (fp != NULL) //Pas de PB à l?ouverture ?
                {
                     xy_lcd(0,2);
                     aff_txt("Ecriture...");
                     if (FSfwrite (text, 1,8, fp) == 8) //tout a été écrit ?
                     FSfclose(fp);
                }
                else aff_txt("Open Failed");
    
         }
         else aff_txt("Init Failed");
    
    }
    else aff_txt("Carte non détectée");
    La carte SD ne s'initialise pas. J'ai fait le test de changer l'état de ma broche manuellement et elle fonctionne.
    Merci pour votre soutient

    -----

  2. #2
    invite29cbc93f

    Re : Utilisation SPI PIC32MX

    Cette discussion a été créé involontairement par une identification automatique du PC. Un profil déjà éxistant

  3. #3
    invited3dcf66c

    Re : Utilisation SPI PIC32MX

    Si tu as inversé les broches SDI et SDO, c'est normal que ça ne marche pas. Si elles ont été nommées ainsi, c'est parce que dans le PIC c'est fait comme ça, et y'a pas le choix. Il faut re-router correctement.

  4. #4
    invite29cbc93f

    Re : Utilisation SPI PIC32MX

    Tu es sur que ce n'est pas possible... La communication SPI est juste une succession d'état haut et bas, il suffirait que je me serve de la broche SDO en entrée et SDI en sortie. Les broches sont bidirectionnelles et la différence qu'elles ont est qu'elles tolère le 5V.

    J'ai essayé de programmer en respectant l'utilisation des broches SPI mais je n'ai pas eu de signal non plus donc je pense que ça vient d’ailleurs.

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

    Re : Utilisation SPI PIC32MX

    Le simple fait de mettre ON le port spi, passe automatiquement SDO en output et SDI en input.
    Sinon y a le bit banging ...

  7. #6
    invite29cbc93f

    Re : Utilisation SPI PIC32MX

    Ok pourtant j'ai débugger et observer le registre TRIS et il est bien configurer comme je le souhaite moi

    Le bit banging ? Qu'est ce que c'est ? (je vais regarder en même tant mais vu que tu sais déjà)

  8. #7
    invite830075ec

    Re : Utilisation SPI PIC32MX

    En fait il doit pas changer le TRIS, c'est l'hardware câblé du port SPI qui prend la main, et lorsqu'on met le SPI off, les pins se retrouvent dans l'état programmé dans le TRIS.
    Le bit banging, c'est faire les timings SPI à la main, en manipulant les pins par soft, et c'est plutôt dommage.

  9. #8
    invite29cbc93f

    Re : Utilisation SPI PIC32MX

    En effet c'est dommage... parce que refaire toute la communication de la carte SD c'est pas une mince affaire :/ C'est bizarre parce que même en essayant de me servir des broches SDO et SDI correctement j'ai pas de signaux :/ Je vais ressayer voir

  10. #9
    invite29cbc93f

    Re : Utilisation SPI PIC32MX

    J'ai essayé et je n'ai aucun signal.

  11. #10
    invite830075ec

    Re : Utilisation SPI PIC32MX

    Tu as quand même raccordé 2 outputs en direct dans l'histoire, enfin, bon, généralement ça résiste

  12. #11
    invited3dcf66c

    Re : Utilisation SPI PIC32MX

    Pour voir si les signaux sortent, tu as essayé sans SD dans le slot?

  13. #12
    invite29cbc93f

    Re : Utilisation SPI PIC32MX

    Je sais ce que j'ai fait... ça me servira de leçon que veux-tu.

    J'ai fais plusieurs tests et sans la carte SD : sans résultat. j'ai retesté mes broches manuellement et elles fonctionnent. Au début du main.c j'ai désactivé plusieurs registres au cas ou.

  14. #13
    invite830075ec

    Re : Utilisation SPI PIC32MX

    C'est quoi qui fonctionne et c'est quoi qui fonctionne pas, exactement ?

  15. #14
    invite29cbc93f

    Re : Utilisation SPI PIC32MX

    Toujours pareil... les broches SDI et SDO qui sortent aucun signal.

  16. #15
    invite830075ec

    Re : Utilisation SPI PIC32MX

    C'est impossible que SDI soit grillé car elle a toujours été en input, tu dois avoir encore le spi actif ou un autre truc ...

  17. #16
    invite29cbc93f

    Re : Utilisation SPI PIC32MX

    Je sais qu'il n'est pas grillé. J'ai dit sur 2 posts que je les est testé.

    Que veux tu dire par le SPI encore actif

  18. #17
    invite830075ec

    Re : Utilisation SPI PIC32MX

    Si tu essaies le SPI, il faut insérer la carte SD, et n'oublie pas d'inverser les pins dans le HardwareProfile.h
    J'avais pas compris que tu avais inversé les fils ou pistes SDI et SDO, je pensais que tu les tester en i/o simples.

  19. #18
    invite29cbc93f

    Re : Utilisation SPI PIC32MX

    Ce que tu dis je l'ai fait déjà mais le problème est qu'il se passe rien... aucun signal sur les broches

  20. #19
    RISC

    Re : Utilisation SPI PIC32MX

    Salut,
    Il existe des exemples de code pour les PIC32MX qui montrent comment faire une liaison SPI avec une E2PROM en utilisant les librairies périphériques du compilateur XC32.
    Tu trouveras ces exemples ici : http://www.microchip.com/PIC32MX795F512L sous la rubrique documentation and software > Code examples.
    Vérifie bien que c'est pour le PIC32MX795 car l'implementation du module SPI est légèrement différente des autres PIC32MX.
    a+

  21. #20
    RISC

    Re : Utilisation SPI PIC32MX

    Salut,

    Quelle version des librairies MLA utilises-tu ? (juin 2013, autre date ?)

    Ce qui est très important c'est que si tu modifies un fichier hardware profile.h, il faut que ce soit un fichier pour un PIC32MX795 et pas pour un autre PIC32MX (comme le PIC32MX360 ou PIC32MX460) car les ports SPI ne sont pas faits de la même manière.

    a+

  22. #21
    invite830075ec

    Re : Utilisation SPI PIC32MX

    Dans ce pic, G8,G7,G6,G9 ce serait pas le port spi 2A plutôt que le 2 ?
    Il possède 1 port spi1 et 3 ports mixtes 1A,2A,3A spi/uart/i2c
    Il y a sans doute un renvoi du 2 vers le 2A, mais faut vérifier ça.

  23. #22
    invite29cbc93f

    Re : Utilisation SPI PIC32MX

    Salut RISC, la version utilisé doit être celle de Juin 2013 je pense. J'utilise une bibliothèque qui gère la communication avec la carte SD avec le SPI. J'ai modifié le fichier HardwareProfile pour qu'il corresponde à mes broches. J'ai déjà testé la bibliothèque avec ce PIC et une carte de développement et cela marchait, seul différence est que j'utilise plus le SPI1 mais le SPI2.

    Satinas : Que veux tu dires ? je me suis connecté sur SDI2, SDO2, CLK2 et SS2. Les broches sont utilisé pour l'UART et autres, c'est pour ça que au début de mon main j'ai désactiver les registre qui aurait pu poser problème.

  24. #23
    invite830075ec

    Re : Utilisation SPI PIC32MX

    Fais pas attention, j'étais plus à jour, ils ont rebaptisé les pins et ports sur ce pic, mon datasheet datait un peu.
    Avant c'était SPI 1, 1a, 2a, 3a et maintenant c'est SPI 1, 2, 3, 4 ce qui est tout de même mieux . Donc pas de problème pour le 2.
    Tous les ports spi, uart et i2c sont off au démarrage.

  25. #24
    invite29cbc93f

    Re : Utilisation SPI PIC32MX

    Ok. Du coup personne n'a une idée... je vais continué à chercher

  26. #25
    RISC

    Re : Utilisation SPI PIC32MX

    Salut,

    Jette un oeil ici car cela traite aussi de l'initialisation du SPI sur le PIC32MX795F512L

    a+

  27. #26
    RISC

    Re : Utilisation SPI PIC32MX

    Salut,

    Ton fichier hardwareprofile.h a l'air correct.
    Es-tu sur que dans ton logiciel tu actives le module SPI2 dans le registre SPI2CON ?

    a+

  28. #27
    invite29cbc93f

    Re : Utilisation SPI PIC32MX

    LE registre me dit bien que SPI2CONbits.ON = 1 donc activé

  29. #28
    invite830075ec

    Re : Utilisation SPI PIC32MX

    Pour tester ton SPI2, fonctionne sans carte SD.

    Code:
    int main()
    {
      SYSTEMConfig(GetSystemClock(), SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
      DDPCONbits.JTAGEN = 0;            // inhiber jtag
      AD1PCFG = 0xffff;	            // port B numérique
    
      SPI2BRG = GetPeripheralClock()/2/1000000 - 1;    // spi Fsck=1MHz
      SPI2CON = 0x8120;                 // spi_on, 8bit, SMP=0, CKE=1, CKP=0, master
      _LATG9  = 1;                      // spi cs off
      _TRISG9 = 0;  
    
      while (1) {
        unsigned int c;
        _LATG9 = 0;                     // spi cs on
        SPI2BUF = 0xaa;    	            // spi write
        while (!SPI2STATbits.SPIRBF) ;  // spi wait
        c = SPI2BUF;		    // spi read
        _LATG9 = 1;                     // spi cs off
        for (c=0; c<1000; c++) ;        // tempo
      }
    }

  30. #29
    invite29cbc93f

    Re : Utilisation SPI PIC32MX

    Merci Satinas. Le code que tu m'as donné fonctionne. Mais serait-ce le code de Microchip qui aurait un bug ? Je vais tenter de le re téléchargée pour voir.
    Et dans ton code... y a moyen d'inversé SDI et SDO ? je demande au cas ou

  31. #30
    invite830075ec

    Re : Utilisation SPI PIC32MX

    Inversion pas possible à ma connaissance, on peut juste récupérer une i/o parmi les 2 si on travaille en unidirectionnel.

    La librairie fonctionne, exécute la au debugger pour voir ce que ça donne. Avant le premier accès spi, tu vérifies le contenu de SPI2CON et SPI2BRG. La sdcard au début est à 400kHz puis le spi monte à 20MHz. Si ton code est pas trop confidentiel, je peux le tester sur mon hard. Tu as un oscillo ?

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Usb sur pic32mx
    Par davidif dans le forum Électronique
    Réponses: 10
    Dernier message: 28/10/2013, 13h25
  2. Pic32mx mplab v8.92
    Par davidif dans le forum Électronique
    Réponses: 9
    Dernier message: 20/10/2013, 00h15
  3. RTCC Pic32Mx
    Par invite024026d4 dans le forum Électronique
    Réponses: 13
    Dernier message: 23/11/2012, 10h07
  4. Timer PIC32MX
    Par invitee8f75e57 dans le forum Électronique
    Réponses: 3
    Dernier message: 26/07/2012, 09h38
  5. PWM Sur PIC32MX
    Par inviteddae56c8 dans le forum Électronique
    Réponses: 2
    Dernier message: 23/09/2011, 23h25
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...