Skip to main content
读写并扫描连接到 Lager Box 的 I2C(集成电路总线)设备。

导入

方法

方法参考

Net.get(name, type=NetType.I2C)

按名称获取一个 I2C Net。
参数: 返回: I2C Net 实例

config(frequency_hz, pull_ups)

配置 I2C 总线参数。只有显式给出的参数会被修改;省略的参数保留已保存的值。

scan(start_addr, end_addr)

扫描 I2C 总线上已连接的设备。
返回: list[int] - 以 ACK 应答的 7 位地址列表

read(address, num_bytes, output_format, overrides)

从 I2C 设备读取字节。
返回: list[int] - 收到的字节,以整数表示(当 output_format="list" 时)

write(address, data, overrides)

向 I2C 设备写入字节。

write_read(address, data, num_bytes, output_format, overrides)

用重复起始条件,在一次 I2C 事务中先写后读。这是读取设备寄存器的标准做法。
返回: list[int] - 收到的字节,以整数表示(当 output_format="list" 时)

get_config()

获取该 Net 的原始配置字典。
返回: dict - 完整的 Net 配置,包含名称、角色、仪器和参数

输出格式

read()write_read()output_format 参数决定数据以何种形式返回:

示例

基本的设备读取

寄存器读写

总线配置

多设备配置

逐次调用的配置覆盖

受支持的硬件

多通道 FTDI 适配器

FTDI Net 从 Net 记录的 params.interface 取得通道,接受 A-D0-3。请用 lager nets add --interface 设置它。没有 interface 的 Net 使用通道 A,在单通道的 FT232H 上这也是唯一的选择。 I2C 运行在 FTDI 芯片的 MPSSE 引擎上,而在 FT4232H 上只有通道 A 和 B 带有 MPSSE 引擎。对于 I2C Net,lager nets add 会拒绝 C 和 D。手工改成 C 或 D 的 Net 记录会在该 Net 打开时失败,错误信息会指出该通道。 一块芯片上各类 Net 如何分配通道,请参阅 Nets

LabJack U3

  • 在 U3 上使用 I2C 需要 U3 硬件版本 1.21 或更高。U3 只能作为总线主机。
  • U3 没有上拉电阻。请从 SDA 和 SCL 各接一个外部电阻到 VS;LabJack 建议 4.7 kΩ。没有上拉时,每个地址都会返回 NAK,scan() 返回空列表。
  • pull_ups 对 U3 不起作用。
  • 一次事务最多写 50 字节、读 52 字节。超出的事务会抛出错误。
  • 时钟约在 10 kHz 至 150 kHz 之间运行,并且绝不会超过 frequency_hz。超出该范围的请求会被钳位,并在脚本的标准错误输出上给出警告。
  • write()write_read() 会检查地址的应答,以及每个字节的应答。错误信息会指出设备拒绝的第一个字节。写入 31 字节或更多时,错误信息不会指出是哪一个字节。
  • FIO0-FIO3 不能承载 I2C。使用这些引脚的 Net 会让驱动抛出错误。
引脚分配,以及如何用其他引脚创建 U3 Net,请参阅 I2C

说明

  • Net 必须配置为 NetType.I2C
  • 地址采用 7 位格式(0x00-0x7F),不是左移后的形式
  • pull_ups 只在 Aardvark 适配器上有效;LabJack T7 和 LabJack U3 会忽略它
  • write_read() 用重复起始条件实现原子的寄存器读取
  • 默认扫描范围(0x08-0x77)跳过保留地址
  • 配置修改会持久化到 saved_nets.json,供后续命令使用
  • LabJack T7 把请求的频率映射到一个时钟节流值,范围约为 130 Hz 至 450 kHz
  • LabJack U3 约在 10 kHz 至 150 kHz 之间运行