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必须是字节,而不是字符串。- 返回
写入的字节数
- 类型
整数或无