kp920+1711 I2C2作为I2C还是IPMB,寄存器需要复用吗
答案内容由AI生成,仅供参考:
结论
I2C2 作为 I2C 或 IPMB 取决于引脚复用配置,并非固定功能。 在您提供的图片中可以看到,SoC 侧的 SCL2/SDA2 引脚同时具有 I2C 与 IPMB 复用功能:
C12 SCL2/GPIO84/IPMB2_SCLC11 SDA2/GPIO83/IPMB2_SDA
也就是说,I2C2 与 IPMB2 共用同一组 SCL2/SDA2 引脚。如果要把 I2C2 用作 IPMB2,就必须配置管脚复用寄存器,把该组引脚从 I2C 功能切换到 IPMB 功能。
点击此处查看详细分析解答
结论
I2C2 作为 I2C 或 IPMB 取决于引脚复用配置,并非固定功能。 在您提供的图片中可以看到,SoC 侧的 SCL2/SDA2 引脚同时具有 I2C 与 IPMB 复用功能:
C12 SCL2/GPIO84/IPMB2_SCLC11 SDA2/GPIO83/IPMB2_SDA
也就是说,I2C2 与 IPMB2 共用同一组 SCL2/SDA2 引脚。如果要把 I2C2 用作 IPMB2,就必须配置管脚复用寄存器,把该组引脚从 I2C 功能切换到 IPMB 功能。
复用寄存器说明
根据 IPMB 调测经验,IPMB2 相关的复用寄存器定义如下:
| 寄存器 | 作用 | 取值含义 |
|---|---|---|
0x08745044 |
SDA2 管脚复用寄存器 | 3'b000:I2C2 数据信号;3'b011:IPMB2 数据信号 |
0x08745048 |
SCL2 管脚复用寄存器 | 3'b000:I2C2 时钟信号;3'b011:IPMB2 时钟信号 |
0x0874504c |
IPMB3 对应定义(SDA3 相关) | 用于 IPMB3 复用配置 |
0x08745050 |
IPMB3 对应定义(SCL3 相关) | 用于 IPMB3 复用配置 |
因此:
- 作为普通 I2C2 使用时:SDA2/SCL2 复用寄存器应配置为
3'b000 - 作为 IPMB2 使用时:SDA2/SCL2 复用寄存器应配置为
3'b011
软件侧配置要点
除了寄存器复用,IPMB 功能还需要软件配置配合,经验要点如下:
IPMB.BusID取值 0–3 对应 IIC 0–3,即 IIC2 对应BusID = 2(对应 IPMB2)。ModuleID配置决定了管脚复用配置是否正确,必须按平台定义配置。- IPMB 作为 IPMB 使用时,IPMB、IPMIChannel、ChannelID 都要配置为 6。
ChanType配置为 1。- IPMB 的
Instances属性要与 IPMIChannel 的Instance对应。 SlaveAddr示例配置为32。
示例(IPMB_2):
"IPMB_2": {
"ChannelID": 6,
"Instances": [5],
"SlaveAddr": 32,
"BusID": 2,
"ModuleID": 26,
"ResetType": 2,
"ResetOption": 2
}
复用状态检查方法
可以使用 devmemx 读取相应寄存器确认复用状态:
./devmemx -r 0x08745034 0x08745050
经验文档中给出的示例结果为:
[0x8745034]=0x00000003
[0x8745038]=0x00000003
[0x874503C]=0x00000003
[0x8745040]=0x00000003
[0x8745044]=0x00000003
[0x8745048]=0x00000003
[0x874504C]=0x00000003
[0x8745050]=0x00000003
即对应寄存器均为 0x00000003,表示相关通道处于 IPMB 复用状态。若复用关系未正确配置,也可能出现 SMBus 时钟一直为低、i2c read fail, ret: 5 或 i2c write fail, ret: 5 等问题。
注意事项
上述寄存器地址与配置示例来自 Hi3093 平台的 IPMB 调测经验。对于 KP920 + 1711 平台,复用原理一致(I2C2 与 IPMB2 共用 SCL2/SDA2),但具体寄存器基址、ModuleID 取值仍需按 KP920+1711 平台的 pinmux 定义和硬件设计核对,不宜直接照搬 Hi3093 的地址与参数。图片中已体现 KP920 侧 SCL2/SDA2 与 IPMB2_SCL/IPMB2_SDA 的复用关系,可作为硬件侧确认依据。
但是我是kp920+1711我不知道配置的寄存器啊
