IPMB调测经验分享

1、配置方法

“IPMB.BusID”取值0-3是对应IIC 0-3,即也就是Hi3093的IPMB0-3。配置参考(注意ModuleID配置决定了管脚复用配置正确性),如某机型(Hi3093)使用IIC0-3作为IPMB0-3:
“IPMB_0”: {
“ChannelID”: 6,
“Instances”: [
2
],
“SlaveAddr”: 32,
“BusID”: 0,
“ResetType”: 2,
“ResetOption”: 2
},
“IPMB_1”: {
“ChannelID”: 6,
“Instances”: [
1
],
“SlaveAddr”: 32,
“BusID”: 1,
“ModuleID”: 25,
“ResetType”: 2,
“ResetOption”: 2
},
“IPMB_2”: {
“ChannelID”: 6,
“Instances”: [
5
],
“SlaveAddr”: 32,
“BusID”: 2,
“ModuleID”: 26,
“ResetType”: 2,
“ResetOption”: 2
},
“IPMB_3”: {
“ChannelID”: 6,
“Instances”: [
6
],
“SlaveAddr”: 32,
“BusID”: 3,
“ModuleID”: 27,
“ResetType”: 2,
“ResetOption”: 2
},

说明1——ModuleID

ModuleID的含义如下,只有IPMB0可以不用明确配置,默认已经OK,IPMB1-3必须明确配置ModuleID:

ModuleID 枚举名 寄存器操作 说明
24 (0x18) IO_MULTI_IPMB0_T_I2C LP[0x334] mask=0x010 val=0x010; T_IOMG[0x034] mask=0x007 val=0x003; T_IOMG[0x038] mask=0x007 val=0x003 IPMB0 使用 T 侧 I2C 管脚
25 (0x19) IO_MULTI_IPMB1_T_I2C LP[0x334] mask=0x008 val=0x008; T_IOMG[0x03C] mask=0x007 val=0x003; T_IOMG[0x040] mask=0x007 val=0x003 IPMB1 使用 T 侧 I2C 管脚
26 (0x1A) IO_MULTI_IPMB2_T_I2C LP[0x334] mask=0x004 val=0x004; T_IOMG[0x044] mask=0x007 val=0x003; T_IOMG[0x048] mask=0x007 val=0x003 IPMB2 使用 T 侧 I2C 管脚
27 (0x1B) IO_MULTI_IPMB3_T_I2C LP[0x334] mask=0x002 val=0x002; T_IOMG[0x04C] mask=0x007 val=0x003; T_IOMG[0x050] mask=0x007 val=0x003 IPMB3 使用 T 侧 I2C 管脚

说明2——ResetType参数

默认 ResetType=1(BMC 触发),不会监听上下电事件进行复位/初始化。 ResetType=2(HOST 上电复位),会正确处理上下电场景。

2、状态查询

IPMB2 对应定义为0x08745044、0x08745048, IPMB3对应定义为0x0874504c、0x08745050。
0x08745044定义:
SDA2管脚复用寄存器
3’b000: I2C2数据信号
3’b011: IPMB2 数据信号
0x08745048定义:
SCL2管脚复用寄存器
3’b000: I2C2时钟信号
3’b011: IPMB2 时钟信号

3、给出2个机型配置对应检测方法:

工具可以用devmem,也可以用 devmemx public_tools - AtomGit

机型1:使用IIC0-3作为IPMB使用:

~ /data/trust/home # ./devmemx -r 0x08745034 0x08745050
[0x8745034]=0x00000003
[0x8745038]=0x00000003
[0x874503C]=0x00000003
[0x8745040]=0x00000003
[0x8745044]=0x00000003
[0x8745048]=0x00000003
[0x874504C]=0x00000003
[0x8745050]=0x00000003
~ /data/trust/home #

~ /data/trust/home # ./devmemx --ipmb show ipmb0
=== IPMB show 2026-08-25 20:22:22.002151 base=0x08716000 ===
[CTR +0x00]=0x00000007
[DATA +0x04]=— (读 DATA 会消耗 RX FIFO,dump 不读)
[CR +0x08]=0x00000000
[SR +0x0C]=0x00000000
[FRM +0x10]=0x0000002E frm_len=46
[RCV_N +0x14]=0x00000000 rcv_num=0 full=0
[TRANS +0x18]=0x00000000 trans_len=0
[PRER +0x20]=0x00000023
[SLVA +0x24]=0x00000020 addr=0x10
[SLVB +0x28]=0x00000020 addr=0x10
[MTSR +0x30]=0x00014120
[DISC +0x34]=0x00000000
[RCV_C +0x38]=0x003B94CE
[TX_ST +0x40]=0x00000000
[ECC +0x50]=0x00000000
— 分析 —
速率: PRER=0x23 N=35 T_scl≈10.44 us (≈95.8 kHz) 单字节≈94.0 us
控制: core_en=1 ien=1 tran_ien=1 slvA=0x10 slvB=0x10
FIFO: rcv_num=0 frm_len=46 full=0 empty=1 trans_len=0
统计: discard_cnt=0 rcv_cnt=3904718 (DISCARD=FIFO丢帧, loss=仲裁失败)
状态: trans_busy=0 rcv_flg=0 trans_flg=0 tx_state=0 i2c_state=0
异常: sto_except=0 time_out=0 MTSR.loss=0 busy=0
总线: sda_hi=0 sda_lo=0 scl_hi=0 scl_lo=0
— SLVADDR 核对 (§17.1 #2) —
slvA=0x10 slvB=0x10 (BMC 常见 0x20,IMU 常见 0x2C,须总线唯一)
!! SLVADDR_A 与 SLVADDR_B 相同 — 可能配置异常
— 鉴别诊断 —
(当前无 DISCARD 增长,硬件层未见明显异常)
~ /data/trust/home #
~ /data/trust/home #
~ /data/trust/home # ./devmemx --ipmb show ipmb1
=== IPMB show 2026-08-25 20:23:59.755492 base=0x08717000 ===
[CTR +0x00]=0x00000007
[DATA +0x04]=— (读 DATA 会消耗 RX FIFO,dump 不读)
[CR +0x08]=0x00000000
[SR +0x0C]=0x00000000
[FRM +0x10]=0x00000000 frm_len=0
[RCV_N +0x14]=0x00000000 rcv_num=0 full=0
[TRANS +0x18]=0x00000000 trans_len=0
[PRER +0x20]=0x00000023
[SLVA +0x24]=0x00000020 addr=0x10
[SLVB +0x28]=0x00000020 addr=0x10
[MTSR +0x30]=0x00014120
[DISC +0x34]=0x00000000
[RCV_C +0x38]=0x00000000
[TX_ST +0x40]=0x00000000
[ECC +0x50]=0x00000000
— 分析 —
速率: PRER=0x23 N=35 T_scl≈10.44 us (≈95.8 kHz) 单字节≈94.0 us
控制: core_en=1 ien=1 tran_ien=1 slvA=0x10 slvB=0x10
FIFO: rcv_num=0 frm_len=0 full=0 empty=1 trans_len=0
统计: discard_cnt=0 rcv_cnt=0 (DISCARD=FIFO丢帧, loss=仲裁失败)
状态: trans_busy=0 rcv_flg=0 trans_flg=0 tx_state=0 i2c_state=0
异常: sto_except=0 time_out=0 MTSR.loss=0 busy=0
总线: sda_hi=0 sda_lo=0 scl_hi=0 scl_lo=0
— SLVADDR 核对 (§17.1 #2) —
slvA=0x10 slvB=0x10 (BMC 常见 0x20,IMU 常见 0x2C,须总线唯一)
!! SLVADDR_A 与 SLVADDR_B 相同 — 可能配置异常
— 鉴别诊断 —
(当前无 DISCARD 增长,硬件层未见明显异常)
~ /data/trust/home #
~ /data/trust/home # ./devmemx --ipmb show ipmb2
=== IPMB show 2026-08-25 20:24:01.817263 base=0x08718000 ===
[CTR +0x00]=0x00000007
[DATA +0x04]=— (读 DATA 会消耗 RX FIFO,dump 不读)
[CR +0x08]=0x00000000
[SR +0x0C]=0x00000000
[FRM +0x10]=0x00000000 frm_len=0
[RCV_N +0x14]=0x00000000 rcv_num=0 full=0
[TRANS +0x18]=0x00000000 trans_len=0
[PRER +0x20]=0x00000023
[SLVA +0x24]=0x00000020 addr=0x10
[SLVB +0x28]=0x00000020 addr=0x10
[MTSR +0x30]=0x00014120
[DISC +0x34]=0x00000000
[RCV_C +0x38]=0x00000000
[TX_ST +0x40]=0x00000000
[ECC +0x50]=0x00000000
— 分析 —
速率: PRER=0x23 N=35 T_scl≈10.44 us (≈95.8 kHz) 单字节≈94.0 us
控制: core_en=1 ien=1 tran_ien=1 slvA=0x10 slvB=0x10
FIFO: rcv_num=0 frm_len=0 full=0 empty=1 trans_len=0
统计: discard_cnt=0 rcv_cnt=0 (DISCARD=FIFO丢帧, loss=仲裁失败)
状态: trans_busy=0 rcv_flg=0 trans_flg=0 tx_state=0 i2c_state=0
异常: sto_except=0 time_out=0 MTSR.loss=0 busy=0
总线: sda_hi=0 sda_lo=0 scl_hi=0 scl_lo=0
— SLVADDR 核对 (§17.1 #2) —
slvA=0x10 slvB=0x10 (BMC 常见 0x20,IMU 常见 0x2C,须总线唯一)
!! SLVADDR_A 与 SLVADDR_B 相同 — 可能配置异常
— 鉴别诊断 —
(当前无 DISCARD 增长,硬件层未见明显异常)
~ /data/trust/home #
~ /data/trust/home #
~ /data/trust/home # ./devmemx --ipmb show ipmb3
=== IPMB show 2026-08-25 20:24:03.417883 base=0x08719000 ===
[CTR +0x00]=0x00000007
[DATA +0x04]=— (读 DATA 会消耗 RX FIFO,dump 不读)
[CR +0x08]=0x00000000
[SR +0x0C]=0x00000000
[FRM +0x10]=0x00000000 frm_len=0
[RCV_N +0x14]=0x00000000 rcv_num=0 full=0
[TRANS +0x18]=0x00000000 trans_len=0
[PRER +0x20]=0x00000023
[SLVA +0x24]=0x00000020 addr=0x10
[SLVB +0x28]=0x00000020 addr=0x10
[MTSR +0x30]=0x00014120
[DISC +0x34]=0x00000000
[RCV_C +0x38]=0x00000000
[TX_ST +0x40]=0x00000000
[ECC +0x50]=0x00000000
— 分析 —
速率: PRER=0x23 N=35 T_scl≈10.44 us (≈95.8 kHz) 单字节≈94.0 us
控制: core_en=1 ien=1 tran_ien=1 slvA=0x10 slvB=0x10
FIFO: rcv_num=0 frm_len=0 full=0 empty=1 trans_len=0
统计: discard_cnt=0 rcv_cnt=0 (DISCARD=FIFO丢帧, loss=仲裁失败)
状态: trans_busy=0 rcv_flg=0 trans_flg=0 tx_state=0 i2c_state=0
异常: sto_except=0 time_out=0 MTSR.loss=0 busy=0
总线: sda_hi=0 sda_lo=0 scl_hi=0 scl_lo=0
— SLVADDR 核对 (§17.1 #2) —
slvA=0x10 slvB=0x10 (BMC 常见 0x20,IMU 常见 0x2C,须总线唯一)
!! SLVADDR_A 与 SLVADDR_B 相同 — 可能配置异常
— 鉴别诊断 —
(当前无 DISCARD 增长,硬件层未见明显异常)
~ /data/trust/home #

机型2:只使用IIC0作为IPMB,其他IIC作为普通IIC:

~ /data/trust/home # ./devmemx -r 0x08745034 0x08745050
[0x8745034]=0x00000003
[0x8745038]=0x00000003
[0x874503C]=0x00000000
[0x8745040]=0x00000000
[0x8745044]=0x00000000
[0x8745048]=0x00000000
[0x874504C]=0x00000000
[0x8745050]=0x00000000
~ /data/trust/home #

~ /data/trust/home # ./devmemx --ipmb show ipmb0
=== IPMB show 2026-08-25 20:17:06.870200 base=0x08716000 ===
[CTR +0x00]=0x00000007
[DATA +0x04]=— (读 DATA 会消耗 RX FIFO,dump 不读)
[CR +0x08]=0x00000000
[SR +0x0C]=0x00000000
[FRM +0x10]=0x0000000D frm_len=13
[RCV_N +0x14]=0x00000000 rcv_num=0 full=0
[TRANS +0x18]=0x00000000 trans_len=0
[PRER +0x20]=0x00000023
[SLVA +0x24]=0x00000020 addr=0x10
[SLVB +0x28]=0x00000020 addr=0x10
[MTSR +0x30]=0x00014120
[DISC +0x34]=0x00000000
[RCV_C +0x38]=0x00015EED
[TX_ST +0x40]=0x00000000
[ECC +0x50]=0x00000000
— 分析 —
速率: PRER=0x23 N=35 T_scl≈10.44 us (≈95.8 kHz) 单字节≈94.0 us
控制: core_en=1 ien=1 tran_ien=1 slvA=0x10 slvB=0x10
FIFO: rcv_num=0 frm_len=13 full=0 empty=1 trans_len=0
统计: discard_cnt=0 rcv_cnt=89837 (DISCARD=FIFO丢帧, loss=仲裁失败)
状态: trans_busy=0 rcv_flg=0 trans_flg=0 tx_state=0 i2c_state=0
异常: sto_except=0 time_out=0 MTSR.loss=0 busy=0
总线: sda_hi=0 sda_lo=0 scl_hi=0 scl_lo=0
— SLVADDR 核对 (§17.1 #2) —
slvA=0x10 slvB=0x10 (BMC 常见 0x20,IMU 常见 0x2C,须总线唯一)
!! SLVADDR_A 与 SLVADDR_B 相同 — 可能配置异常
— 鉴别诊断 —
(当前无 DISCARD 增长,硬件层未见明显异常)
~ /data/trust/home # ./devmemx --ipmb show ipmb1
=== IPMB show 2026-08-25 20:17:08.662037 base=0x08717000 ===
[CTR +0x00]=0x00000001
[DATA +0x04]=— (读 DATA 会消耗 RX FIFO,dump 不读)
[CR +0x08]=0x00000000
[SR +0x0C]=0x00000030
[FRM +0x10]=0x00000000 frm_len=0
[RCV_N +0x14]=0x00000000 rcv_num=0 full=0
[TRANS +0x18]=0x00000000 trans_len=0
[PRER +0x20]=0x00000000
[SLVA +0x24]=0x00000000 addr=0x00
[SLVB +0x28]=0x00000000 addr=0x00
[MTSR +0x30]=0x00014120
[DISC +0x34]=0x00000000
[RCV_C +0x38]=0x00000000
[TX_ST +0x40]=0x00000000
[ECC +0x50]=0x00000000
— 分析 —
速率: PRER=0x00 N=0 T_scl≈0.29 us (≈3448.3 kHz) 单字节≈2.6 us
控制: core_en=1 ien=0 tran_ien=0 slvA=0x00 slvB=0x00
FIFO: rcv_num=0 frm_len=0 full=0 empty=1 trans_len=0
统计: discard_cnt=0 rcv_cnt=0 (DISCARD=FIFO丢帧, loss=仲裁失败)
状态: trans_busy=0 rcv_flg=0 trans_flg=0 tx_state=0 i2c_state=0
异常: sto_except=0 time_out=0 MTSR.loss=0 busy=0
总线: sda_hi=0 sda_lo=1 scl_hi=0 scl_lo=1
— SLVADDR 核对 (§17.1 #2) —
slvA=0x00 slvB=0x00 (BMC 常见 0x20,IMU 常见 0x2C,须总线唯一)
提示: 两地址均为 0,请核对 CSR/设备树与实际总线地址
— 鉴别诊断 —
★ 判定: 总线物理异常 (sda/scl hi/lo)
~ /data/trust/home # ./devmemx --ipmb show ipmb2
=== IPMB show 2026-08-25 20:17:15.915045 base=0x08718000 ===
[CTR +0x00]=0x00000001
[DATA +0x04]=— (读 DATA 会消耗 RX FIFO,dump 不读)
[CR +0x08]=0x00000000
[SR +0x0C]=0x00000030
[FRM +0x10]=0x00000000 frm_len=0
[RCV_N +0x14]=0x00000000 rcv_num=0 full=0
[TRANS +0x18]=0x00000000 trans_len=0
[PRER +0x20]=0x00000000
[SLVA +0x24]=0x00000000 addr=0x00
[SLVB +0x28]=0x00000000 addr=0x00
[MTSR +0x30]=0x00014120
[DISC +0x34]=0x00000000
[RCV_C +0x38]=0x00000000
[TX_ST +0x40]=0x00000000
[ECC +0x50]=0x00000000
— 分析 —
速率: PRER=0x00 N=0 T_scl≈0.29 us (≈3448.3 kHz) 单字节≈2.6 us
控制: core_en=1 ien=0 tran_ien=0 slvA=0x00 slvB=0x00
FIFO: rcv_num=0 frm_len=0 full=0 empty=1 trans_len=0
统计: discard_cnt=0 rcv_cnt=0 (DISCARD=FIFO丢帧, loss=仲裁失败)
状态: trans_busy=0 rcv_flg=0 trans_flg=0 tx_state=0 i2c_state=0
异常: sto_except=0 time_out=0 MTSR.loss=0 busy=0
总线: sda_hi=0 sda_lo=1 scl_hi=0 scl_lo=1
— SLVADDR 核对 (§17.1 #2) —
slvA=0x00 slvB=0x00 (BMC 常见 0x20,IMU 常见 0x2C,须总线唯一)
提示: 两地址均为 0,请核对 CSR/设备树与实际总线地址
— 鉴别诊断 —
★ 判定: 总线物理异常 (sda/scl hi/lo)
~ /data/trust/home # ./devmemx --ipmb show ipmb3
=== IPMB show 2026-08-25 20:17:17.101871 base=0x08719000 ===
[CTR +0x00]=0x00000001
[DATA +0x04]=— (读 DATA 会消耗 RX FIFO,dump 不读)
[CR +0x08]=0x00000000
[SR +0x0C]=0x00000030
[FRM +0x10]=0x00000000 frm_len=0
[RCV_N +0x14]=0x00000000 rcv_num=0 full=0
[TRANS +0x18]=0x00000000 trans_len=0
[PRER +0x20]=0x00000000
[SLVA +0x24]=0x00000000 addr=0x00
[SLVB +0x28]=0x00000000 addr=0x00
[MTSR +0x30]=0x00014120
[DISC +0x34]=0x00000000
[RCV_C +0x38]=0x00000000
[TX_ST +0x40]=0x00000000
[ECC +0x50]=0x00000000
— 分析 —
速率: PRER=0x00 N=0 T_scl≈0.29 us (≈3448.3 kHz) 单字节≈2.6 us
控制: core_en=1 ien=0 tran_ien=0 slvA=0x00 slvB=0x00
FIFO: rcv_num=0 frm_len=0 full=0 empty=1 trans_len=0
统计: discard_cnt=0 rcv_cnt=0 (DISCARD=FIFO丢帧, loss=仲裁失败)
状态: trans_busy=0 rcv_flg=0 trans_flg=0 tx_state=0 i2c_state=0
异常: sto_except=0 time_out=0 MTSR.loss=0 busy=0
总线: sda_hi=0 sda_lo=1 scl_hi=0 scl_lo=1
— SLVADDR 核对 (§17.1 #2) —
slvA=0x00 slvB=0x00 (BMC 常见 0x20,IMU 常见 0x2C,须总线唯一)
提示: 两地址均为 0,请核对 CSR/设备树与实际总线地址
— 鉴别诊断 —
★ 判定: 总线物理异常 (sda/scl hi/lo)
~ /data/trust/home #

1 个赞