Accès EEPROM PIC24
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

Accès EEPROM PIC24



  1. #1
    touf26

    Accès EEPROM PIC24


    ------

    Bonjour,
    J'ai une carte "explorer 16 development board" avec un PIC24FJ64GA004.
    Je cherche à écrire dans l'EEPROM interne. Je suis en mode debug sur la carte avec un PICKIT2 sous MPLAB avec compilateur C30.
    J'ai une erreur lors du deroulement de la fonction "__builtin_tblwtl" qui dit "PK2Error0008: Read failure (GetLastError = Une opération d'entrée/sortie avec chevauchement est en cours d'exécution.)"
    Voici mon code (après lecture de la datasheet et recherche sur les forums):

    int u16_addrhi=0;
    int u16_addrlo = 0;
    int u16_wordlo = 48;
    int u16_wordhi = 0;

    // Selection opération sur un mot
    NVMCONbits.NVMOP0 = 1;
    NVMCONbits.NVMOP1 = 1;
    NVMCONbits.NVMOP2 = 0;
    NVMCONbits.NVMOP3 = 0;

    // Positionnement de l'adresse à écrire
    TBLPAG = 0x7F;
    __builtin_tblwtl(u16_addrlo,u1 6_wordlo); //equivalent to asm(" tblwtl W3,[W1]")
    __builtin_tblwth(u16_addrlo,u1 6_wordhi); //equivalent to asm(" tblwth W2,[W1]")

    // Autorisation écriture
    NVMCONbits.ERASE=0;
    NVMCONbits.WREN=1;

    //Sequence pour eviter plantage ecriture
    NVMKEY=0x55;
    NVMKEY=0xAA;

    // Lancement ecriture
    NVMCONbits.WR = 1;

    // Attente fin ecriture
    while (NVMCONbits.WR==1){};


    Quelqu'un a t-il déjà eu ca ou est une erreur de mon code (qui est quand même compilé)
    Merci

    -----

  2. #2
    RISC

    Re : Accès EEPROM PIC24

    Salut,

    Comme tu l'as sans doute remarqué la plupart des PIC24F n'ont pas d'E2PROM.
    Ce que tu fais c'est donc de l'émulation d'E2PROM dans la FLASH. Je ne suis pas sûr qu'il soit possible de déboguer cela....car pour pouvoir écrire dans la FLASH ou se trouve le programme il faut l'arrêter pour effacer et ensuite écrire une ligne (ou plusieurs).
    Je te recommande d'utiliser la note d'application AN1095 qui explique dans le détail comment faire cela.
    Si tu veux de la vraie E2PROM (512 octets) regarde du coté du PIC24F32KA304 (3V) ou PIC24FV32KA304 (5V) ;=)

    a+

  3. #3
    touf26

    Re : Accès EEPROM PIC24

    Bonjour,
    Merci de ta reponse. Effectivement pas d'eeprom interne. La datasheet indique que c'est une eeprom externe qui est montée sur la carte.
    Sinon la procédure était bien correcte pour une eeprom interne ?

  4. #4
    RISC

    Re : Accès EEPROM PIC24

    Salut,

    Pour émuler de l'E2PROM dans la flash interne réferre toi à la note d'application que j'ai mentionnée dans mon post précédent
    C'est un algorithme bétonné qui marche...
    Pas besoin de réinventer la roue

    a+

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

    Re : Accès EEPROM PIC24

    Oui je vais lire cette doc, pas de soucis.
    Ma seconde question était plutôt, si je passe sur un des PIC que tu m'as cité avec de l'eeprom mon code serait il correct.
    Je vais en commander un pour tester.
    Merci en tout cas

  7. #6
    RISC

    Re : Accès EEPROM PIC24

    Salut,

    Tu confonds la FLASH et l'E2PROM..........
    L'algorithme de lecture et effacement/écriture n'a rien à voir.
    Ce que tu as écris ne convient pas pour ces PICs à E2PROM intégrée
    Il suffit de lire la documentation ;=)

    a+

  8. #7
    touf26

    Re : Accès EEPROM PIC24

    Je reviens sur mon post car le titre reste valable. Ne pouvant faire ce que je voulais, j'essaye d'utiliser l'eeprom de la carte explorer 16 externe en SPI.
    Je suis en mode apprentissage avec ma carte et pour tout avouer je galère pas mal même avec mon livre sur les pic24 et les datasheet. Cette eeprom est une 25LC256.
    Je n'arrive pas à avoir de signal sur l'oscilloscope sur le SDO.
    Surement un probleme de configuration des registres. Notament le prescale dans lequel je ne sais pas bien quoi mettre(même si ca ne devrait pas m'empecher d'avoir un signal).
    J'ai aussi essayé sur le SPI2 au cas où mais idem.

    #include <p24FJ64GA004.h>


    int main(void)
    {

    int write = 0;

    asm("MOV #OSCCON, w1"); // Sequence de deverouillage IOLOCK pour modifier RPx
    asm("MOV #0x46, w2");
    asm("MOV #0x57, w3");
    asm("MOV.b w2, [w1]");
    asm("MOV.b w3, [w1]");
    asm("BCLR OSCCON,#6");

    RPOR10bits.RP21R = 7; // config RC5 to SDO
    RPOR12bits.RP24R = 8; // config RC8 to SCK
    RPINR20bits.SDI1R = 20; // config RC4 to SDI

    asm("MOV #OSCCON, w1"); // Sequence de reverouillage IOLOCK
    asm("MOV #0x46, w2");
    asm("MOV #0x57, w3");
    asm("MOV.b w2, [w1]");
    asm("MOV.b w3, [w1]");
    asm("BSET OSCCON,#6");

    // Configuration E/S
    AD1PCFG = 65535; // Entrees AN en mode numeriques
    TRISAbits.TRISA8 = 0; // SS en sortie
    TRISCbits.TRISC8 = 0; // SCK en sortie
    TRISCbits.TRISC5 = 0; // SDO en sortie
    TRISCbits.TRISC4 = 1; // SDI en entrée

    SPI1STATbits.SPIEN = 1; // activation spi
    SPI1CON1bits.SSEN = 1; // SS utilisé en mode choix esclave
    SPI1CON1bits.PPRE0 = 0; // taux de predivision à 4
    SPI1CON1bits.PPRE1 = 1; //
    SPI1CON1bits.SPRE0 = 1; //
    SPI1CON1bits.SPRE1 = 1; //
    SPI1CON1bits.SPRE2 = 1; //
    SPI1CON1bits.CKP = 0; // clock polarity
    SPI1CON1bits.CKE = 1; // clock edge
    SPI1CON1bits.MSTEN = 1; // Spi en maitre


    while(1)
    {

    if (write==1)
    {
    write=0;

    LATAbits.LATA8 = 0;

    SPI1BUF = 0b00000110;
    while (SPI1STATbits.SPIRBF==1){};


    LATAbits.LATA8 = 1;
    }


    }
    }

  9. #8
    RISC

    Re : Accès EEPROM PIC24

    Salut,

    Le problème c'est que la carte EXPLORER 16 a été conçue à l'origine pour un PIC24FJ128GA010 qui a 100 broches. Il existe de multiples modules processeurs (PIMs) qui "re-routent" les broches ce qui rend compliqué la compréhension...
    Il existe des dizaines d'exemples pour cette carte mais ils sont presque tous basés sur le PIC24FJ128GA010.

    De plus le PIC que tu utilises possède le périphérique PPS qui fait que si tu ne "mappes" pas les broches aucun signal ne sort sur les broches.
    Je te recommande donc de partir de l'exemple fourni pour ta carte et de vérifier si les signaux sortent (UART, SPI,...).
    ensuite tu modifies cet exemple pour aller plus loin et faire tes propres adaptations..

    Les exemples de code CExxx se trouvent sur la page de chaque PIC mais il faut souvent ajuster au modèle utilisé.

    a+

  10. #9
    touf26

    Re : Accès EEPROM PIC24

    Oui j'avais déjà télécharger des exemples de microchip du genre CE313 et CE017 d'où j'ai tirer mon code. Pour la configuration des pins avec le mode PPS c'est ce que je fais au debut de mon code. D'ailleurs dans les exemples de microchip je ne le trouve pas. J'ai aussi vu un post sur le même PIC que moi mais où le SS était défini sur RP5. Ce qui m'a mit un gros doute donc j'ai vérifié au multimetre et il est bien sur RA8 qui n'est pas RP5. (bizarre)
    Je continue à chercher... en tout cas merci RISC

  11. #10
    touf26

    Re : Accès EEPROM PIC24

    Je me suis aussi apercu que le fait de faire

    SPI2BUF = 0b00000110;
    while (!SPI2STATbits.SPIRBF){};

    je reste bloqué sur le while... Ca voudrait dire que le SPIxTXB (mon buffer) n'est pas transféré dans le SPIxSR (buffer d'envoi) (selon datasheet). Normalement c'est fait automatiquement !?

  12. #11
    touf26

    Re : Accès EEPROM PIC24

    J'ai vu un post où ils remettaient en cause la mise à jour de SPIRBF (http://www.microchip.com/forums/m519943-p2.aspx)
    Pas mieux, le bit SPITBF monte bien quand je renseigne le buffer, mais il retombe pas... le RBF lui ne bouge pas mais ca depend si le 25LC256 a quelque chose à lui répondre je pense...

    J'en suis là en config avec les exemples de microchip et les forums. Personne n'a ce PIC avec cette demo board ?

    // Configuration E/S
    AD1PCFG = 65535; // Entrees AN en mode numeriques
    TRISAbits.TRISA8 = 0; // SS en sortie
    TRISCbits.TRISC8 = 0; // SCK en sortie
    TRISCbits.TRISC5 = 0; // SDO en sortie
    TRISCbits.TRISC4 = 1; // SDI en entrée

    SPI2STAT = 0;
    SPI2STATbits.SPIEN = 1; // activation spi
    SPI2CON1 = 0x122; // Master CKE predivision8
    SPI2CON2 = 0;
    LATAbits.LATA8 = 1; //Maj des sorties
    LATCbits.LATC5 = 0;
    LATCbits.LATC8 = 0;

    asm("MOV #OSCCON, w1"); // Sequence de deverouillage IOLOCK pour modifier RPx
    asm("MOV #0x46, w2");
    asm("MOV #0x57, w3");
    asm("MOV.b w2, [w1]");
    asm("MOV.b w3, [w1]");
    asm("BCLR OSCCON,#6");

    RPOR10bits.RP21R = 10; // config RC5 to SDO
    RPOR12bits.RP24R = 11; // config RC8 to SCK
    RPINR20bits.SDI1R = 20; // config RC4 to SDI

    asm("MOV #OSCCON, w1"); // Sequence de reverouillage IOLOCK
    asm("MOV #0x46, w2");
    asm("MOV #0x57, w3");
    asm("MOV.b w2, [w1]");
    asm("MOV.b w3, [w1]");
    asm("BSET OSCCON,#6");
    Dernière modification par touf26 ; 30/10/2012 à 16h34.

  13. #12
    touf26

    Re : Accès EEPROM PIC24

    Bonjour,
    Je suis parti de l'exemple CE313 du coup et la synchro avec les bits de statut de SPICON fonctionne mais toujours rien sur les signaux ni dans le buffer...
    Je doute de ma configuration de mes RP ? Comment vérifier si la modification de mes pattes RP s'est bien passée pour l'affectation en SDI SDO et SCK ?

    asm("MOV #OSCCON, w1"); // Sequence de deverouillage IOLOCK pour modifier RPx
    asm("MOV #0x46, w2");
    asm("MOV #0x57, w3");
    asm("MOV.b w2, [w1]");
    asm("MOV.b w3, [w1]");
    asm("BCLR OSCCON,#6");

    RPOR10bits.RP21R = 10; // config RC5 to SDO
    RPOR12bits.RP24R = 11; // config RC8 to SCK
    RPINR20bits.SDI1R = 20; // config RC4 to SDI

    asm("MOV #OSCCON, w1"); // Sequence de reverouillage IOLOCK
    asm("MOV #0x46, w2");
    asm("MOV #0x57, w3");
    asm("MOV.b w2, [w1]");
    asm("MOV.b w3, [w1]");
    asm("BSET OSCCON,#6");

    Merci

  14. #13
    touf26

    Re : Accès EEPROM PIC24

    Re,
    Mon erreur était au niveau de SDI, j'ai tellement changé entre SDI1 et SDI2 que je me suis trompé.
    Pour mettre rc4 sur sdi2 c'est RPINR22bits.SDI2R = 20; // config RC4 to SDI et non pas
    RPINR20bits.SDI1R = 20; // config RC4 to SDI.

  15. #14
    RISC

    Re : Accès EEPROM PIC24

    Persevere victoria dat ;=)

Discussions similaires

  1. Interconnections PIC24 / EEPROM / CAN 12 bits via bus SPI
    Par invite3c35244f dans le forum Électronique
    Réponses: 6
    Dernier message: 15/12/2011, 15h56
  2. Accés R/W en EEPROM avec PIC16F877
    Par invite09837ae2 dans le forum Électronique
    Réponses: 10
    Dernier message: 16/07/2008, 15h37
  3. Accès en lecture EEPROM
    Par Toufinet dans le forum Électronique
    Réponses: 16
    Dernier message: 01/12/2006, 21h10
  4. PROGRAMMATION DES PICs: ACCES EEPROM
    Par invitee5e63da7 dans le forum Électronique
    Réponses: 1
    Dernier message: 11/06/2003, 07h56
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...