adafruit_bus_device
– 硬件加速外部总线访问¶
I2CDevice 和 SPIDevice 帮助器类使管理总线上的事务状态变得容易。例如,他们管理锁定总线以防止其他并发访问。对于 SPI 设备,它管理芯片选择和协议更改,例如模式。对于 I2C,它管理设备地址。
在这些板上可用
-
class
adafruit_bus_device.
I2CDevice
(i2c: busio.I2C, device_address: int, probe: bool = True)¶ I2C 设备管理器
代表单个 I2C 设备并管理锁定总线和设备地址。
例子:
import busio from board import * from adafruit_bus_device.i2c_device import I2CDevice with busio.I2C(SCL, SDA) as i2c: device = I2CDevice(i2c, 0x70) bytes_read = bytearray(4) with device: device.readinto(bytes_read) # A second transaction with device: device.write(bytes_read)
-
readinto
(self, buf: _typing.WriteableBuffer, *, start: int = 0, end: Optional[int] = None) → None¶ Read into
buf
从设备读入。读取的字节数将是 的长度buf
. 。如果提供start
或end
,则缓冲区将被切片,就像buf[start:end]
。这不会像buf[start:end]
will 那样导致分配, 因此可以节省内存。
-
write
(self, buf: _typing.ReadableBuffer, *, start: int = 0, end: Optional[int] = None) → None¶ 将字节写入
buffer
设备,然后发送一个停止位。如果提供start
或end
,则缓冲区将被切片,就像buffer[start:end]
。这不会像buffer[start:end]
will 那样导致分配, 因此可以节省内存。
-
write_then_readinto
(self, out_buffer: _typing.WriteableBuffer, in_buffer: _typing.ReadableBuffer, *, out_start: int = 0, out_end: Optional[int] = None, in_start: int = 0, in_end: Optional[int] = None) → None¶ 将字节写入
out_buffer
设备,然后立即in_buffer
从设备读取。读取的字节数将是 的长度in_buffer
。如果提供out_start
或out_end
,则输出缓冲区将被切片为 ifout_buffer[out_start:out_end]
buffer[out_start:out_end]will 那样导致分配,因此可以节省内存。如果提供in_start
或in_end
,则输入缓冲区将被切片,就像in_buffer[in_start:in_end]
.。这不会像in_buffer[in_start:in_end]
will 那样导致分配,因此可以节省内存。
-
-
class
adafruit_bus_device.
SPIDevice
(spi: busio.SPI, chip_select: microcontroller.Pin, *, baudrate: int = 100000, polarity: int = 0, phase: int = 0, extra_clocks: int = 0)¶ SPI 设备管理器
代表单个 SPI 设备并管理锁定总线和设备地址。
- 参数
spi (SPI) – 设备所在的 SPI 总线
chip_select (DigitalInOut) – 实现 DigitalInOut API 的芯片选择引脚对象。
cs_active_value (bool) – 如果您的设备要求 CS 为高电平有效,则设置为 true。默认为假。
extra_clocks (int) – CS 为高电平后循环总线的最小时钟周期数。(用于 SD 卡。)
例子:
import busio import digitalio from board import * from adafruit_bus_device.spi_device import SPIDevice with busio.SPI(SCK, MOSI, MISO) as spi_bus: cs = digitalio.DigitalInOut(D10) device = SPIDevice(spi_bus, cs) bytes_read = bytearray(4) # The object assigned to spi in the with statements below # is the original spi_bus object. We are using the busio.SPI # operations busio.SPI.readinto() and busio.SPI.write(). with device as spi: spi.readinto(bytes_read) # A second transaction with device as spi: spi.write(bytes_read)
-
__exit__
(self) → None¶ 通过取消置位片选来结束 SPI 事务。有关更多信息,请参阅 Lifetime 和ContextManagers