openbmc中如何通过OS命令查询I2C设备的通道及MAC地址

在 OpenBMC 中,你可以使用 `i2cdetect` 命令来查看 I2C 设备的 bus 和地址。这个命令是 OpenBMC 系统中集成好的,可以直接使用。

具体分为两个步骤:

🔍 第一步:列出所有 I2C 总线

首先,需要知道系统里有哪些可用的 I2C 总线。执行以下命令:

```bash

i2cdetect -l

```

这个命令会列出所有 I2C 总线控制器及其编号。输出会类似这样:

  • `i2c-0 i2c i2c-0-mux (chan_id 0) I2C adapter`

  • `i2c-1 i2c i2c-0-mux (chan_id 1) I2C adapter`

  • `i2c-5 i2c i2c-6-mux (chan_id 0) I2C adapter`

记下你想要探测的总线号,比如 `5`。

🎯 第二步:扫描指定总线上的设备

知道总线号后,就可以扫描该总线上连接了哪些设备了。使用以下命令:

```bash

i2cdetect -y <总线号>

```

例如,扫描总线 `5`:

```bash

i2cdetect -y 5

```

执行后,你会看到一个地址表格。表格中的每个格子代表一个可能的 7 位设备地址(十六进制表示)。不同符号的含义如下:

| 表格符号 | 含义 |

| :--- | :--- |

| **数字** (如 `4c`) | 在这个地址上**发现了一个设备**,且未被内核驱动占用,可直接用工具访问。 |

| **`UU`** | 在这个地址上**有设备**,但**已被内核驱动占用**,无法直接用 `i2cget` 等用户空间工具访问。 |

| **`--`** | 该地址**没有设备响应**。 |

> **注意**:硬件原理图中的地址(如 `0x98`)通常是 8 位格式,需要**右移一位**才是软件命令中要用的 7 位地址(如 `0x4c`)。

💡 高级技巧:处理复杂总线拓扑

在复杂的服务器硬件中,I2C 总线经常通过多路复用器(Mux)扩展出多条子总线。如果扫描结果一片空白,可能是因为设备挂在 Mux 的某个下游通道上,而默认通道没有开启。OpenBMC 社区提供了一个 Python 脚本 `tree.py`,可以解析 `i2cdetect -l` 的输出,并以树状图的形式直观展示总线之间的父子关系,帮你理清复杂的拓扑结构。

**实战小贴士**:例如,你想读取 EEPROM 的 MAC 地址,如果知道设备挂在总线 `1` 且地址为 `0x50`,可以先扫描确认设备存在(显示 `50` 或 `UU`),再使用 `i2cget` 命令读取数据。

相关推荐
jingshaoqi_ccc1 个月前
采用GD32F103C8T6开发板的硬件I2C通信实现ADS1115的模拟电压读取(附源码下载)
硬件i2c·i2c·ads1115·gd32f103c8t6
A星空1231 个月前
一、Linux嵌入式的I2C驱动开发
linux·c++·驱动开发·i2c
proware2 个月前
VGA无显示分析
i2c·hdmi转换芯片
Terasic友晶科技2 个月前
7-DE10-Nano的HDMI方块移动案例的整体实现(含Quartus完整工程免费下载)
fpga开发·i2c·pll·de10-nano·hdmi传输·方块移动案例·quartus prime
0欧姆2 个月前
I2C 驱动 --- 设备,AHT10
i2c·qnx·aht10·raspi
矜辰所致2 个月前
CH58x 芯片 I2C 使用(SHT20/SHT40示例)
i2c·温湿度传感器·sht21·sht40·ch58x i2c使用
wxmtwfx2 个月前
Linux内核时钟芯片DS3232驱动源码分析
linux·驱动开发·spi·i2c·ds3232
wotaifuzao2 个月前
I2C通信--深度解析与未来发展
单片机·嵌入式硬件·物联网·信息与通信·i2c
来鸟 鸣间2 个月前
i2c_add_driver关键流程
linux·i2c