busio
– 硬件加速外部总线访问¶
该 busio
模块包含支持各种串行协议的类。
当微控制器不支持硬件加速方式的行为时,它可能会在内部使用 bitbang 例程。但是,如果硬件支持在一部分引脚上可用,但在提供的那些引脚上不可用,则将引发 RuntimeError。使用该bitbangio
模块在任何通用引脚上显式地对串行协议进行 bitbang。
如果程序在使用后继续,所有类都会更改硬件状态,并且在不再需要它们时应取消初始化。为此,请调用deinit()
或使用上下文管理器。有关更多信息,请参阅
Lifetime 和 ContextManagers。
例如:
import busio
from board import *
i2c = busio.I2C(SCL, SDA)
print(i2c.scan())
i2c.deinit()
此示例将初始化设备,运行
scan()
,然后 deinit()
是硬件。最后一步是可选的,因为 CircuitPython 会在程序完成后自动重置硬件。
在这些板上可用
-
class
busio.
I2C
(scl: microcontroller.Pin, sda: microcontroller.Pin, *, frequency: int = 100000, timeout: int = 255)¶ 两线串行协议
I2C 是一种用于在设备之间进行通信的两线协议。在物理层,它由 2 条线组成:SCL 和 SDA,分别是时钟线和数据线。
也可以看看
直接使用这个类需要仔细的锁管理。相反,用于
I2CDevice
管理锁。也可以看看
使用此类直接读取寄存器需要手动位解包。相反,使用现有的驱动程序或使用 注册 数据描述符制作一个 。
- 参数
笔记
在 nRF52840 上,只能创建一个 I2C 对象,除了在 Circuit Playground Bluefruit 上允许创建两个对象,一个用于板载加速度计,另一个用于板外使用。
-
__exit__
(self) → None¶ 在上下文退出时自动取消初始化硬件。有关更多信息,请参阅 Lifetime 和 ContextManagers 。
-
readfrom_into
(self, address: int, buffer: _typing.WriteableBuffer, *, start: int = 0, end: Optional[int] = None) → None¶ buffer
从 选择的设备读入address
。读取的字节数将是 的长度buffer
。必须至少读取一个字节。如果提供
start
或end
,则缓冲区将被切片,就像buffer[start:end]
。这不会像buf[start:end]
will 那样导致分配, 因此可以节省内存。- 参数
address (int) – 7 位设备地址
buffer (WriteableBuffer) – 要写入的缓冲区
start (int) – 开始写入的索引
end (int) – 要写入但不包括的索引。默认为
len(buffer)
-
writeto
(self, address: int, buffer: _typing.ReadableBuffer, *, start: int = 0, end: Optional[int] = None) → None¶ 将字节写入由
buffer
选择的设备address
,然后发送一个停止位。如果提供
start
或end
,则缓冲区将被切片,就像buffer[start:end]
。这不会像buffer[start:end]
will 那样导致分配, 因此可以节省内存。允许写入长度为零的缓冲区或切片,因为它可用于轮询设备是否存在。
- 参数
address (int) – 7 位设备地址
buffer (ReadableBuffer) – 包含要写入的字节的缓冲区
start (int) – 开始写入的索引
end (int) – 要读取但不包括的索引。默认为
len(buffer)
-
writeto_then_readfrom
(self, address: int, out_buffer: _typing.ReadableBuffer, in_buffer: _typing.WriteableBuffer, *, out_start: int = 0, out_end: Optional[int] = None, in_start: int = 0, in_end: Optional[int] = None) → None¶ 将字节从 写入由
out_buffer
选择的设备address
,不生成停止位,生成重复启动并读入in_buffer
。out_buffer
并且in_buffer
可以是相同的缓冲区,因为它们是按顺序使用的。如果提供
start
或end
,则相应的缓冲区将被切片为 ifbuffer[start:end]
。这不会像buf[start:end]
will 那样导致分配,因此可以节省内存。- 参数
address (int) – 7 位设备地址
out_buffer (ReadableBuffer) – 包含要写入的字节的缓冲区
in_buffer (WriteableBuffer) – 要写入的缓冲区
out_start (int) – 开始写入的索引
out_end (int) – 要读取但不包括的索引。默认为
len(buffer)
in_start (int) –开始写入的索引
in_end (int) – 要写入但不包括的索引。默认为
len(buffer)
-
class
busio.
SPI
(clock: microcontroller.Pin, MOSI: Optional[microcontroller.Pin] = None, MISO: Optional[microcontroller.Pin] = None)¶ 一个 3-4 线串行协议
SPI 是一种串行协议,具有用于数据进出主设备的专用引脚。它通常比
I2C
使用单独的引脚来选择设备而不是传输地址要快。此类仅管理四个 SPI 线路中的三个:clock
,MOSI
,MISO
。由客户来管理适当的选择行,通常缩写为CS
或SS
。(这很常见,因为多个辅助节点可以共享clock
,MOSI
和MISO
线路,从而共享硬件。)在给定的引脚上构造一个 SPI 对象。
笔记
如果可能的话,SPI 外设按需要的顺序分配,例如最高速度和不首先共享使用。例如,在 nRF52840 上,有一个 32MHz SPI 外设和多个 8MHz 外设,其中一些也可用于 I2C。首先返回 32MHz SPI 外设,然后是独占的 8MHz SPI 外设,最后是共享的 8MHz 外设。
也可以看看
直接使用这个类需要仔细的锁管理。相反,用于
SPIDevice
管理锁。也可以看看
使用此类直接读取寄存器需要手动位解包。相反,使用现有的驱动程序或使用 注册数据描述符制作一个 。.
- 参数
-
frequency
:int¶ 实际的 SPI 总线频率。由于内部限制,这可能与请求的频率不匹配。
-
__exit__
(self) → None¶ 退出上下文时自动取消初始化硬件。有关更多信息,请参阅 Lifetime 和 ContextManagers 。
-
configure
(self, *, baudrate: int = 100000, polarity: int = 0, phase: int = 0, bits: int = 8) → None¶ 配置 SPI 总线。SPI 对象必须被锁定。
- 参数
笔记
在 SAMD21 上,可以将波特率设置为 24 MHz,但不能保证该速度有效。12 MHz 是下一个可用的较低速度,并且符合 SAMD21 的规格。
笔记
在 nRF52840 上,这些波特率可用:125kHz、250kHz、1MHz、2MHz、4MHz 和 8MHz。如果您选择其中之一以外的波特率,则将选择最接近的较低波特率,最低为 125kHz。可以创建两个 SPI 对象,除了在 Circuit Playground Bluefruit 上,它只允许一个(以允许额外的 I2C 对象)。
-
write
(self, buffer: _typing.ReadableBuffer, *, start: int = 0, end: Optional[int] = None) → None¶ 写入包含在
buffer
. SPI 对象必须被锁定。如果缓冲区为空,则什么也不会发生。- 参数
buffer (ReadableBuffer) – 写出这个缓冲区中的数据
start (int) –
buffer
要写出的切片的开始:buffer[start:end]
end (int) – 切片的结尾;该指数不包括在内。默认为
len(buffer)
-
readinto
(self, buffer: _typing.WriteableBuffer, *, start: int = 0, end: Optional[int] = None, write_value: int = 0) → None¶ 读
buffer
入时写入write_value
每个字节读取。SPI 对象必须被锁定。如果要读取的字节数为 0,则什么也不会发生。- 参数
buffer (WriteableBuffer) – 将数据读入此缓冲区
start (int) –
buffer
要读入的切片的开始:buffer[start:end]
end (int) – 切片的结尾;该指数不包括在内。默认为
len(buffer)
write_value (int) – 读取时写入的值。(通常被忽略。)
-
write_readinto
(self, buffer_out: _typing.ReadableBuffer, buffer_in: _typing.WriteableBuffer, *, out_start: int = 0, out_end: Optional[int] = None, in_start: int = 0, in_end: Optional[int] = None) → None¶ 写出数据,
buffer_out
同时读入数据buffer_in
. 。SPI 对象必须被锁定。由buffer_out[out_start:out_end]
和定义的切片的长度buffer_in[in_start:in_end]
必须相等。如果缓冲区切片长度都为 0,则什么也不会发生。- 参数
buffer_out (ReadableBuffer) – 写出这个缓冲区中的数据
buffer_in (WriteableBuffer) – 将数据读入该缓冲区
out_start (int) – 要写出的 buffer_out 切片的开始:
buffer_out[out_start:out_end]
out_end (int) – 切片的结尾;该指数不包括在内。默认为
len(buffer_out)
in_start (int) –
buffer_in
要读入的切片的开始:buffer_in[in_start:in_end]
in_end (int) – 切片的结尾;该指数不包括在内。默认为
len(buffer_in)
-
class
busio.
UART
(tx: microcontroller.Pin, rx: microcontroller.Pin, *, baudrate: int = 9600, bits: int = 8, parity: Optional[Parity] = None, stop: int = 1, timeout: float = 1, receiver_buffer_size: int = 64)¶ 双向串行协议
一种通用的双向串行协议,它使用商定的速度而不是共享时钟线。
- 参数
tx (Pin) – 传输的引脚,或者
None
如果这UART
是只接收的。rx (Pin) – 要接收的引脚,或者
None
如果这UART
是仅传输的引脚。rts (Pin) – rts 的 pin,或者
None
如果 rts 未使用。cts (Pin) – cts 的引脚,或者
None
如果 cts 未使用。rs485_dir (Pin) – rs485 方向设置的输出引脚,或者
None
如果 rs485 未使用。rs485_invert (bool) – rs485_dir 引脚在设置时为高电平有效。否则低电平有效。
baudrate (int) – 传输和接收速度
bits (int) – 每字节的位数,5 到 9。
parity (Parity) – 用于错误检查的奇偶校验。
stop (int) – 停止位的数量,1 或 2。
timeout (float) – 读取时等待第一个字符和后续字符之间的超时时间(以秒为单位)。
ValueError
如果超时 >100 秒,则引发。receiver_buffer_size (int) –读取缓冲区的字符长度(0 表示禁用)。(当字符为 9 位时,缓冲区将为 2 *receiver_buffer_size 字节。)
CircuitPython 4.0 中的新功能:
timeout
将单位从毫秒更改为秒,不兼容。新的上限timeout
旨在捕捉毫秒的错误使用。-
baudrate
:int¶ 当前波特率。
-
in_waiting
:int¶ 输入缓冲区中可供读取的字节数
-
timeout
:float¶ 当前超时,以秒为单位(浮动)。
-
__exit__
(self) → None¶ 退出上下文时自动取消初始化硬件。有关更多信息,请参阅 Lifetime 和 ContextManagers 。
-
read
(self, nbytes: Optional[int] = None) → Optional[bytes]¶ 读取字符。如果
nbytes
指定,则最多读取那么多字节。否则,读取到达的所有内容,直到连接超时。强烈建议提供预期的字节数,因为它会更快。
-
readinto
(self, buf: _typing.WriteableBuffer) → Optional[int]¶ 将字节读入
buf
. 最多读取len(buf)
字节。CircuitPython 4.0 中的新功能: 不允许使用长度参数。
-
write
(self, buf: _typing.WriteableBuffer) → Optional[int]¶ 将字节缓冲区写入总线。
CircuitPython 4.0 中的新功能:
buf
必须是字节,而不是字符串。- 返回
写入的字节数
- 类型
整数或无