# i2c.8

I2C(8)

I2C(8)

FreeBSD System Manager's Manual

I2C(8)

## [名称](#__u540D___u79F0_)

`i2c` —

测试 I2C 总线和从设备

## [概要](#__u6982___u8981_)

`i2c` `-a` address \[`-f` device] \[`-d` r|w] \[`-w` 0|8|16] \[`-o` offset] \[`-c` count] \[`-m` tr|ss|rs|no] \[`-b`] \[`-v`] `i2c` `-s` \[`-f` device] \[`-n` skip\_addr] \[`-v`] `i2c` `-r` \[`-f` device] \[`-v`]

## [描述](#__u63CF___u8FF0_)

`i2c` 实用程序可用于与 I2C 总线上的设备执行原始数据传输（读取或写入）。 它还可以扫描总线以查找可用设备并重置 I2C 控制器。

选项如下：

[`-a`](#a) address

要操作的 I2C 设备上的 7 位地址（十六进制）。

[`-b`](#b)

二进制模式——执行读取操作时，从设备读取的数据以二进制格式输出到标准输出；进行写入时，从标准输入读取要写入设备的二进制数据。

[`-c`](#c) count

要传输的字节数（dec）。

[`-d`](#d) r|w

传输方向：r - 读，w - 写。

[`-f`](#f) device

要使用的 I2C 总线（默认为 /dev/iic0）。

[`-m`](#m) tr|ss|rs|no

寻址模式，即 I2C 总线操作在传输偏移量写入设备之后和实际读/写操作之前执行。

tr

完全转移

ss

停止然后开始

rs

重复开始

no

none

一些 I2C 总线硬件不提供对单独启动、重复启动和停止操作的控制。 此类硬件只能将偏移量和数据的完整传输作为单个操作执行。 tr 模式创建描述传输的控制结构并将它们作为单个完整事务提交给驱动程序。 此模式适用于所有类型的 I2C 硬件。

[`-n`](#n) skip\_addr

跳过地址 - 在总线扫描期间要跳过的地址。 有两种方法可以指定要忽略的地址：通过范围“a..b”或使用选定的地址“a:b:c”。 此选项仅在使用 "-s" 时可用。

[`-o`](#o) offset

设备内用于数据传输的偏移量（十六进制）。 默认为零。 使用 “-w 0” 禁用将偏移量写入从站。

[`-r`](#r)

重置控制器。

[`-s`](#s)

扫描总线上的设备。

[`-v`](#v)

冗长。

[`-w`](#w) 0|8|16

设备寻址宽度（以位为单位）。 这用于确定如何将 `-o` 指定的 offset 量传递给从站。 零意味着偏移量被忽略并且根本不传递给从机。

## [警告](#__u8B66___u544A_)

使用 `i2c` 实用程序操作从 I2C 设备时必须非常小心。 系统的重要配置数据通常保存在位于 I2C 总线上的非易失性但可写入的存储器中，例如以太网硬件地址、RAM 模块参数 (SPD)、处理器复位配置字等。

当此类配置数据被删除或更改时，很容易使整个系统无法使用，因此只有在您确切知道自己在做什么时才使用 “-d w” （写入）命令。

还要避免不正常地中断 I2C 总线上正在进行的事务，因为它可能导致潜在的危险影响。 考虑以下场景：当主机 CPU 在开始的 I2C 事务中间复位（无论出于何种原因）时，I2C 从设备可能会处于写入模式，等待数据或偏移量到达。 当 CPU 重新初始化并再次与这个 I2C 从设备通信时，它发送的命令和其他控制信息被从设备视为它正在等待的数据或偏移量，如果执行这样的写入，则有很大的损坏可能性。

## [实例](#__u5B9E___u4F8B_)

* 扫描设备的默认总线 (/dev/iic0)：

  i2c -s
* 扫描设备的默认总线 (/dev/iic0) 并跳过地址 0x56 和 0x45。

  i2c -s -n 0x56:0x45
* 扫描设备的默认总线 (/dev/iic0) 并跳过地址范围 0x34 到 0x56。

  i2c -s -n 0x34..0x56
* 从地址 0x56 的设备（例如，一个 EEPROM）读取 8 个字节的数据：

  i2c -a 0x56 -d r -c 8
* 将文件 data.bin 中的 16 字节数据写入偏移量 0x10 处的设备 0x56：

  i2c -a 0x56 -d w -c 16 -o 0x10 -b < data.bin
* 在两个 EEPROM 之间复制 4 个字节（/dev/iic1 上的 0x56 到 /dev/iic0 上的 0x57）：

  i2c -a 0x56 -f /dev/iic1 -d r -c 0x4 -b | i2c -a 0x57 -f /dev/iic0 -d w -c 4 -b
* 重置控制器：

  i2c -f /dev/iic1 -r

## [参见](#__u53C2___u89C1_)

iic(4), iicbus(4)

## [历史](#__u5386___u53F2_)

`i2c` 实用程序出现在 FreeBSD 8.0 中。

## [作者](#__u4F5C___u8005_)

`i2c` 实用程序和本手册页由 Bartlomiej Sieka <<tur@semihalf.com>> 和 Michal Hajduk <<mih@semihalf.com>> 编写。

May 22, 2019

FreeBSD 13.1-RELEASE


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://man.bsdcn.org/man8/i2c.8.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
