Bonjour à tous
Je lance une bouteille à la mer. Je viens de passer plusieurs jours sur un problème déroutant. J'ai devant moi une carte avec un CPU (ATmega1284P) contenant : - une RTC (RX4111CE) ; - une sonde de température fonctionnant en one shot et non en continu (TC72-5.0MUA) ; - une MRAM (MR25H256A) ; - un écran ePaper.
Le processeur est en veille (powerdown) et se réveille grâce à la RTC toutes les heures à peu près une seconde (grosso-merdo, il récupère la tension de la pile, regarde l'état d'un bouton et le cas échéant change l'état de sa machinerie interne pour envoyer une donnée vers un serveur distant au travers d'un modem cellulaire qui n'est pas branché, donc qui n'est pas responsable de la consommation). La version précédente fonctionnait en logique inversée, mais n'était pas stable dans le temps (il y avait un courant de fuite vers la masse lorsque le CPU était en veille et ça posait des problèmes au bout de quelques heures malgré des résistances de pull-up).
L'alimentation boost de l'écran ePaper est coupée (il y a un mosfet sur la ligne et j'ai vérifié qu'il était bloqué). De toute façon, même si je retire l'écran, la consommation reste la même.
La sonde de température ne travaille qu'à la demande et non en continu. Je peux y écrire, y lire, les données renvoyées sont cohérentes avec la température de la pièce.
La MRAM est a priori en SLEEP (mais il est impossible de tester, je sais seulement que je peux y lire et y écrire et que j'envoie bien WAKE et SLEEP). Je sais que je peux y lire parce qu'il y a une routine de test lors de l'initialisation du firmware qui teste ls présence des différents composants. En particulier, elle lit aléatoirement un octet de la mémoire, y écrit le motif inverse, le relit (pour savoir s'il y a une mémoire) et le remet à sa valeur d'origine. Cette mémoire est accessible et fonctionne parfaitement.
J'ai vérifié les différents niveaux sur les sorties du CPU lorsqu'il est en veille (il y a des résistances de pull-down). Rien n'est flottant. Et pourtant, j'ai une consommation résiduelle du circuit qui varie (!) entre 250 et 700 µA, ce qui fait beaucoup.
Ce dont je suis sûr : - l'écran est en veille (et n'est pas responsable de la situation puisque si je le débranche, la consommation reste identique) ; - la MRAM est arrêtée en soft :
... mutex_lock(&mutex_mram); mram_command0(MRAM_SLEEP); mutex_unlock(&mutex_mram); task_sleep(1000);
sleep(powerdown); ...
sauf si elle n'exécute pas la commande en question, mais je ne vois vraiment pas pourquoi. Je n'ai aucun moyen de vérifier, mais l'ordre de grandeur de la consommation être celui de la MRAM en standby et non en sleep.
La sonde de température est elle aussi en veille. Pour éviter les problèmes de veille du CPU, tous les chip selects sont inversés (actifs à l'état bas sur les GPIO avec des pull down) et inversés avec de la logique mosfet (2N7002). La consommation de cette logique doit être nulle ou quasiment puisque les transistors sont bloqués. En tout cas, on est loin des 500 µA.
Ce que je n'arrive pas à comprendre, c'est la variation de ce courant sachant que tout est arrêté et ce qui consomme autant. Le CPU étant en powerdown, je ne vois pas comment il est possible que la consommation de la carte varie d'un facteur trois. Je m'attendais à une consommation résiduelle de quelques dizaines de µA au plus, pas à quelques centaines.
Je peux mettre le fichier sur un site ftp si quelqu'un a envie de regarder. Ce n'est pas très compliqué, il n'y a que trois pages.
Bien cordialement,
JKB