语法
参数
选项
不带子命令调用时,列出 Box 上的 I2C Net(或显示指定 Net 的配置)。
子命令
config
配置 I2C 总线参数。这些设置会在后续命令中保持有效。
示例:
scan
扫描 I2C 总线上连接的设备。它逐个探测地址,并报告回应 ACK 的那些地址。
默认范围
0x08-0x77 排除了 I2C 的保留地址。
示例:
read
从 I2C 设备读取字节。
示例:
write
向 I2C 设备写入字节。
数据可以作为
DATA 参数提供,也可以通过 --data-file 提供,但不能同时使用两者。
示例:
transfer
在一次 I2C 事务中先写后读,中间使用重复起始条件。这是读取寄存器的标准做法:先写入寄存器地址,然后在不释放总线的情况下读取寄存器值。
示例:
十六进制数据格式
数据参数接受多种十六进制写法:
所有数值都必须在字节范围内(
0x00-0xFF)。
地址格式
I2C 地址是 7 位值(0x00-0x7F)。您可以用十六进制或十进制指定地址:
频率格式
时钟频率接受数值,并可带可选后缀:受支持的硬件
LabJack T7 把请求的频率映射到一个时钟分频档位,最高约 450 kHz。如果 T7 固件拒绝计算出的档位,驱动程序会以最高速率运行并打印警告。
LabJack U3
U3 通过它自己的固件命令而不是 LJM 来运行 I2C。在 U3 上使用 I2C 需要 U3 硬件版本 1.21 或更高。U3 只能作为总线主机。 引脚: 默认通道FIO6-FIO7 把 SDA 分配给 FIO6,SCL 分配给 FIO7。若要使用其他引脚,请用 lager nets add 配合 --sda 和 --scl 选项创建 Net。
FIO0-FIO3 不能承载 I2C。EIO 和 CIO 线位于 U3 的 DB15 连接器上。
上拉: U3 没有上拉电阻。请从 SDA 和 SCL 各接一个外部电阻到 VS。
LabJack 建议 4.7 kΩ。没有上拉时,每个地址都会返回 NAK,scan 返回空列表。
--pull-ups 对 U3 不起作用,config 会打印
pull_ups=n/a (external resistors required)。
限制:
- 一次传输最多写 50 字节、读 52 字节。
- 时钟约在 10 kHz 至 150 kHz 之间运行,并且 Box 绝不会超过您请求的速率。超出该范围的请求会被钳位。
config打印硬件实际使用的速率,两者不同时会在括号中给出请求值:
config 输出中的速率。
错误: U3 会检查地址的应答,以及它写入的每个字节的应答。错误信息会指出设备拒绝的第一个字节:
Net 配置
I2C Net 配置在 Box 的saved_nets.json 中。Net 记录示例:
输出格式
示例
故障排除
扫描不到任何设备
- 检查 SDA 和 SCL 的接线
- 确认已接上拉电阻(100kHz 时典型值为 4.7k)
- Aardvark:可以尝试
--pull-ups on启用内部上拉 - LabJack U3:请加装外部上拉电阻。U3 本身没有,没有它们扫描不到任何设备
- 确认设备的供电已连接
总线错误
- LabJack T7:连接之后的第一次事务可能返回总线错误。这是正常的,驱动程序会自动处理
- 可以尝试用
--frequency 100k降低频率 - 检查是否存在总线争用(多个主机)
NACK 错误
- 核对设备地址(有些数据手册给出的是左移后的 8 位地址)
- 确认设备已通电且不处于复位状态
- 检查是否与总线上的其他设备存在地址冲突
说明
- 默认 I2C Net 可以用
lager defaults add --i2c-net NETNAME设置 - LabJack T7 约在 130 Hz 至 450 kHz 之间运行,LabJack U3 约在 10 kHz 至 150 kHz 之间运行
config会打印 LabJack U3 实际使用的时钟速率,它可能与请求值不同- Aardvark 适配器支持内部上拉,可以通过
config --pull-ups切换 transfer命令使用 I2C 重复起始条件,实现原子的先写后读操作
参见
- SPI — SPI 总线通信(另一种常见的串行协议)
- Python I2C API — 在 Python 脚本中自动进行 I2C 操作
- 术语表 — I2C、SPI 及其他术语的定义

