我在Riser卡接了一张PCIe卡,它的MCU地址为0x30(7bit),在别的设备使用i2ctransfer验证读写是正常的
使用该卡的四元组信息配置了CSR:14140130_99994001_99994001.sr
可以加载Chip_MCU,但使用hwproxy组件提供的WriteRead方法读写报错:
想问一下,bmc.kepler.Chip.BlockIO提供的ComboWriteRead和WriteRead应该怎么正确使用
我在Riser卡接了一张PCIe卡,它的MCU地址为0x30(7bit),在别的设备使用i2ctransfer验证读写是正常的
使用该卡的四元组信息配置了CSR:14140130_99994001_99994001.sr
busctl的方式:
busctl --user call bmc.kepler.hwproxy <path> bmc.kepler.Chip.BlockIO ComboWriteRead a{ss}uayuu <a{ss}: ctx> <u: req_cmd> <ay: req_data> <u: rsp_cmd> <u: rsp_len>
mdbctl的方式:
mdbctl call <object> bmc.kepler.Chip.BlockIO ComboWriteRead <a{ss}: ctx> <u: req_cmd> <ay: req_data> <u: rsp_cmd> <u: rsp_len>
path
:待访问Chip的资源树路径,一般为/bmc/kepler/Chip/Complex/<object>,object
为环境中芯片的对象名ctx
:RPC的通用上下文,可直接填0req_cmd
:表示读/写请求,取值0x20req_data
:请求数据rsp_cmd
:表示读/写响应,取值0x21rsp_len
:响应长度。使用时,命令的实际长度小于响应长度时使用0xff填充,大于时进行截断地址0x30是7bit地址,Address应该是写8bit地址吧,我从96改成48反而无法访问了
查看错误码含义
使用公式ret_code = (reg_value & 0xFA) | 0x100
反算出寄存器值,从而确定错误类型。
0x22
(即二进制00100010
),表示HiSPort总线读写操作未完成,确保访问地址正确的前提下,通常是硬件链路不通的问题。
发送FIFO已满(位7):值为0,表示I2C控制器的发送FIFO未满。
时钟拉伸(位6):值为0,表示读写期间未出现时钟拉伸。
ACK校验错误(位5):值为1,表示读写时ACK校验出现错误。
总线异常拉低(位4):值为0,表示读写启动时未检测到总线异常拉低。
从fifo取数据超时(位3):值为0,表示从fifo取数据时未出现超时错误。
命令帧结束标志(位2):值为0,表示命令帧未结束。
读写出错(位1):值为1,表示I2C读写出错,汇总了BIT[6:3]的错误。
操作完成(位0):值为0,表示此次I2C读写操作未完成。
对应的总线配置是否正确呢?可以通过一键收集,查看AppDump中hwproxy组件的拓扑信息topology.txt,确认对应的总线是否与i2ctransfer操作的总线id一致。
HisPort总线有直接调试的工具吗,类似i2ctools这种
正常发i2c命令就可以我理解,hisport是底层机制,应该是不感知的
暂时还没有
Block Write - Block Read Process Call过程没有rsp_cmd,当前提供的接口无法实现 ---- 这个问题可以补充描述一下吗,没有特别理解
当前提供的Read、WriteRead、ComboWriteRead读之前其实都是发了一个byte的offset再读,但是SMBus的Process Call是不发offset直接读
您好,请教一下,问题:不清楚以下查询功耗参数的具体含义。
busctl --user call bmc.kepler.hwproxy
/bmc/kepler/Chip/Complex/Chip_Dmini_0101010109
bmc.kepler.Chip.BlockIO ComboWriteRead a{ss}uayuu
0 0x20 0x0e 0x0c 0x80 0x00 0x04 0x00 0x00 0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x87
0x21 32
根据带外管理文档:
@zybwh @caiyesheng_b48v3 @chenghaoyang 大佬们可以解答一下吗?
0x80对应LUNFlag,bit7=1,对应到80
0x0c是请求体长度, 0x80 0x00 0x04 0x00 0x00 0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x87 – 13个,对应0x0c
这个是smbus的报文发送格式,一般在前面章节会有写的
0x00 0x04应该是opcode
还有你说的opcode不太准确,一般smbus都是小端模式,所以应该是 0x04 0x00 才是opcode。就比如length对应的0x02 0x00 0x00 0x00,不是0x20000000,而是0x00000002