[Programmation] Code Mémoire SST26VF064B
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Code Mémoire SST26VF064B



  1. #1
    davidif

    Code Mémoire SST26VF064B


    ------

    J'ai un code pour communiquer avec ma mémoire SST26VF064B, j'arrive correctement à lire et écrire sans problème.

    https://ww1.microchip.com/downloads/.../20005119G.pdf

    Mon code ne pend pas en compte l'adresse de départ donc destination et afin de dissocier la sauvegarde de mes données, je modifie donc mon code pour ce faire.

    Mon code d'origine et fonctionnel est :

    Code:
    void nvm_read_data_spi (char *buf, int size)
    {   
      unsigned long i,j,k;
      //int status;
      
    check1a=0;
    check2a=0;
    check3a=0; 
     page_bad=0;
     page_good=0;
     
     j=0;
    break_l=0;
      
     status=1;  //1 means memory/code works and 0 means fault has occured.
     check=0;  //keeps track of code progress.
     tempcheck=1; 
    
    
                SPI_WREN();
                j=0;
                i=0;
               // while (j<(4096))
                 while (j<size)   
                {
                   // SPI_WREN();
                   // SPI_Set_Burst(0x03);
                    SPI_HighSpeed_Read_Cont(j,256);
                    for (k=0;k<=255;k++)
                     {
                    
                         buf[i]=data_256[k];
                         i++; 
    
    
                     }
                     j=j+256;
                     break_l=2;
                }
       
    }
    lequel est utilisé en chargeant les données de ma structure
    nvm_read_data_spi ((char *)&appDataTCPIP_WIFI, sizeof(appDataTCPIP_WIFI));

    Afin de bouger mon adresse de départ de sauvegarde pour placer d'autres données ailleurs, je modifier légèrement ma fonction comme tel :

    Code:
    void nvm_read_etat_spi (char *buf, int size, unsigned long dst )
    {   
      unsigned long i,j,k,l;
    
      
    check1a=0;
    check2a=0;
    check3a=0; 
     page_bad=0;
     page_good=0;
     
     j=0;
     l=0;
    break_l=0;
      
     status=1;  //1 means memory/code works and 0 means fault has occured.
     check=0;  //keeps track of code progress.
     tempcheck=1; 
    
      
    
                SPI_WREN();
                j=0;
                i=0;
    
                 while (j<size)   
                {
    
                    l=dst+j; 
                    SPI_HighSpeed_Read_Cont(l,256);
                    
                    for (k=0;k<=255;k++)
                     {
                    
                         buf[i]=data_256[k];
                         i++; 
                        
    
                     }
    
                    
                     j=j+256;
                     break_l=2;
                }
       
    }
    Je fait donc ça
    nvm_read_etat_spi ((char *)&appDataEtat, sizeof(appDataEtat),5000);

    Pour me placer à l'adresse 5000 (là j'ai un doute sur la forme)

    Le problème mon programme ce bloque ... je sais pas trop pourquoi, pourtant je bouge pas grand choses

    Pourriez vous m'aider s'il vous plait
    merci

    -----

  2. #2
    davidif

    Re : Code Mémoire SST26VF064B

    En mode debug, mon prog ce stop en :

    Code:
    void _general_exception_handler ( void )
    {
        /* Mask off Mask of the ExcCode Field from the Cause Register
        Refer to the MIPs Software User's manual */
        _excep_code = (_CP0_GET_CAUSE() & 0x0000007C) >> 2;
        _excep_addr = _CP0_GET_EPC();
        _cause_str  = cause[_excep_code];
    
        SYS_DEBUG_PRINT(SYS_ERROR_ERROR, "\nGeneral Exception %s (cause=%d, addr=%x).\n", 
                        _cause_str, _excep_code, _excep_addr);
    
        while (1)
        {
            SYS_DEBUG_BreakPoint();
        }
    }
    Quand je met le for() de ma fonction en texte, ça coince plus ... faut que je vois si ça fonctionne pour autant ...

  3. #3
    davidif

    Re : Code Mémoire SST26VF064B

    A priori, mon for

    Code:
                    for(k=0;k<256;k++)
                     {
                    
                        buf[i]=data_256[k];
                         i++; 
    
                     }
    lorsque j'enlève

    buf[i]=data_256[k];

    ça ne bloque plus, seulement je ne récupère pas les données dans mon tableau ...

    Je sais pas si c'est lié, mais en fait je récupère mes données en mémoire à l'init, en faisant comme ça

    nvm_read_data_spi ((char *)&appDataTCPIP_WIFI, sizeof(appDataTCPIP_WIFI));
    nvm_read_etat_spi ((char *)&appDataEtat, sizeof(appDataEtat),5000);

  4. #4
    invite5637435c

    Re : Code Mémoire SST26VF064B

    Bonjour,

    je ne vois pas où sont déclarés les tableaux buf[] et data_256k[].

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

    Re : Code Mémoire SST26VF064B

    La déclaration ce trouve dans mon fichier SST26VF064_SPI.h
    unsigned int data_256[256]; /* global array to store read data */

    Puis la fonction de lecture:
    void nvm_read_etat_spi (char *buf, int size,unsigned long dst);


    Mais en fait j'ai trouvé pourquoi, enfin en partie, je viens lire et charger les données dans ma structure

    nvm_read_etat_spi ((char *)&appDataEtat, sizeof(appDataEtat),5000);

    Mais avant ça, je déclare ma structure en haut du fichier comme ça
    APP_DATA_ETAT appDataEtat;

    J'ai donc changé le nom de ma structure par

    APP_DATA_ETAT appDataEtat_etat; et remplacer
    nvm_read_etat_spi ((char *)&appDataEtat_etat, sizeof(appDataEtat_etat),5000) ;

    Puis c'est passé ...

    le terme de "appDataEtat" devais peut-être une variable ou instruction déjà utilisé qq part .... je n'ai pas trouvé ...

  7. #6
    invite5637435c

    Re : Code Mémoire SST26VF064B

    Je ne connais pas votre environnement mai il me semble qu'il y a un problème de variable.
    Le tableau data_256[] est déclaré en unsigned int (0-65535) il faut s'assurer que vous ne remplissiez pas buf[] avec des int si vous l'avez déclaré pour recevoir des variables de type char.
    Code:
    void nvm_read_etat_spi (char *buf, int size,unsigned long dst);
    

  8. #7
    davidif

    Re : Code Mémoire SST26VF064B

    Merci Hulk28, je vais vérifier ça dès demain matin.

    Cependant, je me pose une autre question concernant la gestion de mes sauvegardes dans ma mémoire, et si j'ai bien compris le cycle d'écriture de ma mémoire est de 100 000, sachant que je peut la partager de 4k octets, pour la prolonger le plus longtemps possible l'idée est de compter le nombre d'écriture puis arrivé à 100 000 passer au prochain bloc de 4Ko suivant, puis ainsi de suite ... cela vous semble correcte comme méthode ?

    Comme je risque de faire Max 18 sauvegardes par jours, dans le cas le plus défavorable sur 360 jours , cela fait 360 *18= 6480 sauvegardes par ans avec 100 000 / 6480 = 15,43 ans
    Soit 7FFFFFH donc 8388607 Emplacement 8388607/4K= 2097 soit 2097 * 15 = 31457 ans ça va y a de la marge (:

    Est-ce correct ?

Discussions similaires

  1. Code en Assembleur : Recopie de zone mémoire
    Par invite42845e01 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 23/11/2018, 14h56
  2. Trouble de la memoire/Memoire courte/innatention prononcer...Que faire?
    Par invite13db3640 dans le forum Psychologies (archives)
    Réponses: 3
    Dernier message: 24/04/2014, 21h00
  3. Un langage codé léger, 2 caractères non codé=1 caractère codé. Une solution?
    Par invite06e0b926 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 30/06/2010, 11h02
  4. Solutions pour exécuter un code en mémoire externe sur PIC
    Par Toufinet dans le forum Électronique
    Réponses: 6
    Dernier message: 06/12/2007, 07h22
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...