IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Copie du contenu d'une eeprom vers une autre


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Par défaut Copie du contenu d'une eeprom vers une autre
    Bonjour,

    Voilà je me trouve face à un petit obstacle, j'ai programmé un système embarqué à base de microcontrolleur contenant egalement une eeprom afin d'enregsitrer des configurations.

    J'ai réalisé une nouvelle carte PCB identique, je charge bien mon programme, ça fontionne bien sauf aux endroits ou interviennent des données en provenance de l'eeprom ça bug à cause du contenu de l'eeprom qui par defqut est FF.

    J'ai fait une copie du contenu de mon eeprom de ma 1ere carte ce contenu je voudrais non pas le saisir manuellement dans l'eeprom de ma nouvelle carte PCB (car ça prendrait trop de temps) mais faire une restauration à partir d'un programme ou d'une fonction.

    Voici le contenu de mon eeprom printé de l'addresse 0 à FF correspondant à ss, et le contenu à cette addresse correspond à DATA mais attention vous remarquerez que les deux derniers chiffres de DATA allant de 00 à FF ne constituent pas le contenu. Donc autrement à l'adresse 0 , le contenu vaut simplement 30.

    Contenu EEPROM:

    Comment pourrais je automatiser de façon à restaurer la config de l'eeprom dans les nouvelles eeprom ?

    Merci

  2. #2
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    Bonjour aliveli

    Comme j'aime bien les eeprom, je vais essayé de t'aider aussi pour celui ci.

    Je n'ai pas vraiment compris ta question. Souhaite tu avoir des valeurs par défauts dans ton eeprom, ou avoir des valeurs issues d'un autre calculateur et qui pourrait évoluer dans le temps.

    La réponse change beaucoup de chose.
    Si ceux sont des valeurs par défauts, tu peux les stocker en flash, puis avoir une routine qui check si ton eeprom est vierge. Si elle est vierge, tu peux alors avoir une fonction qui va écrire toutes les valeurs par défauts stockées dans la flash vers ton eeprom

    Si tu veux pouvoir lire les valeur d'une autres carte , puis les programmer dans ta seconde carte, tu devras passer par un moyen de communication. Par exemple, une liaison série qui permet de lire et d'écrire des valeurs dans l'eeprom.

    La première méthode fige tes valeurs dans ton logiciel. Si tu veux changer ces valeurs, il faut aussi changer le logiciel.

    La seconde méthode permet une mise à jour dynamique de ton eeprom.

    Cordialement.
    Page sur Developpez : http://pbriand.developpez.com

  3. #3
    Membre confirmé
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Par défaut
    Bonsoir,
    Concretement j'ai plusieurs carte electronique (PCB) que je dois porgrammer de facon a ce qu'elle aient les memes configurations. Au niveau du programme c'est simple je charge le programme dans le microcontrolleur avec FLIP (logiciel de programmation ISP) mais pour charger des donnees dans l'eeprom il faut que c'est le programme qui le fasse, logique mais il faut la fonction pour.

    En fait il s'agit de valeurs par defaut, des configurations tel que le niveau de volume, des priorites etc et qui sont stockees sur une vingtaine de zones addresses de l'eeprom.
    Et donc les donnees que j'ai printees correspondent a ces configs. Donc je dois copier ce que j'ai printe sur la nouvelle carte qui elle aussi possede une eeprom. Mais attention une carte n'a qu'une seule eeprom donc la procedure logique c'est que je fasse un printf des donnees de la carte d'origine tel que j'ai fait par capture et que je fasse une fonction ou je colle simplement ces donnees de facon a ce que la fonction stocke ces donnees dans l'eeprom de la nouvelle carte. Mais comment vais je faire cette fonction que doi elle contenir ?

    Et aussi comme tu l'as dit eventuellement prevoir dans le soft un check qui verifie si la eeprom est vierge si c'est le cas de lancer cette fonction qui mettrait ces donnees par defaut aux bonnes adresses de cette nouvelle eeprom.

    comment vais je definir cette fonction ?

    Merci

  4. #4
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    Bonjour Aliveli

    Commence par créer un tableau de const avec toutes les valeurs par défauts

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const unsigned char defaultValue[] = { 0x30 , 0x20 , 0x30 , .... };
    En logiciel embarqué, le fait de mettre le mot clé const positionne tes données dans la rom (ou la flash selon les cas).

    Ensuite, lorsque tu entre dans le main juste après la mise sous tension, tu peux aller checker ton EEPROM.
    Pour checker tes données , tu peux définir un octet en eeprom qui va permettre de vérifier si ton eeprom est vierge ou non. Si il est à 0xFF, alors ton eeprom est vierge, sinon elle est programmée.

    Après il existe des méthode ou tu peux vérifier le contenu en protégant tes données par une checksum.

    Si ton eeprom est vierge, appele ta fonction d'écriture pour chaque octet à écrire. et positionne l'octet de controle à une valeur autre que 0xFF

    Cordialement
    Page sur Developpez : http://pbriand.developpez.com

  5. #5
    Membre confirmé
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Par défaut
    Ok,

    Merci je vais voir pour ma fonction d'écriture je pense que ça serait quelque chose de genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    ecriture_data_eeprom()
    {
    const unsigned char defaultValue[] = { 0x21 , 0x30 , 0xFF , .... };
    int i;
    int k=0;
     
    for (i=0;i<256;i++)
    {
     
    EEP2408_ADDRESS = i;  
    EEP2408_VALUE = defaultValue[k];
    EEP2408_write_byte(EEP2408_ADDRESS,EEP2408_VALUE);
    k++;
    }
     
    }
    Le code d'écriture ne doit pas être plus que ça je crois?
    Mais je ne suis pas sur que l'incrementation avec des décimaux (variable i ) puisse bien marcher, normalement il y a conversion dec->hex mais serait mieux une incrementation en hex ? et comment ?

    Merci

  6. #6
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    Bonjour aliveli,

    ta variable k est en trop.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    const unsigned char defaultValue[256] = { 0x21 , 0x30 , 0xFF , .... };
     
    ecriture_data_eeprom()
    {
      int i;
     
      for (i=0;i<256;i++)
      {
        EEP2408_write_byte(i,defaultValue[i]);
      }
    }
    Autrement c'est parfait.
    Decimal ou hexa n'est qu'une représentation gérer par le compilateur. Ton micro, lui ne voit que de l'hexa. Il faut toujours écrire ton code pour qu'il soit le plus lisible possible sans nuire à son efficacité

    Pense à remplir corretement le tableau avec les 256 valeurs.

    A+
    Page sur Developpez : http://pbriand.developpez.com

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Aliveli
    Ok,

    Merci je vais voir pour ma fonction d'écriture je pense que ça serait quelque chose de genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    ecriture_data_eeprom()
    {
       const unsigned char defaultValue[] = { 0x21 , 0x30 , 0xFF , .... };
       int i;
       int k=0;
     
       for (i=0;i<256;i++)
       {
          EEP2408_ADDRESS = i;  
          EEP2408_VALUE = defaultValue[k];
          EEP2408_write_byte(EEP2408_ADDRESS,EEP2408_VALUE);
          k++;
       }
    }
    Ton E2PROM n'a pas de mode 'burst' en écriture ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 14
    Dernier message: 11/03/2014, 10h01
  2. [AC-2007] Copie d'un ou plusieurs enregistrements d'une table vers une autre
    Par facedeharicot dans le forum VBA Access
    Réponses: 7
    Dernier message: 22/08/2011, 09h34
  3. Copie du contenu de la work vers une autre librairie
    Par coco_chanel86 dans le forum SAS Base
    Réponses: 6
    Dernier message: 04/08/2010, 18h11
  4. Réponses: 8
    Dernier message: 01/09/2007, 08h28
  5. [VB.NET] Copie d'une table d'une DB vers une autre
    Par SergeF dans le forum Windows Forms
    Réponses: 9
    Dernier message: 20/11/2004, 10h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo