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 会在程序完成后自动重置硬件。

在这些板上可用
  • 8086 Commander
  • @sarfata shIRtty
  • ARAMCON Badge 2019
  • ARAMCON2 Badge
  • ATMegaZero ESP32-S2
  • Adafruit BLM Badge
  • Adafruit CLUE nRF52840 Express
  • Adafruit Circuit Playground Bluefruit
  • Adafruit Circuit Playground Express 4-H
  • Adafruit CircuitPlayground Express
  • Adafruit CircuitPlayground Express with Crickit libraries
  • Adafruit CircuitPlayground Express with displayio
  • Adafruit EdgeBadge
  • Adafruit Feather Bluefruit Sense
  • Adafruit Feather M0 Adalogger
  • Adafruit Feather M0 Basic
  • Adafruit Feather M0 Express
  • Adafruit Feather M0 Express with Crickit libraries
  • Adafruit Feather M0 RFM69
  • Adafruit Feather M0 RFM9x
  • Adafruit Feather M4 CAN
  • Adafruit Feather M4 Express
  • Adafruit Feather MIMXRT1011
  • Adafruit Feather RP2040
  • Adafruit Feather STM32F405 Express
  • Adafruit Feather nRF52840 Express
  • Adafruit FunHouse
  • Adafruit Gemma M0
  • Adafruit Gemma M0 PyCon 2018
  • Adafruit Grand Central M4 Express
  • Adafruit Hallowing M4 Express
  • Adafruit ItsyBitsy M0 Express
  • Adafruit ItsyBitsy M4 Express
  • Adafruit ItsyBitsy RP2040
  • Adafruit ItsyBitsy nRF52840 Express
  • Adafruit LED Glasses Driver nRF52840
  • Adafruit Macropad RP2040
  • Adafruit MagTag
  • Adafruit Matrix Portal M4
  • Adafruit Metro ESP32S2
  • Adafruit Metro M0 Express
  • Adafruit Metro M4 Airlift Lite
  • Adafruit Metro M4 Express
  • Adafruit Metro nRF52840 Express
  • Adafruit Monster M4SK
  • Adafruit ProxLight Trinkey M0
  • Adafruit PyGamer
  • Adafruit PyPortal
  • Adafruit PyPortal Pynt
  • Adafruit PyPortal Titano
  • Adafruit PyRuler
  • Adafruit Pybadge
  • Adafruit QT Py M0
  • Adafruit QT Py M0 Haxpress
  • Adafruit QT Py RP2040
  • Adafruit QT2040 Trinkey
  • Adafruit Trellis M4 Express
  • Adafruit Trinket M0
  • AloriumTech Evo M51
  • Arduino MKR Zero
  • Arduino MKR1300
  • Arduino Nano 33 BLE
  • Arduino Nano 33 IoT
  • Arduino Nano RP2040 Connect
  • Arduino Zero
  • Artisense Reference Design RD00
  • AtelierDuMaker nRF52840 Breakout
  • BDMICRO VINA-D21
  • BDMICRO VINA-D51
  • BLE-SS dev board Multi Sensor
  • BastBLE
  • BastWiFi
  • BlueMicro840
  • CP Sapling M0
  • CP Sapling M0 w/ SPI Flash
  • CP32-M4
  • Capable Robot Programmable USB Hub
  • Cedar Grove StringCar M0 Express
  • Challenger RP2040 WiFi
  • Circuit Playground Express Digi-Key PyCon 2019
  • CircuitBrains Basic
  • CircuitBrains Deluxe
  • CrumpS2
  • Cytron Maker Pi RP2040
  • DynOSSAT-EDU-EPS
  • DynOSSAT-EDU-OBC
  • DynaLoRa_USB
  • ESP 12k NodeMCU
  • Electronic Cats Bast Pro Mini M0
  • Electronic Cats CatWAN USBStick
  • Electronic Cats Hunter Cat NFC
  • Electronic Cats NFC Copy Cat
  • Electronut Labs Blip
  • Electronut Labs Papyr
  • EncoderPad RP2040
  • Escornabot Makech
  • Espruino Pico
  • Espruino Wifi
  • Feather ESP32S2 without PSRAM
  • Feather MIMXRT1011
  • Feather MIMXRT1062
  • FeatherS2
  • FeatherS2 Neo
  • FeatherS2 PreRelease
  • Fluff M0
  • Franzininho WIFI w/Wroom
  • Franzininho WIFI w/Wrover
  • Gravitech Cucumber M
  • Gravitech Cucumber MS
  • Gravitech Cucumber R
  • Gravitech Cucumber RS
  • HMI-DevKit-1.1
  • Hacked Feather M0 Express with 8Mbyte SPI flash
  • HalloWing M0 Express
  • HiiBot BlueFi
  • IMXRT1010-EVK
  • IkigaiSense Vita nRF52840
  • J&J Studios datum-Distance
  • J&J Studios datum-IMU
  • J&J Studios datum-Light
  • J&J Studios datum-Weather
  • Kaluga 1
  • LILYGO TTGO T8 ESP32-S2 w/Display
  • LoC BeR M4 base board
  • MDBT50Q-DB-40
  • MDBT50Q-RX Dongle
  • MEOWBIT
  • MORPHEANS MorphESP-240
  • MakerDiary nRF52840 MDK
  • MakerDiary nRF52840 MDK USB Dongle
  • Makerdiary M60 Keyboard
  • Makerdiary Pitaya Go
  • Makerdiary nRF52840 M.2 Developer Kit
  • Melopero Shake RP2040
  • Meow Meow
  • Metro MIMXRT1011
  • Mini SAM M4
  • NUCLEO STM32F746
  • NUCLEO STM32F767
  • NUCLEO STM32H743
  • OPENMV-H7 R1
  • Oak Dev Tech BREAD2040
  • Oak Dev Tech PixelWing ESP32S2
  • Open Hardware Summit 2020 Badge
  • PCA10056 nRF52840-DK
  • PCA10059 nRF52840 Dongle
  • PCA10100 nRF52833 Dongle
  • PYB LR Nano V2
  • Particle Argon
  • Particle Boron
  • Particle Xenon
  • PewPew 10.2
  • PewPew 13
  • PewPew M4
  • PicoPlanet
  • Pimoroni Interstate 75
  • Pimoroni Keybow 2040
  • Pimoroni PGA2040
  • Pimoroni Pico LiPo (16MB)
  • Pimoroni Pico LiPo (4MB)
  • Pimoroni PicoSystem
  • Pimoroni Plasma 2040
  • Pimoroni Tiny 2040
  • PyCubedv04
  • PyCubedv04-MRAM
  • PyCubedv05
  • PyCubedv05-MRAM
  • PyKey60
  • PyboardV1_1
  • Raspberry Pi Pico
  • Robo HAT MM1 M4
  • S2Mini
  • SAM E54 Xplained Pro
  • SAM32v26
  • SPRESENSE
  • ST STM32F746G Discovery
  • STM32F411E_DISCO
  • STM32F412G_DISCO
  • STM32F4_DISCO
  • Saola 1 w/Wroom
  • Saola 1 w/Wrover
  • Seeeduino Wio Terminal
  • Seeeduino XIAO
  • Serpente
  • Silicognition LLC M4-Shim
  • Simmel
  • SparkFun LUMIDrive
  • SparkFun MicroMod RP2040 Processor
  • SparkFun MicroMod SAMD51 Processor
  • SparkFun MicroMod nRF52840 Processor
  • SparkFun Pro Micro RP2040
  • SparkFun Pro nRF52840 Mini
  • SparkFun Qwiic Micro
  • SparkFun RedBoard Turbo
  • SparkFun SAMD21 Dev Breakout
  • SparkFun SAMD21 Mini Breakout
  • SparkFun STM32 MicroMod Processor
  • SparkFun Thing Plus - RP2040
  • SparkFun Thing Plus - SAMD51
  • Sprite_v2b
  • StackRduino M0 PRO
  • TG-Boards' Datalore IP M4
  • TG-Watch
  • THUNDERPACK_v11
  • THUNDERPACK_v12
  • Targett Module Clip w/Wroom
  • Targett Module Clip w/Wrover
  • Teensy 4.0
  • Teensy 4.1
  • Teknikio Bluebird
  • The Open Book Feather
  • TinkeringTech ScoutMakes Azul
  • TinyS2
  • Trinket M0 Haxpress
  • UARTLogger II
  • WarmBit BluePixel nRF52840
  • Winterbloom Big Honking Button
  • Winterbloom Sol
  • XinaBox CC03
  • XinaBox CS11
  • iMX RT 1020 EVK
  • iMX RT 1060 EVK
  • keithp.com snekboard
  • micro:bit v2
  • microS2
  • nanoESP32-S2 w/Wrover
  • nanoESP32-S2 w/Wroom
  • ndGarage[n°] Bit6: FeatherSnow-v2
  • ndGarage[n°]Bit6:FeatherSnow
  • nice!nano
  • senseBox MCU
  • stm32f411ce-blackpill
  • stm32f411ce-blackpill-with-flash
  • uChip
  • uGame10

class busio.I2C(scl: microcontroller.Pin, sda: microcontroller.Pin, *, frequency: int = 100000, timeout: int = 255)

两线串行协议

I2C 是一种用于在设备之间进行通信的两线协议。在物理层,它由 2 条线组成:SCL 和 SDA,分别是时钟线和数据线。

也可以看看

直接使用这个类需要仔细的锁管理。相反,用于 I2CDevice管理锁。

也可以看看

使用此类直接读取寄存器需要手动位解包。相反,使用现有的驱动程序或使用 注册 数据描述符制作一个 。

参数
  • scl (Pin) – 时钟引脚

  • sda (Pin) – 数据引脚

  • frequency (int) – 以赫兹为单位的时钟频率

  • timeout (int) – 最大时钟延长 timeut -(仅用于 bitbangio.I2C;忽略用于busio.I2C)

笔记

在 nRF52840 上,只能创建一个 I2C 对象,除了在 Circuit Playground Bluefruit 上允许创建两个对象,一个用于板载加速度计,另一个用于板外使用。

deinit(self)None

释放对底层硬件的控制,以便其他类可以使用它。

__enter__(self)I2C

上下文管理器中使用的无操作。

__exit__(self)None

在上下文退出时自动取消初始化硬件。有关更多信息,请参阅 Lifetime 和 ContextManagers

scan(self)List[int]

扫描 0x08 和 0x77 之间的所有 I2C 地址,并返回响应的列表。

返回

I2C 总线上的设备 ID 列表

返回类型

list

try_lock(self)bool

尝试获取 I2C 锁。成功时返回 True。

返回

当锁被抓取时为真

返回类型

bool

unlock(self)None

释放 I2C 锁。

readfrom_into(self, address: int, buffer: _typing.WriteableBuffer, *, start: int = 0, end: Optional[int] = None)None

buffer从 选择的设备读入address。读取的字节数将是 的长度buffer。必须至少读取一个字节。

如果提供startend ,则缓冲区将被切片,就像 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 ,然后发送一个停止位。

如果提供 startend ,则缓冲区将被切片,就像 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_bufferout_buffer 并且 in_buffer 可以是相同的缓冲区,因为它们是按顺序使用的。

如果提供 startend,则相应的缓冲区将被切片为 if buffer[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。由客户来管理适当的选择行,通常缩写为CSSS。(这很常见,因为多个辅助节点可以共享clock, MOSIMISO线路,从而共享硬件。)

在给定的引脚上构造一个 SPI 对象。

笔记

如果可能的话,SPI 外设按需要的顺序分配,例如最高速度和不首先共享使用。例如,在 nRF52840 上,有一个 32MHz SPI 外设和多个 8MHz 外设,其中一些也可用于 I2C。首先返回 32MHz SPI 外设,然后是独占的 8MHz SPI 外设,最后是共享的 8MHz 外设。

也可以看看

直接使用这个类需要仔细的锁管理。相反,用于 SPIDevice管理锁。

也可以看看

使用此类直接读取寄存器需要手动位解包。相反,使用现有的驱动程序或使用 注册数据描述符制作一个 。.

参数
  • clock (Pin) – 用于时钟的引脚。

  • MOSI (Pin) – Main Out Selected In 引脚。

  • MISO (Pin) – Main In Selected Out 引脚。

frequency :int

实际的 SPI 总线频率。由于内部限制,这可能与请求的频率不匹配。

deinit(self)None

关闭 SPI 总线。

__enter__(self)SPI

上下文管理器使用的无操作。由上下文管理器助手提供。

__exit__(self)None

退出上下文时自动取消初始化硬件。有关更多信息,请参阅 Lifetime 和 ContextManagers

configure(self, *, baudrate: int = 100000, polarity: int = 0, phase: int = 0, bits: int = 8)None

配置 SPI 总线。SPI 对象必须被锁定。

参数
  • baudrate (int) – 所需的时钟频率,以赫兹为单位。由于可用时钟设置的粒度,实际时钟速率可能更高或更低。检查frequency 实际时钟速率的属性。

  • polarity (int) – 时钟线的基本状态(0 或 1)

  • phase (int) – 捕获数据的时钟边沿。第一个 (0) 或第二个 (1)。上升或下降取决于时钟极性。

  • bits (int) – 每个字的位数

笔记

在 SAMD21 上,可以将波特率设置为 24 MHz,但不能保证该速度有效。12 MHz 是下一个可用的较低速度,并且符合 SAMD21 的规格。

笔记

在 nRF52840 上,这些波特率可用:125kHz、250kHz、1MHz、2MHz、4MHz 和 8MHz。如果您选择其中之一以外的波特率,则将选择最接近的较低波特率,最低为 125kHz。可以创建两个 SPI 对象,除了在 Circuit Playground Bluefruit 上,它只允许一个(以允许额外的 I2C 对象)。

try_lock(self)bool

尝试获取 SPI 锁。成功时返回 True。

返回

当锁被抓取时为真

返回类型

bool

unlock(self)None

释放 SPI 锁。

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

当前超时,以秒为单位(浮动)。

deinit(self)None

取消初始化 UART 并释放任何硬件资源以供重用。

__enter__(self)UART

上下文管理器使用的无操作。

__exit__(self)None

退出上下文时自动取消初始化硬件。有关更多信息,请参阅 Lifetime 和 ContextManagers

read(self, nbytes: Optional[int] = None)Optional[bytes]

读取字符。如果 nbytes 指定,则最多读取那么多字节。否则,读取到达的所有内容,直到连接超时。强烈建议提供预期的字节数,因为它会更快。

返回

数据读取

返回类型

bytes 或r None

readinto(self, buf: _typing.WriteableBuffer)Optional[int]

将字节读入 buf. 最多读取 len(buf) 字节。

返回

读取和存储的字节数 buf

返回类型

intNone(非阻塞错误)

CircuitPython 4.0 中的新功能: 不允许使用长度参数。

readline(self)bytes
读取一行,以换行符结尾,或

如果超时发生较早,则返回 None ,或者如果未找到换行符且 timeout=0 则返回所有可读内容

返回

读取的行

返回类型

bytesNone

write(self, buf: _typing.WriteableBuffer)Optional[int]

将字节缓冲区写入总线。

CircuitPython 4.0 中的新功能: buf 必须是字节,而不是字符串。

返回

写入的字节数

类型

整数或无

reset_input_buffer(self)None

丢弃输入缓冲区中的任何未读字符。

class busio.Parity

类似枚举的类来定义用于验证正确数据传输的奇偶校验。

ODD :int

总数应该是奇数。

EVEN :int

总数应该是偶数。