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

Aperta Adatta ai principianti
#11,869 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@mikeysklar ci sta già lavorando.

Dal 13/11/2026.

  • #11870 di @mikeysklar — aperta

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
73/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
c, python
Ambito
embedded-iot

Direzione di ricerca

Leggi shared-bindings/adafruit_bus_device/spi_device/SPIDevice.c, concentrandoti sulla chiamata a switch_to_output e su come usa cs_active_value. Riproduci l’esempio fornito e verifica che la costruzione lasci non selezionato un dispositivo attivo a livello alto, mentre una transazione lo selezioni e l’uscita dalla transazione lo deselezioni.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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.

Lingua principale
C
Stelle
4.6k
Fork
1.4k
Merge medio
1g 1h
PR unite (30g)
208

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di adafruit/circuitpython

Tutte le issue di adafruit/circuitpython

Issue simili

Altre issue su C

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.