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

Python Discussion :

Difficulté pour écrire en eeprom


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Par défaut Difficulté pour écrire en eeprom
    Bonjour,

    Dans un petit programme qui enregistre dans une mémoire e2prom le résultat des mesures toutes les 10 minutes durant la journée soit 144 lignes de 30 caractères par ligne.
    Données transférées du programme appelant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	100 16 # mem_address,date.hour
    	101 40 # mem_address,date_minute
    Programme appellé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def  writeByte(self, mem_address, byteValue):
        self.bus.write_i2c_block_data(self.i2c_address,\
                                       (mem_address >> 8) & 0xff,\
                                      [mem_address & 0xff ,\
                                       byteValue])
    la première ligne de données transférées par le programme appelant se passe bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	100 16 # mem_address,date.hour
    Mais la deuxième ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	101 40 # mem_address,date_minute
    me déclenche l'anomalie suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Traceback (most recent call last):
      File "Viadrus.py", line 139, in <module>
        store_mesures() 
      File "Viadrus.py", line 111, in store_mesures
        eerom.writeByte(mem_address,date.minute) 
      File "/home/pi/Dossier_raspi/i2c_eerom2.py", line 15, in writeByte
        byteValue])
    OSError: [Errno 121] Remote I/O error
    Or je ne sais pas identifier [Errno 121] remote I/O error
    Je précise que je suis débutant aussi bien en Python que linux
    Merci par avance à ceux qui voudraient bien m'aider.

    matériel: raspberry pi3+, Python 3.5.3, E2prom AT24C32

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OSError: [Errno 121] Remote I/O error
    Ça veut dire que l'EEPROM n'est pas contente de ce qu'elle reçoit.
    Maintenant, comment et quoi écrire dans E2prom AT24C32 n'est pas quelque chose à regarder côté Python ou Linux mais plutôt sur ceux qui ont réalisé ce genre d'opération sur le même genre de périphérique.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Par défaut
    Salut wiztricks

    Je ne mets pas en cause Python ou Linux.
    Cette ligne est écrite pour situer mon niveau.
    Ca n'empêche que d'après ma lecture cela concerne "byteValue" mais je ne comprends pas pourquoi.

    La valeur de "40" est un numérique entier et non pas un alphanumérique.
    Quant a "OSError: [Errno 121]" ou peut on trouver une explication sur cette erreur.
    "Remote I/O error" est un peu court.

    J'ai pas mal cherché, mais je n'ai rien trouvé.

    Merci pour votre attention

    Cdlt

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    La valeur de "40" est un numérique entier et non pas un alphanumérique
    Êtes vous sûr ? Pour afficher le type d'une valeur, il suffit de faire,

    et voir si c'est bien un entier dont vous avez à faire...

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Par défaut
    Tout a fait ce chiffre de "40" est le résultat d'un calcul sur les dates et envoyé pour être enregistré.

    Ces deux lignes :
    le 1er nombre 100 correspond a
    adres_eerom=date.hour*6+date.minute//10
    le 2 eme nombre 16 correspond a
    date=date.hour
    sur la 2 eme lingne:

    le 1er nombre correspond a:
    adres_eerom+=1
    le 2ème nombre 40 correspond a:
    date=date.minute
    donc ce sont des int

    Dans tous les cas la première ligne est bien reconnue mais pas la deuxième.
    C'est çà qui me gène.

    Cdlt

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par mandrain Voir le message
    Ca n'empêche que d'après ma lecture cela concerne "byteValue" mais je ne comprends pas pourquoi.

    La valeur de "40" est un numérique entier et non pas un alphanumérique.
    Quant a "OSError: [Errno 121]" ou peut on trouver une explication sur cette erreur.
    Certes, mais c'est pas du côté de Python qu'on va pouvoir "valider" ce que vous passez en paramètre à la fonction/methode .write_i2c_block_data. Si, par exemple, l'IC retourne un NAK que le système traduit en OSError: [Errno 121]. Ca vous ne dira toujours pas comment écrire 40 à l'adresse 101.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Par défaut
    Bonsoir,

    Depuis j'ai eu la solution.

    il suffit de mettre une tempo de 10 ms après le l'écriture.

    Merci à tous pour l'intérêt que vous avez manifestés.

    Cdlt

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par mandrain Voir le message
    Depuis j'ai eu la solution.

    il suffit de mettre une tempo de 10 ms après le l'écriture.
    Oui, c'est cohérent avec ce que raconte la documentation de l'EEPROM
    Write Operations
    BYTE WRITE:

    A write operation requires two 8-bit data word addresses following the
    device address word and acknowledgment. Upon receipt of this address, the EEPROM
    will again respond with a zero and then clock in the first 8-bit data word. Following
    receipt of the 8-bit data word, the EEPROM will output a zero and the addressing
    device, such as a microcontroller, must terminate the write sequence with a stop condi-
    tion. At this time the EEPROM enters an internally-timed write cycle, t-WR, to the
    nonvolatile memory. All inputs are disabled during this write cycle and the EEPROM will
    not respond until the write is complete (refer to Figure 2)
    Et la durée du t-WR est donnée en fonction de la tension à la page 5.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 17
    Dernier message: 16/12/2012, 09h27
  2. En difficulté pour faire une requete
    Par Fonzy17 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/03/2005, 10h56
  3. Algo pour écrire un chiffre
    Par Skyw4lKR dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 11/08/2004, 13h32
  4. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  5. Difficultés pour afficher un pixel à l'écran
    Par Bubonik software dans le forum C
    Réponses: 9
    Dernier message: 17/08/2003, 12h48

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