Hi,
wenn ich meinen ATSAMD51J19A (TQFP-64) in den Schalf-Modus versetze mittels PM->SLEEPCFG.bit.SLEEPMODE = STANDBY; // 0x4 (Datenblatt: "18.8.2 Sleep Configuration", S. 211), dann kann ich den Stromverbrauch schon mal gut verringern auf rund 2.7 mA (genau: 2735 uA). Ein tieferer Schlaf geht nicht, weil ich den Pin-Interrupt brauche zum wieder aufwachen.
Allerdings ist das noch viel zu viel. Im Datenblatt steht unter "Table 54-7. Current Consumption - Active and Idle Mode" (Seite 1843), dass man für LDO mit 3.3V und FDPLL 120 MHz auf Typ. 43uA - Max. 870uA kommt für STANDBY. Dass das vielleicht etwas Wunschdenken ist ist klar, aber trotzdem weit weg von meinen 2.7 mA. Dabei steht noch:
- Fast wake-up disabled (
PM.STDBYCFG.FASTWKUP = 0x0) --> habe ich gemacht ** - No System RAM retained (
PM.STDBYCFG.RAMCFG = 0x2). 8 KB backup RAM retained --> habe ich gemacht ** - no peripheral running --> Keine Ahnung wie man Peripherals abschaltet; ich habe nur
MCLK->AHBMASK.reg = ...gefunden aber das ändert nix so richtig
Hat jemand eine Idee wo dran ich noch drehen könnte?
Testweise habe ich mal für alle Ports DIR = 0x000000 und PINCFG = 0 gesetzt, d.h. alle Pins als Input und den Input-Buffer aus aber das hat irgendwie nur 200 uA Ersparnis gebracht (und deaktiviert auch den Pin-Interrupt).
**) Unter der Annahme, dass man die "PAC Write-Protection" über PAC->WRCTRL.reg = PAC_WRCTRL_PERID(ID_PM) | PAC_WRCTRL_KEY_CLR; abschaltet. Sicher bin ich mir dabei nicht aber es scheint zu funktionieren (also dass man dann das Register beschreiben darf)