SPIDevice selects an active-high device as soon as it is created

Offen Anfängerfreundlich
#11,869 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@mikeysklar arbeitet bereits daran.

Seit 13.11.2026.

  • #11870 von @mikeysklar — offen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
73/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
c, python
Bereich
embedded-iot

Rechercherichtung

Lies shared-bindings/adafruit_bus_device/spi_device/SPIDevice.c und konzentriere dich auf den Aufruf von switch_to_output und darauf, wie er cs_active_value verwendet. Reproduziere das bereitgestellte Beispiel und überprüfe, dass die Konstruktion ein aktiv-high-Gerät nicht ausgewählt lässt, während eine Transaktion es auswählt und das Beenden der Transaktion es abwählt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

SPIDevice() sets the chip select pin high as soon as it is created.

That is wrong for a device with cs_active_value=True: it selects the device before any transaction.

The Python BusDevice library sets the pin to not cs_active_value instead.

import board, busio, digitalio
from adafruit_bus_device.spi_device import SPIDevice

spi = busio.SPI(board.GP18, MOSI=board.GP19, MISO=board.GP16)
cs = digitalio.DigitalInOut(board.GP17)
print("fresh", cs.direction, cs.value)
d = SPIDevice(spi, cs, cs_active_value=True)
print("constructed", cs.direction, cs.value)
with d:
    print("in transaction", cs.value)
print("after transaction", cs.value)
fresh digitalio.Direction.INPUT False
constructed digitalio.Direction.OUTPUT True
in transaction True
after transaction False

constructed should be False.

Board Raspberry Pi Pico (RP2040)
Version 11.0.0-alpha.3-7-g95f9ddb95b, also seen on the desktop port
Cause shared-bindings/adafruit_bus_device/spi_device/SPIDevice.c calls switch_to_output(..., true, ...) regardless of cs_active_value
Also on 10.3.x (same line)

Found with Claude while testing #11865; I ran the code above on the Pico myself.

Vorherrschende Sprache
C
Sterne
4.6k
Forks
1.4k
Ø Merge
1 T. 1 Std.
Gemergte PRs (30 T.)
208

Entwicklungsumgebung

Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus adafruit/circuitpython

Alle Issues in adafruit/circuitpython

Ähnliche Issues

Weitere Issues zu C

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.