新增I2C chip资源树操作报错

I2C_5新增Chip,资源树操作报错。

CSR配置

    "I2c_5": {
        "Chips": [
            "Cpld_Exu"
        ]
    },
    ……
    "Cpld_Exu": {
        "Address": 36,
        "AddrWidth": 1,
        "OffsetWidth": 1,
        "WriteTmout": 0,
        "ReadTmout": 0,
        "HealthStatus": 0
    },

资源树操作

通过I2c_5对象操作没报错,读取数据都是0。
~ ~ # busctl --user call bmc.kepler.hwproxy /bmc/kepler/Bus/I2c/I2c_5 bmc.kepler.Bus.BlockIO Read a{ss}yy 0 36 10
ay 10 0 0 0 0 0 0 0 0 0 0
~ ~ #

通过Cpld_Exu_0101对象操作报错。
~ ~ # busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Cpld/Cpld_Exu_0101 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0 2
Call failed: {“name”:“BMC.Error.Unknow”,“format”:“./opt/bmc/libmc/lualib/mc/context.lua:185: ./opt/bmc/libmc/lualib/sd_bus/init.lua:117: ./opt/bmc/apps/hwproxy/lualib/hwproxy_objects/app_bus.lua:104: …bmc/apps/hwproxy/lualib/hwproxy_objects/work_objects.lua:74: chip: Cpld_Exu_0101, bus: I2c_5, read failed: kepler.hwproxy.IOError: Input/Output Error.”}
~ ~ #

疑问

1 使用I2c_5对象时,如何指定读取的offset
2 使用Cpld_Exu_0101对象读取报错是什么原因

对比iBMC

读取0x24设备的0地址
% i2cread 5 2 0x24 0
0x22 0x00

%

2 个赞

问题1:使用I2c_5对象进行读取的时候,可以通过WriteRead的方法来指定对应的偏移。
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Bus/I2c/I2c_5 bmc.kepler.Bus.BlockIO WriteRead a{ss}yayy 0 …
假设此处是offsetWidth:1, offset:2的时候,可以使用
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Bus/I2c/I2c_5 bmc.kepler.Bus.BlockIO WriteRead a{ss}yayy 0 36 1 0x2 10

问题2:Cpld这个器件类型是用于做Cpld升级的,不支持读。可以将Cpld_Exu修改成通用chip,如Chip_Exu使用

WriteRead 方法可以成功读取,社区没看到Read/Write/WriteRead使用方法、使用场景的说明,是否可以提供

1 个赞