SPIDevice selects an active-high device as soon as it is created
Maintainer antworten meist innerhalb von 1 Tag
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 73/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- 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
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus adafruit/circuitpython
-
documentation rp2
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 67/100
adafruit/circuitpython#11779 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
documentation enhancement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 67/100
adafruit/circuitpython#11689 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement network
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
adafruit/circuitpython#11845 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
adafruit/circuitpython#11834 ·
Maintainer antworten meist innerhalb von 1 Tag
-
audio bug crash esp32-s3 needs retest
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
adafruit/circuitpython#11822 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in adafruit/circuitpython
Ähnliche Issues
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 78/100
gnif/LookingGlass#1352 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
bazel-contrib/rules_go#4784 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag