Raspberry Pi Pico 2: GPIO-Bug E9 im RP2350 (Revision A2)
Wenn man die GPIO-Anschlüsse des Mikrocontrollers RP2350 (zum Beispiel Raspberry Pi Pico 2) als Eingänge nutzen will, dann muss man je nach Beschaltung Maßnahmen gegen einen Hardware-Fehler im RP2350 vorsehen.
Der Fehler ist mit der Bezeichnung „RP2350-E9: Increased leakage current on GPIO when pad input is enabled“ im RP2350-Datenblatt dokumentiert. Betroffen sind alle RP2350-Chips mit dem Aufdruck RP2350XXA2 (Revision A2). Im englischen Sprachraum spricht man auch vom „GPIO latching problem“ oder GPIO-Latching-Effekt. Latching bedeutet so viel wie Verriegeln bzw. Verriegelung. Das man hier tatsächlich den Begriff „problem“ verwendet, deutet daraufhin, dass der Fehler wirklich ernsthaft ist.
Das RP2350-E9 Erratum betrifft alle GPIO-Pins des RP2350-Mikrocontrollers. Der Fehler verursacht ein unerwartetes Verhalten bei GPIO-Eingängen mit bestimmten Beschaltungen.
Was ist das Problem?
Der Fehler führt bei einem GPIO-Eingang dazu, dass der RP2350 bei bestimmten Beschaltungen das Eingangssignal falsch interpretiert. Beim Umschalten zwischen logisch 0 und 1 durchläuft der Signalpegel einen undefinierten Bereich, der weder 0 noch 1 ist. Das eigentliche Problem dabei ist ein Leckstrom von ungefähr 120 Mikroampere. Die interne Pulldown-Schaltung ist dafür zu schwach, weshalb der Pegel bei einer logischen 1 hängen bleibt.
Das Problem betrifft alle GPIOs und tritt sowohl bei aktivierten internen Pulldown-Widerständen als auch ohne auf.
Welche Auswirkungen hat das in der Praxis?
In der Praxis gibt es Projekte, Anleitungen und Howtos, wegen denen zum Beispiel ein Raspberry Pi Pico 2 (mit RP2350) kein pinkompatibler Ersatz für einen Pico mit RP2040 ist.
- Unzuverlässiges Lesen von Eingangssignalen und Zuständen. Beispielsweise wird das Drücken eines Tasters nicht korrekt erkannt.
- Unvorhergesehene Schwierigkeiten bei der Verwendung hochohmiger Eingänge.
- Von außen ist das Fehlverhalten nicht erkennbar. Unter Umständen sucht man den Fehler im eigentlich korrekten Programmcode.
Wie kann man diesen Fehler vermeiden?
Die offizielle Empfehlung ist, einen externen Widerstand von maximal 8,2 kOhm oder kleiner als Pulldown-Widerstand zu verwenden. Gegebenenfalls muss dieser Widerstand zusätzlich eingebaut werden. Bei parallel geschalteten Widerständen gilt, dass der Gesamtwiderstand kleiner ist als der kleinste Teilwiderstand.
Eine Alternative ist, für GPIO-Eingänge Pullup-Widerstände zu verwenden, sofern das möglich ist. Für Pullup-Widerstände gibt es keine spezifischen Berichte, die darauf hinweisen, dass der Fehler in derselben Weise auftritt. Der Schwerpunkt des Problems liegt auf den Pull-Down-Beschaltungen.
Der Elektronik-Praktiker empfiehlt generell kleinere Widerstände als 10 kOhm zu verwenden.
Welche Auswirkungen hat das auf bestehende Projekte?
- Sensor-Module sind so konzipiert, dass sie die GPIO-Eingänge hochohmig beschalten und deshalb scheinbar nicht funktionieren. Die sind dann nicht kompatibel mit dem RP2350.
- Oft ist es so, dass in Projekten mit Taster und Schalter an den GPIO-Eingängen hochohmige Pulldown-Widerstände verwendet werden. Zum Beispiel ist bei Tastern ein Widerstand mit 10 kOhm vom GPIO nach GND geschaltet. Dieser Widerstand ist zu groß. Er müsste durch einen kleineren ersetzt oder ein kleinerer parallelgeschaltet werden. In einer Parallelschaltung von Widerständen gilt, dass der Ersatzwiderstand (aus der Parallelschaltung der Widerstände) kleiner als der kleinste Teilwiderstand ist.
- Oder es ist kein externer, sondern nur ein interner Pulldown-Widerstand vorgesehen. In solchen Projekten müsste dann ein Widerstand mit 8,2 kOhm oder kleiner zusätzlich eingebaut werden.
Wie kann man herausfinden, ob man einen RP2350 mit diesem Fehler hat?
Grundsätzlich hilft ein Blick auch den Chip mit der Himbeere drauf. Ist dort „RP2350A0A2“ aufgedruckt, dann handelt es sich um einen RP2350, der davon betroffen ist.
Alternativ kann man das Problem mit einem einfachen Aufbau und Programmcode nachstellen.
Aufbau und Programmcode zum Testen des GPIO-Latching-Effekts
Der folgende Programmcode fragt einen Taster ab, der zwischen GPIO 14 und 15 geschaltet ist (Pin 19 und 20). Wenn der Taster gedrückt wird, dann geht die Onboard-LED an und wenn er losgelassen wird, dann geht sie aus. Doch beim GPIO-Latching-Effekt geht die LED nicht aus. Sie bleibt an.
from machine import Pin import time led = Pin(25, Pin.OUT) vcc = Pin(15, Pin.OUT, value=1) btn = Pin(14, Pin.IN, Pin.PULL_DOWN) # Funktion zur Taster-Auswertung while True: btn_value = btn.value() print(btn_value) led.value(btn_value) time.sleep_ms(250)
Weitere verwandte Themen:
- Raspberry Pi Pico: GPIO-Grundlagen
- Raspberry Pi Pico: GPIO-Belegung (Pinout)
- Raspberry Pi Pico: GPIO-Eingang beschalten
- Raspberry Pi Pico: GPIO-Eingang mit Taster beschalten und auswerten
- Raspberry Pi Pico 2 W (RP2350)
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.